[geographiclib] 01/11: Imported Upstream version 1.37

Ross Gammon ross-guest at moszumanska.debian.org
Sun Sep 14 10:15:14 UTC 2014


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

ross-guest pushed a commit to branch master
in repository geographiclib.

commit 39112a01bb1a2d2573a8e372f71083a4d791cd66
Author: Ross Gammon <rossgammon at mail.dk>
Date:   Sat Sep 6 19:06:33 2014 +0200

    Imported Upstream version 1.37
---
 00README.txt                                       |    4 +-
 CMakeLists.txt                                     |  306 +-
 Makefile.in                                        |  240 +-
 NEWS                                               |  494 +-
 aclocal.m4                                         |  399 +-
 cmake/Makefile.in                                  |  102 +-
 cmake/project-config-version.cmake.in              |    2 +-
 cmake/project-config.cmake.in                      |    7 +-
 config.guess                                       |   41 +-
 config.sub                                         |   68 +-
 configure                                          |  799 +-
 configure.ac                                       |   40 +-
 depcomp                                            |  454 +-
 doc/GeographicLib.dox                              | 2732 ++++---
 doc/Makefile.in                                    |  104 +-
 doc/NETGeographicLib.dox                           |   13 +-
 doc/doxyfile-c.in                                  |   36 +-
 doc/doxyfile-for.in                                |   36 +-
 doc/doxyfile-net.in                                |   36 +-
 doc/doxyfile.in                                    |   36 +-
 dotnet/NETGeographicLib/AlbersEqualArea.cpp        |    6 +-
 dotnet/NETGeographicLib/AzimuthalEquidistant.cpp   |    2 +-
 dotnet/NETGeographicLib/CassiniSoldner.cpp         |    2 +-
 dotnet/NETGeographicLib/Ellipsoid.cpp              |    2 +-
 dotnet/NETGeographicLib/Ellipsoid.h                |    2 +-
 dotnet/NETGeographicLib/GeoCoords.cpp              |   16 +-
 dotnet/NETGeographicLib/GeoCoords.h                |   26 +-
 dotnet/NETGeographicLib/Geocentric.cpp             |    2 +-
 dotnet/NETGeographicLib/Geodesic.cpp               |    2 +-
 dotnet/NETGeographicLib/GeodesicExact.cpp          |    2 +-
 dotnet/NETGeographicLib/GeodesicLine.cpp           |    2 +-
 dotnet/NETGeographicLib/GeodesicLineExact.cpp      |    2 +-
 dotnet/NETGeographicLib/Geoid.h                    |   16 +-
 dotnet/NETGeographicLib/Gnomonic.cpp               |    2 +-
 dotnet/NETGeographicLib/GravityModel.h             |    7 +-
 dotnet/NETGeographicLib/LambertConformalConic.cpp  |    2 +-
 dotnet/NETGeographicLib/LocalCartesian.cpp         |    4 +-
 dotnet/NETGeographicLib/MGRS.h                     |   15 +-
 dotnet/NETGeographicLib/MagneticModel.cpp          |    2 +-
 dotnet/NETGeographicLib/MagneticModel.h            |   21 +-
 dotnet/NETGeographicLib/NormalGravity.cpp          |   30 +-
 dotnet/NETGeographicLib/NormalGravity.h            |   42 +
 dotnet/NETGeographicLib/PolarStereographic.cpp     |    2 +-
 dotnet/NETGeographicLib/PolygonArea.cpp            |  115 +-
 dotnet/NETGeographicLib/PolygonArea.h              |  174 +-
 dotnet/NETGeographicLib/Rhumb.cpp                  |  145 +
 dotnet/NETGeographicLib/Rhumb.h                    |  270 +
 dotnet/NETGeographicLib/TransverseMercator.cpp     |    2 +-
 .../NETGeographicLib/TransverseMercatorExact.cpp   |    2 +-
 dotnet/NETGeographicLib/UTMUPS.cpp                 |    4 +-
 dotnet/NETGeographicLib/UTMUPS.h                   |   19 +-
 dotnet/Projections/Form1.Designer.cs               |   13 +
 dotnet/Projections/Form1.cs                        |    1 +
 dotnet/Projections/PolyPanel.cs                    |   10 +
 dotnet/Projections/Projections.csproj              |    9 +
 dotnet/Projections/RhumbPanel.Designer.cs          |  247 +
 dotnet/Projections/RhumbPanel.cs                   |   81 +
 dotnet/Projections/RhumbPanel.resx                 |  120 +
 dotnet/Projections/TypeIIIProjPanel.cs             |    2 +-
 dotnet/examples/CS/example-Rhumb.cs                |   38 +
 dotnet/examples/CS/example-RhumbLine.cs            |   42 +
 dotnet/examples/CS/example-UTMUPS.cs               |    2 +-
 dotnet/examples/ManagedCPP/example-Rhumb.cpp       |   31 +
 dotnet/examples/ManagedCPP/example-RhumbLine.cpp   |   35 +
 dotnet/examples/ManagedCPP/example-UTMUPS.cpp      |    4 +-
 dotnet/examples/VB/example-Rhumb.vb                |   24 +
 dotnet/examples/VB/example-RhumbLine.vb            |   27 +
 dotnet/examples/VB/example-UTMUPS.vb               |    2 +-
 examples/CMakeLists.txt                            |   21 +-
 examples/GeoidToGTX.cpp                            |   15 +-
 examples/Makefile.am                               |    5 +-
 examples/Makefile.in                               |  107 +-
 examples/example-Accumulator.cpp                   |    2 +-
 examples/example-AlbersEqualArea.cpp               |    8 +-
 examples/example-AzimuthalEquidistant.cpp          |    2 +-
 examples/example-CassiniSoldner.cpp                |    2 +-
 examples/example-Ellipsoid.cpp                     |    2 +-
 examples/example-Geocentric.cpp                    |    2 +-
 examples/example-Geodesic-small.cpp                |    2 +-
 examples/example-Geodesic.cpp                      |    2 +-
 examples/example-GeodesicExact.cpp                 |    2 +-
 examples/example-GeodesicLine.cpp                  |    2 +-
 examples/example-GeodesicLineExact.cpp             |    4 +-
 examples/example-Gnomonic.cpp                      |    2 +-
 examples/example-LambertConformalConic.cpp         |    6 +-
 examples/example-LocalCartesian.cpp                |    2 +-
 examples/example-NormalGravity.cpp                 |    7 +-
 examples/example-PolarStereographic.cpp            |    2 +-
 examples/example-PolygonArea.cpp                   |    2 +-
 .../{example-Geodesic.cpp => example-Rhumb.cpp}    |   18 +-
 ...mple-GeodesicLine.cpp => example-RhumbLine.cpp} |   26 +-
 examples/example-TransverseMercator.cpp            |    3 +-
 examples/example-TransverseMercatorExact.cpp       |    2 +-
 examples/example-UTMUPS.cpp                        |    2 +-
 examples/make-egmcof.cpp                           |   46 +
 include/GeographicLib/Accumulator.hpp              |   40 +-
 include/GeographicLib/AlbersEqualArea.hpp          |   72 +-
 include/GeographicLib/AzimuthalEquidistant.hpp     |   21 +-
 include/GeographicLib/CassiniSoldner.hpp           |   42 +-
 include/GeographicLib/CircularEngine.hpp           |   17 +-
 include/GeographicLib/Config-ac.h.in               |   18 -
 include/GeographicLib/Config.h                     |    6 +-
 include/GeographicLib/Config.h.in                  |    4 +-
 include/GeographicLib/Constants.hpp                |  156 +-
 include/GeographicLib/DMS.hpp                      |   14 +-
 include/GeographicLib/Ellipsoid.hpp                |  129 +-
 include/GeographicLib/EllipticFunction.hpp         |  157 +-
 include/GeographicLib/GeoCoords.hpp                |   99 +-
 include/GeographicLib/Geocentric.hpp               |   54 +-
 include/GeographicLib/Geodesic.hpp                 |  122 +-
 include/GeographicLib/GeodesicExact.hpp            |  119 +-
 include/GeographicLib/GeodesicLine.hpp             |   74 +-
 include/GeographicLib/GeodesicLineExact.hpp        |   74 +-
 include/GeographicLib/Geohash.hpp                  |   36 +-
 include/GeographicLib/Geoid.hpp                    |   79 +-
 include/GeographicLib/Gnomonic.hpp                 |   28 +-
 include/GeographicLib/GravityCircle.hpp            |   44 +-
 include/GeographicLib/GravityModel.hpp             |   65 +-
 include/GeographicLib/LambertConformalConic.hpp    |   83 +-
 include/GeographicLib/LocalCartesian.hpp           |   47 +-
 include/GeographicLib/MGRS.hpp                     |   62 +-
 include/GeographicLib/MagneticCircle.hpp           |   28 +-
 include/GeographicLib/MagneticModel.hpp            |   57 +-
 include/GeographicLib/Math.hpp                     |  418 +-
 include/GeographicLib/NormalGravity.hpp            |  119 +-
 include/GeographicLib/OSGB.hpp                     |   43 +-
 include/GeographicLib/PolarStereographic.hpp       |   48 +-
 include/GeographicLib/PolygonArea.hpp              |   79 +-
 include/GeographicLib/Rhumb.hpp                    |  337 +
 include/GeographicLib/SphericalEngine.hpp          |   27 +-
 include/GeographicLib/SphericalHarmonic.hpp        |   46 +-
 include/GeographicLib/SphericalHarmonic1.hpp       |   32 +-
 include/GeographicLib/SphericalHarmonic2.hpp       |   47 +-
 include/GeographicLib/TransverseMercator.hpp       |   55 +-
 include/GeographicLib/TransverseMercatorExact.hpp  |   63 +-
 include/GeographicLib/UTMUPS.hpp                   |   69 +-
 include/GeographicLib/Utility.hpp                  |  141 +-
 include/Makefile.am                                |    1 +
 include/Makefile.in                                |  165 +-
 include/Makefile.mk                                |    1 +
 legacy/C/CMakeLists.txt                            |    3 +-
 legacy/Fortran/CMakeLists.txt                      |    2 +
 m4/libtool.m4                                      |   12 +-
 man/CartConvert.1                                  |   29 +-
 man/CartConvert.usage                              |    2 +-
 man/ConicProj.1                                    |   38 +-
 man/ConicProj.1.html                               |    8 +-
 man/ConicProj.pod                                  |   10 +-
 man/ConicProj.usage                                |   21 +-
 man/GeoConvert.1                                   |  100 +-
 man/GeoConvert.1.html                              |   46 +-
 man/GeoConvert.pod                                 |   47 +-
 man/GeoConvert.usage                               |   56 +-
 man/GeodSolve.1                                    |   49 +-
 man/GeodSolve.1.html                               |   10 +-
 man/GeodSolve.pod                                  |    6 +-
 man/GeodSolve.usage                                |    8 +-
 man/GeodesicProj.1                                 |   52 +-
 man/GeodesicProj.1.html                            |    8 +-
 man/GeodesicProj.pod                               |   18 +-
 man/GeodesicProj.usage                             |   14 +-
 man/GeoidEval.1                                    |   99 +-
 man/GeoidEval.1.html                               |   20 +-
 man/GeoidEval.pod                                  |   44 +-
 man/GeoidEval.usage                                |   55 +-
 man/Gravity.1                                      |   79 +-
 man/Gravity.1.html                                 |   20 +-
 man/Gravity.pod                                    |   40 +-
 man/Gravity.usage                                  |   41 +-
 man/MagneticField.1                                |   77 +-
 man/MagneticField.1.html                           |   20 +-
 man/MagneticField.pod                              |   40 +-
 man/MagneticField.usage                            |   38 +-
 man/Makefile.am                                    |   13 +-
 man/Makefile.in                                    |  129 +-
 man/Makefile.mk                                    |    1 +
 man/Planimeter.1                                   |   64 +-
 man/Planimeter.1.html                              |   28 +-
 man/Planimeter.pod                                 |   34 +-
 man/Planimeter.usage                               |   49 +-
 man/RhumbSolve.1                                   |  338 +
 man/RhumbSolve.1.html                              |  202 +
 man/RhumbSolve.pod                                 |  234 +
 man/RhumbSolve.usage                               |  198 +
 man/TransverseMercatorProj.1                       |   44 +-
 man/TransverseMercatorProj.1.html                  |    8 +-
 man/TransverseMercatorProj.pod                     |   10 +-
 man/TransverseMercatorProj.usage                   |   22 +-
 matlab/Makefile.in                                 |   91 +-
 maxima/geod.mac                                    |   36 +-
 maxima/geodC4.mac                                  |   58 +
 missing                                            |  405 +-
 pom.xml                                            |    5 +-
 python/Makefile.in                                 |   91 +-
 src/AlbersEqualArea.cpp                            |  118 +-
 src/AzimuthalEquidistant.cpp                       |   13 +-
 src/CMakeLists.txt                                 |    9 +
 src/CassiniSoldner.cpp                             |   25 +-
 src/CircularEngine.cpp                             |    4 +-
 src/DMS.cpp                                        |    2 +-
 src/Ellipsoid.cpp                                  |   69 +-
 src/EllipticFunction.cpp                           |  191 +-
 src/GeoCoords.cpp                                  |   35 +-
 src/Geocentric.cpp                                 |   22 +-
 src/Geodesic.cpp                                   |  145 +-
 src/GeodesicExact.cpp                              | 7255 +-----------------
 src/GeodesicExactC4.cpp                            | 7867 ++++++++++++++++++++
 src/GeodesicLine.cpp                               |   29 +-
 src/GeodesicLineExact.cpp                          |   35 +-
 src/{Geographic.pro => GeographicLib.pro}          |    2 +
 src/Geohash.cpp                                    |   17 +-
 src/Geoid.cpp                                      |   48 +-
 src/Gnomonic.cpp                                   |   21 +-
 src/GravityCircle.cpp                              |   32 +-
 src/GravityModel.cpp                               |   45 +-
 src/LambertConformalConic.cpp                      |   77 +-
 src/LocalCartesian.cpp                             |   12 +-
 src/MGRS.cpp                                       |   94 +-
 src/MagneticCircle.cpp                             |    2 +-
 src/MagneticModel.cpp                              |   41 +-
 src/Makefile.am                                    |   11 +-
 src/Makefile.in                                    |  264 +-
 src/Makefile.mk                                    |   12 +-
 src/NormalGravity.cpp                              |  191 +-
 src/OSGB.cpp                                       |   11 +-
 src/PolarStereographic.cpp                         |   45 +-
 src/PolygonArea.cpp                                |   35 +-
 src/Rhumb.cpp                                      |  218 +
 src/SphericalEngine.cpp                            |   32 +-
 src/TransverseMercator.cpp                         |  112 +-
 src/TransverseMercatorExact.cpp                    |  103 +-
 src/UTMUPS.cpp                                     |  109 +-
 src/Utility.cpp                                    |   19 +
 tools/CMakeLists.txt                               |   31 +-
 tools/CartConvert.cpp                              |   17 +-
 tools/ConicProj.cpp                                |   34 +-
 tools/GeoConvert.cpp                               |   17 +-
 tools/GeodSolve.cpp                                |   25 +-
 tools/GeodesicProj.cpp                             |   34 +-
 tools/GeoidEval.cpp                                |   11 +-
 tools/Gravity.cpp                                  |   32 +-
 tools/MagneticField.cpp                            |   30 +-
 tools/Makefile.am                                  |   15 +-
 tools/Makefile.in                                  |  309 +-
 tools/Makefile.mk                                  |   19 +-
 tools/Planimeter.cpp                               |   72 +-
 tools/RhumbSolve.cpp                               |  249 +
 tools/TransverseMercatorProj.cpp                   |   36 +-
 tools/geographiclib-get-geoids.sh                  |    2 +-
 tools/geographiclib-get-gravity.sh                 |    4 +-
 tools/geographiclib-get-magnetic.sh                |    2 +-
 windows/CartConvert-vc10x.vcxproj                  |   92 +
 windows/ConicProj-vc10x.vcxproj                    |   92 +
 windows/GeoConvert-vc10x.vcxproj                   |   92 +
 windows/GeodSolve-vc10x.vcxproj                    |   92 +
 windows/GeodesicProj-vc10x.vcxproj                 |   92 +
 windows/Geographic-vc10.vcxproj                    |    3 +
 ...aphic-vc10.vcxproj => Geographic-vc10x.vcxproj} |   69 +-
 windows/Geographic-vc8.vcproj                      |   12 +
 windows/Geographic-vc9.vcproj                      |   12 +
 windows/GeographicLib-vc10.sln                     |   15 +
 ...ographicLib-vc8.sln => GeographicLib-vc10x.sln} |   82 +-
 windows/GeographicLib-vc8.sln                      |   14 +
 windows/GeographicLib-vc9.sln                      |   14 +
 windows/GeoidEval-vc10x.vcxproj                    |   92 +
 windows/Gravity-vc10x.vcxproj                      |   92 +
 windows/MagneticField-vc10x.vcxproj                |   92 +
 windows/NETGeographic-vc10.vcxproj                 |    2 +
 windows/Planimeter-vc10x.vcxproj                   |   92 +
 windows/RhumbSolve-vc10.vcxproj                    |  163 +
 windows/RhumbSolve-vc10x.vcxproj                   |   92 +
 windows/RhumbSolve-vc8.vcproj                      |  340 +
 windows/RhumbSolve-vc9.vcproj                      |  351 +
 windows/TransverseMercatorProj-vc10x.vcxproj       |   92 +
 274 files changed, 21420 insertions(+), 13463 deletions(-)

diff --git a/00README.txt b/00README.txt
index 47ef4b8..baa6483 100644
--- a/00README.txt
+++ b/00README.txt
@@ -46,6 +46,7 @@ Files
       OSGB.[ch]pp -- Ordnance Survey grid system
       Geohash.[ch]pp -- conversions for geohashes
       Ellipsoid.[ch]pp -- ellipsoid properties
+      Rhumb.[ch]pp -- rhumb line calculations
 
     examples/
       example-*.cpp -- simple usage examples for all the classes
@@ -61,6 +62,7 @@ Files
       Gravity.cpp -- evaluate gravity
       MagneticField.cpp -- evaluate magnetic field
       Planimeter.cpp -- computer polygon areas
+      RhumbSolve.cpp -- calculate rhumb lines
       geographiclib-get-geoids -- download geoid datasets
       geographiclib-get-magnetic -- download geomagnetic models
 
@@ -109,7 +111,7 @@ Files
 
     doc/
       doxyfile.in -- Doxygen config file
-      Geographic.dox -- main page of Doxygen documentation
+      GeographicLib.dox -- main page of Doxygen documentation
       geodseries30.html -- geodesic series to 30th order
       tmseries30.html -- transverse Mercator series to 30th order
       html/* -- directory with built documentation
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5b4f1ee..6c8d967 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,7 +2,7 @@ project (GeographicLib)
 
 # Version information
 set (PROJECT_VERSION_MAJOR 1)
-set (PROJECT_VERSION_MINOR 35)
+set (PROJECT_VERSION_MINOR 37)
 set (PROJECT_VERSION_PATCH 0)
 set (PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}")
 if (PROJECT_VERSION_PATCH GREATER 0)
@@ -12,23 +12,23 @@ endif ()
 if (DEFINED CPACK_PACKAGE_VERSION_COUNT)
 
   # majic (version 0.1.9 and later) invokes cmake defining, e.g.,
-  #   -D CPACK_PACKAGE_VERSION=1.35-SNAPSHOT
+  #   -D CPACK_PACKAGE_VERSION=1.37-001-SNAPSHOT
   #   -D CPACK_PACKAGE_VERSION_COUNT=2
   #   -D CPACK_PACKAGE_VERSION_MAJOR=1
-  #   -D CPACK_PACKAGE_VERSION_MINOR=35
-  #   -D CPACK_PACKAGE_VERSION_SUFFIX=-SNAPSHOT
-  # Check that the first two version numbers are consistent.
+  #   -D CPACK_PACKAGE_VERSION_MINOR=36
+  #   -D CPACK_PACKAGE_VERSION_SUFFIX=-001-SNAPSHOT
+  # Check that the version numbers are consistent.
   if (CPACK_PACKAGE_VERSION_COUNT EQUAL 2)
-    set (CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
+    set (CPACK_PACKAGE_VERSION_PATCH 0)
   elseif (CPACK_PACKAGE_VERSION_COUNT LESS 2)
     message (FATAL_ERROR "CPACK_PACKAGE_VERSION_COUNT must be 2 or more")
   endif ()
   if (NOT (
         CPACK_PACKAGE_VERSION_MAJOR EQUAL PROJECT_VERSION_MAJOR AND
-        CPACK_PACKAGE_VERSION_MINOR EQUAL PROJECT_VERSION_MINOR))
+        CPACK_PACKAGE_VERSION_MINOR EQUAL PROJECT_VERSION_MINOR AND
+        CPACK_PACKAGE_VERSION_PATCH EQUAL PROJECT_VERSION_PATCH))
     message (FATAL_ERROR "Inconsistency in CPACK and PROJECT version numbers")
   endif ()
-  set (PROJECT_VERSION_PATCH ${CPACK_PACKAGE_VERSION_PATCH})
   set (PROJECT_VERSION ${CPACK_PACKAGE_VERSION})
 
 else ()
@@ -42,8 +42,8 @@ endif ()
 
 # The library version tracks the numbering given by libtool in the
 # autoconf set up.
-set (LIBVERSION 10)
-set (LIBVERSIONFULL 10.1.2)
+set (LIBVERSION 13)
+set (LIBVERSIONFULL 13.0.0)
 string (TOLOWER ${PROJECT_NAME} PROJECT_NAME_LOWER)
 string (TOUPPER ${PROJECT_NAME} PROJECT_NAME_UPPER)
 
@@ -111,13 +111,10 @@ endif ()
 # gravity, magnetic, subdirectories of ${GEOGRAPHICLIB_DATA}.
 if (WIN32)
   # The binary installers for the data files for Windows are created
-  # with Inno Setup which uses {commonappdata}.  On most Windows
-  # systems this is
-  # "C:/Documents and Settings/All Users/Application Data", while on
-  # newer systems (Windows 7), it is C:/ProgramData.  However the
-  # longer name "works" on all Windows systems.
+  # with Inno Setup which uses {commonappdata} which (since Windows
+  # Vista) is C:/ProgramData.
   set (GEOGRAPHICLIB_DATA
-    "C:/Documents and Settings/All Users/Application Data/GeographicLib"
+    "C:/ProgramData/GeographicLib"
     CACHE PATH "Location for data for GeographicLib")
 else ()
   set (GEOGRAPHICLIB_DATA
@@ -193,8 +190,8 @@ option (BUILD_NETGEOGRAPHICLIB "Build NETGeographicLib library" OFF)
 # (8) Set the default "real" precision.  This should probably be left
 # at 2 (double).
 set (GEOGRAPHICLIB_PRECISION 2 CACHE STRING
-  "Default real precision: 1 = float, 2 = double, 3 = long double")
-set_property (CACHE GEOGRAPHICLIB_PRECISION PROPERTY STRINGS 1 2 3)
+  "Precision: 1 = float, 2 = double, 3 = extended, 4 = quadruple, 5 = variable")
+set_property (CACHE GEOGRAPHICLIB_PRECISION PROPERTY STRINGS 1 2 3 4 5)
 
 # (9) When making a binary package, should we include the debug version
 # of the library?  This applies to MSVC only, because that's the
@@ -228,33 +225,156 @@ if (NOT MSVC)
   endif ()
 endif ()
 
-if (NOT (CYGWIN OR ANDROID))
-  # cygwin and android have a long double but the support for ::cbrtl,
-  # etc., is missing
-  include (CheckTypeSize)
-  check_type_size ("long double" LONG_DOUBLE BUILTIN_TYPES_ONLY)
-endif ()
+include (CheckTypeSize)
+check_type_size ("long double" LONG_DOUBLE BUILTIN_TYPES_ONLY)
+set (GEOGRAPHICLIB_HAVE_LONG_DOUBLE ${HAVE_LONG_DOUBLE})
 include (TestBigEndian)
-test_big_endian (WORDS_BIGENDIAN)
+test_big_endian (GEOGRAPHICLIB_WORDS_BIGENDIAN)
+
+# Make the compiler more picky.
+if (MSVC)
+  string (REGEX REPLACE "/W[0-4]" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
+else ()
+  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")
+  # check for C++11 support.  If available, the C++11 static_assert is
+  # used.  This flag is *not* propagated to clients that use
+  # GeographicLib.  However, this is of no consequence.  When the client
+  # code is being compiled (and the GeographicLib headers being
+  # included), a work-alike substitution is used.
+  include (CheckCXXCompilerFlag)
+  set (CXX11_FLAG "-std=c++11")
+  check_cxx_compiler_flag (${CXX11_FLAG} CXX11TEST1)
+  if (NOT CXX11TEST1)
+    set (CXX11_FLAG "-std=c++0x")
+    check_cxx_compiler_flag (${CXX11_FLAG} CXX11TEST2)
+    if (NOT CXX11TEST2)
+      unset (CXX11_FLAG)
+    endif ()
+  endif ()
+  if (CXX11_FLAG)
+    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX11_FLAG}")
+  endif ()
+endif ()
+
+# Check whether the C++11 math function: std::expm1, std::atanh,
+# etc. are available.  This flag is *not* propagated to clients that use
+# GeographicLib.  However, this is of no consequence.  When the client
+# code is being compiled (and the GeographicLib headers being included),
+# work-alike substitutions are used.
+include (CheckCXXSourceCompiles)
+set (CMAKE_REQUIRED_FLAGS "${CMAKE_CXX_FLAGS}")
+check_cxx_source_compiles (
+  "#include <cmath>
+int main() {
+  return int(std::hypot(3.0, 4.0) + std::expm1(0.5) + std::log1p(2.0) +
+             std::asinh(10.0) + std::atanh(0.8) + std::cbrt(8.0)) +
+         std::isfinite(4.0) + std::isnan(0.0);
+}\n" CXX11_MATH)
+if (CXX11_MATH)
+  add_definitions (-DGEOGRAPHICLIB_CXX11_MATH=1)
+else ()
+  add_definitions (-DGEOGRAPHICLIB_CXX11_MATH=0)
+endif ()
+
+# Set the include directories.  Look in ${PROJECT_BINARY_DIR}/include
+# first because that's where Config.h will be
+include_directories ("${PROJECT_BINARY_DIR}/include" include)
+
+if (GEOGRAPHICLIB_PRECISION EQUAL 1)
+  message (WARNING "Compiling with floats which results in poor accuracy")
+elseif (GEOGRAPHICLIB_PRECISION EQUAL 2)
+  # This is the default
+elseif (GEOGRAPHICLIB_PRECISION EQUAL 3)
+  if (WIN32)
+    message (WARNING
+      "Cannot support long double on Windows, switching to double")
+    set (GEOGRAPHICLIB_PRECISION 2)
+  endif ()
+elseif (GEOGRAPHICLIB_PRECISION EQUAL 4)
+  if (CMAKE_CXX_COMPILER_ID STREQUAL GNU AND CXX11_MATH)
+    # quad precision numbers appeared in Boost 1.54.
+    find_package (Boost 1.54)
+    if (Boost_FOUND)
+      include_directories ("${Boost_INCLUDE_DIRS}")
+      set (QUAD_LIBRARIES quadmath)
+      if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
+        # Enable Q suffix for quad precision in g++ 4.8 and later
+        set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fext-numeric-literals")
+      endif ()
+      # Suppress the warnings that boost can spew out, e.g.,
+      #   "typedef 'boost_concept_check905' locally defined but not used"
+      set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-local-typedefs")
+    endif ()
+  endif ()
+  if (NOT QUAD_LIBRARIES)
+    message (WARNING "Cannot support quad precision, switching to double")
+    set (GEOGRAPHICLIB_PRECISION 2)
+  endif ()
+elseif (GEOGRAPHICLIB_PRECISION EQUAL 5)
+  if (CXX11_MATH)
+    # Install MPFR C++ version 3.5.9 or later from
+    # http://www.holoborodko.com/pavel/mpfr and install mpreal.h in the
+    # include directory.  NOTE: MPFR C++ is covered by the GPL; be sure
+    # to abide by the terms of this license.
+    #
+    # For Linux, use system versions of mpfr and gmp.  For Apple, use
+    # brew install mpfr.  For Windows, download
+    # MPFR-MPIR-x86-x64-MSVC2010.zip from the MPFR C++ site and unpack
+    # in the top-level directory.  The Windows build only works with
+    # GEOGRAPHICLIB_LIB_TYPE=STATIC.  NOTE: mpfr, gmp, and mpir are
+    # covered by the LGPL; be sure to abide by the terms of this
+    # license.
+    if (WIN32)
+      if (MSVC AND NOT MSVC_VERSION LESS 1800)
+        if (CMAKE_SIZEOF_VOID_P EQUAL 8)
+          set (_ARCH x64)
+        else ()
+          set (_ARCH Win32)
+        endif ()
+        include_directories (mpfr_mpir_x86_x64_msvc2010/mpfr
+          mpfr_mpir_x86_x64_msvc2010/mpir/dll/${_ARCH}/Release)
+        # These are C libraries so it's OK to use release versions for
+        # debug builds.  Also these work for later versions of Visual
+        # Studio (specifically version 12).
+        link_directories (mpfr_mpir_x86_x64_msvc2010/mpfr/dll/${_ARCH}/Release
+          mpfr_mpir_x86_x64_msvc2010/mpir/dll/${_ARCH}/Release)
+        set (MPFR_LIBRARIES mpfr mpir)
+        # Suppress the myriad of "conditional expression is constant"
+        # warnings
+        set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4127")
+      endif ()
+    else ()
+      if (APPLE)
+        include_directories (/usr/local/include)
+        link_directories (/usr/local/lib)
+      endif ()
+      set (MPFR_LIBRARIES mpfr gmp)
+    endif ()
+  endif ()
+  if (NOT MPFR_LIBRARIES)
+    message (WARNING "Cannot support mpfr, switching to double")
+    set (GEOGRAPHICLIB_PRECISION 2)
+  endif ()
+endif ()
+
+if (APPLE AND GEOGRAPHICLIB_PRECISION EQUAL 2)
+  if (CMAKE_SYSTEM_PROCESSOR MATCHES "i.86" OR
+      CMAKE_SYSTEM_PROCESSOR MATCHES "amd64" OR
+      CMAKE_SYSTEM_PROCESSOR MATCHES "x86")
+    set (CMAKE_OSX_ARCHITECTURES "i386 -arch x86_64")
+  endif ()
+endif ()
 
 # Create a Config.h to expose system information to the compiler
 configure_file (
   include/GeographicLib/Config.h.in
   include/GeographicLib/Config.h )
 
-# The documentation depends on doxygen.  Need version 1.8.1.2 or later
-# for support of greek letters and math symbols.
+# The documentation depends on doxygen.
 if (GEOGRAPHICLIB_DOCUMENTATION)
   set (DOXYGEN_SKIP_DOT ON)
-  find_package (Doxygen 1.8.1.2)
-  if (DOXYGEN_FOUND)
-    execute_process (COMMAND ${DOXYGEN_EXECUTABLE} --version
-      OUTPUT_VARIABLE DOXYGEN_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
-    if (DOXYGEN_VERSION VERSION_LESS 1.4.0)
-      set (DOXYGEN_FOUND FALSE)
-      message (STATUS "Doxygen version found, ${DOXYGEN_VERSION}, is too old")
-    endif ()
-  endif ()
+  find_package (Doxygen)
 endif ()
 
 # The man pages are written as pod files and converted to nroff format,
@@ -280,35 +400,39 @@ endif ()
 
 # Look for the tool to compile the Matlab interfaces.
 if (MATLAB_COMPILER)
-  if (WIN32)
-    set (MATLAB_COMPILER_EXT ".bat")
-  else ()
-    set (MATLAB_COMPILER_EXT "")
-  endif ()
-  find_program (MEX "${MATLAB_COMPILER}${MATLAB_COMPILER_EXT}")
-  if (MATLAB_COMPILER MATCHES "mex")
-    get_filename_component (MATLABDIR "${MEX}" REALPATH)
-    get_filename_component (MATLABDIR "${MATLABDIR}" PATH)
-    find_program (MEXEXTPROG "mexext${MATLAB_COMPILER_EXT}"
-      PATHS "${MATLABDIR}")
-    execute_process (COMMAND "${MEXEXTPROG}"
-      OUTPUT_VARIABLE MEXEXT OUTPUT_STRIP_TRAILING_WHITESPACE)
-    set (MEXOPTIONS "-largeArrayDims")
+  if (GEOGRAPHICLIB_PRECISION EQUAL 2)
+    if (WIN32)
+      set (MATLAB_COMPILER_EXT ".bat")
+    else ()
+      set (MATLAB_COMPILER_EXT "")
+    endif ()
+    find_program (MEX "${MATLAB_COMPILER}${MATLAB_COMPILER_EXT}")
+    if (MATLAB_COMPILER MATCHES "mex")
+      get_filename_component (MATLABDIR "${MEX}" REALPATH)
+      get_filename_component (MATLABDIR "${MATLABDIR}" PATH)
+      find_program (MEXEXTPROG "mexext${MATLAB_COMPILER_EXT}"
+        PATHS "${MATLABDIR}")
+      execute_process (COMMAND "${MEXEXTPROG}"
+        OUTPUT_VARIABLE MEXEXT OUTPUT_STRIP_TRAILING_WHITESPACE)
+      set (MEXOPTIONS "-largeArrayDims")
+    else ()
+      set (MEXEXT "mex")
+      set (MEXOPTIONS "--mex")
+    endif ()
+    if (NOT MSVC)
+      # mex files are shared objects => require static lib to be built with
+      # position independent code
+      set (CMAKE_POSITION_INDEPENDENT_CODE ON)
+    endif ()
+    if (NOT MEX)
+      message (WARNING
+        "Cannot find Matlab compiler ${MATLAB_COMPILER}${MATLAB_COMPILER_EXT}")
+    elseif (NOT MEXEXT)
+      set (MEX OFF)
+      message (WARNING "Cannot determine extension for Matlab compiled code")
+    endif ()
   else ()
-    set (MEXEXT "mex")
-    set (MEXOPTIONS "--mex")
-  endif ()
-  if (NOT MSVC)
-    # mex files are shared objects => require static lib to be built with
-    # position independent code
-    set (CMAKE_POSITION_INDEPENDENT_CODE ON)
-  endif ()
-  if (NOT MEX)
-    message (WARNING
-      "Cannot find Matlab compiler ${MATLAB_COMPILER}${MATLAB_COMPILER_EXT}")
-  elseif (NOT MEXEXT)
-    set (MEX OFF)
-    message (WARNING "Cannot determine extension for Matlab compiled code")
+    message (WARNING "Build of Matlab interfaces only works with doubles")
   endif ()
 endif ()
 
@@ -318,54 +442,15 @@ if (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
   set (CMAKE_BUILD_TYPE Release)
 endif ()
 
-# Make the compiler more picky.
-if (MSVC)
-  string (REGEX REPLACE "/W[0-4]" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
-  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
-else ()
-  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")
-  # check for C++11 support.  If available, the C++11 static_assert and
-  # various math functions (std::atanh, etc.) are used.  This flag is
-  # *not* propagated to clients that use GeographicLib.  However, this
-  # is of no consequence.  When the client code is being compiled (and
-  # the GeographicLib headers being included), work-alike substitutions
-  # for static_assert and std::atanh are used.
-  include (CheckCXXCompilerFlag)
-  set (CXX11FLAG "-std=c++11")
-  check_cxx_compiler_flag (${CXX11FLAG} CXX11TEST1)
-  if (NOT CXX11TEST1)
-    set (CXX11FLAG "-std=c++0x")
-    check_cxx_compiler_flag (${CXX11FLAG} CXX11TEST2)
-    if (NOT CXX11TEST2)
-      unset (CXX11FLAG)
-    endif ()
-  endif ()
-  if (CXX11FLAG)
-    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX11FLAG}")
-  endif ()
-endif ()
-
-if (APPLE)
-  if (CMAKE_SYSTEM_PROCESSOR MATCHES "i.86" OR
-      CMAKE_SYSTEM_PROCESSOR MATCHES "amd64" OR
-      CMAKE_SYSTEM_PROCESSOR MATCHES "x86")
-    set (CMAKE_OSX_ARCHITECTURES "i386 -arch x86_64")
-  endif ()
-endif ()
-
 # The list of tools (to be installed into, e.g., /usr/local/bin)
 set (TOOLS CartConvert ConicProj GeodesicProj GeoConvert GeodSolve
-  GeoidEval Gravity MagneticField Planimeter TransverseMercatorProj)
+  GeoidEval Gravity MagneticField Planimeter RhumbSolve TransverseMercatorProj)
 # The list of scripts (to be installed into, e.g., /usr/local/sbin)
 set (SCRIPTS
   geographiclib-get-geoids geographiclib-get-gravity geographiclib-get-magnetic)
 
 set_property (GLOBAL PROPERTY USE_FOLDERS ON)
 
-# Set the include directories.  Look in ${PROJECT_BINARY_DIR}/include
-# first because that's where Config.h will be
-include_directories ("${PROJECT_BINARY_DIR}/include" include)
-
 # The list of subdirectories to process
 add_subdirectory (src)
 add_subdirectory (include/GeographicLib)
@@ -374,16 +459,15 @@ add_subdirectory (man)
 add_subdirectory (doc)
 add_subdirectory (matlab)
 add_subdirectory (python/geographiclib)
-if (GEOGRAPHICLIB_PRECISION EQUAL 2)
-  # The examples assume double precision
-  add_subdirectory (examples)
-endif ()
+add_subdirectory (examples)
 if (BUILD_NETGEOGRAPHICLIB)
-  set (NETGEOGRAPHICLIB_LIBRARIES NETGeographicLib)
-  set (NETLIBNAME NETGeographic)
-  add_subdirectory (dotnet/NETGeographicLib)
   if (GEOGRAPHICLIB_PRECISION EQUAL 2)
+    set (NETGEOGRAPHICLIB_LIBRARIES NETGeographicLib)
+    set (NETLIBNAME NETGeographic)
+    add_subdirectory (dotnet/NETGeographicLib)
     add_subdirectory (dotnet/examples/ManagedCPP)
+  else ()
+    message (WARNING "Build of NETGeographicLib only works with doubles")
   endif ()
 endif ()
 add_subdirectory (cmake)
diff --git a/Makefile.in b/Makefile.in
index a8345a2..10e91cb 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.12.2 from Makefile.am.
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -19,23 +19,51 @@
 #
 # Copyright (C) 2009, Francesco P. Lovergine <frankie at debian.org>
 VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
+        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; \
-    test $$am__dry = yes; \
-  }
+    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@
@@ -56,11 +84,11 @@ build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
 subdir = .
-DIST_COMMON = $(am__configure_deps) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in $(top_srcdir)/configure \
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(top_srcdir)/configure $(am__configure_deps) \
 	$(top_srcdir)/include/GeographicLib/Config-ac.h.in AUTHORS \
 	INSTALL NEWS config.guess config.sub depcomp install-sh \
-	ltmain.sh missing
+	missing ltmain.sh
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
 	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
@@ -74,15 +102,28 @@ mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/include/GeographicLib/Config-ac.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 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 uninstall-recursive
+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;; \
@@ -90,9 +131,29 @@ am__can_run_installinfo = \
   esac
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
   distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+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__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
@@ -141,6 +202,7 @@ am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
 distcleancheck_listfiles = find . -type f -print
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -209,7 +271,6 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POD2HTML = @POD2HTML@
 POD2MAN = @POD2MAN@
-POW_LIB = @POW_LIB@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
@@ -347,14 +408,13 @@ distclean-libtool:
 # (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.
-$(RECURSIVE_TARGETS) $(RECURSIVE_CLEAN_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
+$(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 \
@@ -375,31 +435,13 @@ $(RECURSIVE_TARGETS) $(RECURSIVE_CLEAN_TARGETS):
 	if test "$$dot_seen" = "no"; then \
 	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
 	fi; test -z "$$fail"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-	done
-cscopelist-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
-	done
 
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
+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 \
@@ -415,12 +457,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
 	  fi; \
 	done; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	$(am__define_uniq_tagged_files); \
 	shift; \
 	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
 	  test -n "$$unique" || unique=$$empty_fix; \
@@ -432,15 +469,11 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 	      $$unique; \
 	  fi; \
 	fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+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
@@ -449,18 +482,16 @@ 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
 
-cscope.files: clean-cscope cscopelist-recursive cscopelist
-
-cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
 	case "$(srcdir)" in \
 	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
 	  *) sdir=$(subdir)/$(srcdir) ;; \
@@ -597,9 +628,9 @@ distcheck: dist
 	*.zip*) \
 	  unzip $(distdir).zip ;;\
 	esac
-	chmod -R a-w $(distdir); chmod u+w $(distdir)
-	mkdir $(distdir)/_build
-	mkdir $(distdir)/_inst
+	chmod -R a-w $(distdir)
+	chmod u+w $(distdir)
+	mkdir $(distdir)/_build $(distdir)/_inst
 	chmod a-w $(distdir)
 	test -d $(distdir)/_build || exit 0; \
 	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
@@ -766,27 +797,24 @@ ps-am:
 
 uninstall-am:
 
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
-	cscopelist-recursive ctags-recursive install-am install-strip \
-	tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-	all all-am all-local am--refresh check check-am clean \
-	clean-cscope clean-generic clean-libtool cscope cscopelist \
-	cscopelist-recursive ctags ctags-recursive dist dist-all \
-	dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar dist-tarZ \
-	dist-xz dist-zip distcheck distclean distclean-generic \
-	distclean-hdr distclean-libtool distclean-tags distcleancheck \
-	distdir distuninstallcheck dvi dvi-am html html-am info \
-	info-am install install-am install-data install-data-am \
-	install-data-local 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-recursive \
-	uninstall uninstall-am
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am all-local \
+	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-hdr distclean-libtool \
+	distclean-tags distcleancheck distdir distuninstallcheck dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-data-local 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 uninstall uninstall-am
 
 
 dist-hook:
diff --git a/NEWS b/NEWS
index 71b3d25..aa7f78d 100644
--- a/NEWS
+++ b/NEWS
@@ -4,241 +4,355 @@ For more information, see
 
     http://geographiclib.sourceforge.net/
 
-The current version of the library is 1.35.
+The current version of the library is 1.37.
+
+Changes between 1.37 (released 2014-08-08) and 1.36 versions:
+
+  * Add support for high precision arithmetic.
+
+  * INCOMPATIBLE CHANGE: the static instantiations of various classes
+    for the WGS84 ellipsoid have been changed to a "construct on first
+    use idiom".  This avoids a lot of wasteful initialization before the
+    user's code starts.  Unfortunately it means that existing source
+    code that relies on any of the following static variables will need
+    to be changed to a function call:
+    + AlbersEqualArea::AzimuthalEqualAreaNorth
+    + AlbersEqualArea::AzimuthalEqualAreaSouth
+    + AlbersEqualArea::CylindricalEqualArea
+    + Ellipsoid::WGS84
+    + Geocentric::WGS84
+    + Geodesic::WGS84
+    + GeodesicExact::WGS84
+    + LambertConformalConic::Mercator
+    + NormalGravity::GRS80
+    + NormalGravity::WGS84
+    + PolarStereographic::UPS
+    + TransverseMercator::UTM
+    + TransverseMercatorExact::UTM
+    Thus, occurrences of, for example,
+    const Geodesic& geod = Geodesic::WGS84; // version 1.36 and earlier
+    need to be changed to
+    const Geodesic& geod = Geodesic::WGS84(); // version 1.37 and later
+    (note the parentheses!); alternatively use
+    // works with all versions
+    const Geodesic geod(Constants::WGS84_a(), Constants::WGS84_a());
+
+  * Incompatible change: the environment variables
+    {GEOID,GRAVITY,MAGNETIC}_{NAME,PATH} are now prefixed with
+    GEOGRAPHICLIB_.
+
+  * Incompatible change for Windows XP: retire the Windows XP common
+    data path.  If you're still using Windows XP, then you might have to
+    move the folder C:\Documents and Settings\All Users\Application
+    Data\GeographicLib to C:\ProgramData\GeographicLib.
+
+  * All macro names affecting the compilation now start with
+    GEOGRAPHICLIB_; this applies to GEOID_DEFAULT_NAME,
+    GRAVITY_DEFAULT_NAME, MAGNETIC_DEFAULT_NAME, PGM_PIXEL_WIDTH,
+    HAVE_LONG_DOUBLE, STATIC_ASSERT, WORDS_BIGENDIAN.
+
+  * Changes to PolygonArea:
+    + introduce PolygonAreaT which takes a geodesic class as a
+      parameter;
+    + PolygonArea and PolygonAreaExact are typedef'ed to
+      PolygonAreaT<Geodesic> and PolygonAreaT<GeodesicExact>;
+    + add -E option to Planimeter to use PolygonAreaExact;
+    + add -Q option to Planimeter to calculate the area on the authalic
+      sphere.
+
+  * Add -p option to Planimeter, ConicProj, GeodesicProj,
+    TransverseMercatorProj.
+
+  * Add Rhumb and RhumbLine classes and the RhumbSolve utility.
+
+  * Minor changes to NormalGravity:
+    + add J2ToFlattening and FlatteningToJ2;
+    + use Newton's method to determine f from J2;
+    + in constructor, allow omega = 0 (i.e., treat the spherical case).
+
+  * Add grs80 GravityModel.
+
+  * Make geographiclib-get-{geoids,gravity,magnetic} scripts work on
+    MacOS.
+
+  * Minor changes:
+    + simplify cross-platform support for C++11 mathematical functions;
+    + change way area coefficients are given in GeodesicExact to improve
+      compile times;
+    + enable searching the online documentation;
+    + add macros GEOGRAPHICLIB_VERSION and GEOGRAPHICLIB_VERSION_NUM;
+    + add solution and project files for Visual Studio Express 2010.
+
+Changes between 1.36 (released 2014-05-13) and 1.35 versions:
+
+  * Changes to comply with NGA's prohibition of the use of the
+    upper-case letters N/S to designate the hemisphere when displaying
+    UTM/UPS coordinates:
+    + UTMUPS::DecodeZone allows north/south as hemisphere designators
+      (in addition to n/s);
+    + UTMUPS::EncodeZone now encodes the hemisphere in lower case (to
+      distinguish this use from a grid zone designator);
+    + UTMUPS::EncodeZone takes an optional parameter abbrev to
+      indicate whether to use n/s or north/south as the hemisphere
+      designator;
+    + GeoCoords::UTMUPSRepresentation and AltUTMUPSRepresentation
+      similarly accept the abbrev parameter;
+    + GeoConvert uses the flags -a and -l to govern whether UTM/UPS
+      output uses n/s (the -a flag) or north/south (the -l flag) to
+      denote the hemisphere;
+    + Fixed a bug what allowed +3N to be accepted as an alternation
+      UTM zone designation (instead of 3N).
+    WARNING: The use of lower case n/s for the hemisphere might cause
+    compatibility problems.  However DecodeZone has always accepted
+    either case; so the issue will only arise with other software
+    reading the zone information.  To avoid possible misinterpretation
+    of the zone designator, consider calling EncodeZone with abbrev =
+    false and GeoConvert with -l, so that north/south are used to
+    denote the hemisphere.
+
+  * MGRS::Forward with prec = -1 will produce a grid zone designation.
+    Similarly MGRS::Reverse will decode a grid zone designation (and
+    return prec = -1).
+
+  * Stop using the throw() declaration specification which is
+    deprecated in C++11.
+
+  * Add missing std:: qualifications to copy in LocalCartesion and
+    Geocentric headers (bug found by Clemens).
 
 Changes between 1.35 (released 2014-03-13) and 1.34 versions:
 
-   * Fix blunder in UTMUPS::EncodeEPSG (found by Ben Adler).
+  * Fix blunder in UTMUPS::EncodeEPSG (found by Ben Adler).
 
-   * Matlab wrapper routines geodesic{direct,inverse,line} switch to
-     "exact" routes if |f| > 0.02.
+  * Matlab wrapper routines geodesic{direct,inverse,line} switch to
+    "exact" routes if |f| > 0.02.
 
-   * GeodSolve.cgi allows ellipsoid to be set (and uses the -E option
-     for GeodSolve).
+  * GeodSolve.cgi allows ellipsoid to be set (and uses the -E option
+    for GeodSolve).
 
-   * Set title in HTML versions of man pages for the utility programs.
+  * Set title in HTML versions of man pages for the utility programs.
 
-   * Changes in cmake support:
-     + add _d to names of executables in debug mode of Visual Studio;
-     + add support for Android (cmake-only), thanks to Pullan Yu;
-     + check CPACK version numbers supplied on command line;
-     + configured version of project-config.cmake.in is
-       project-config.cmake (instead of geographiclib-config.cmake), to
-       prevent find_package incorrectly using this file;
-     + fix tests with multi-line output;
-     + this release includes a file, pom.xml, which is used by an
-       experimental build system (based on maven) at SRI.
+  * Changes in cmake support:
+    + add _d to names of executables in debug mode of Visual Studio;
+    + add support for Android (cmake-only), thanks to Pullan Yu;
+    + check CPACK version numbers supplied on command line;
+    + configured version of project-config.cmake.in is
+      project-config.cmake (instead of geographiclib-config.cmake), to
+      prevent find_package incorrectly using this file;
+    + fix tests with multi-line output;
+    + this release includes a file, pom.xml, which is used by an
+      experimental build system (based on maven) at SRI.
 
 Changes between 1.34 (released 2013-12-11) and 1.33 versions:
 
-   * Many changes in cmake support:
-     + minimum version of cmake needed increased to 2.8.4 (which was
-       released in 2011-02);
-     + allow building both shared and static librarys with
-       -D GEOGRAPHICLIB_LIB_TYPE=BOTH;
-     + both shared and static libraries (Release plus Debug) included in
-       binary installer;
-     + find_package uses COMPONENTS and GeographicLib_USE_STATIC_LIBS to
-       select the library to use;
-     + find_package version checking allows nmake and Visual Studio
-       generators to interoperate on Windows;
-     + find_package (GeographicLib ...) requires that GeographicLib be
-       capitalized correctly;
-     + on Unix/Linux, don't include the version number in directory for
-       the cmake configuration files;
-     + defaults for GEOGRAPHICLIB_DOCUMENTATION and
-       BUILD_NETGEOGRAPHICLIB are now OFF;
-     + the GEOGRAPHICLIB_EXAMPLES configuration parameter is no longer
-       used; cmake always configures to build the examples, but they are
-       not built by default (instead build targets: exampleprograms and
-       netexamples);
-     + matlab-all target renamed to matlabinterface;
-     + the configuration parameters PACKAGE_PATH and INSTALL_PATH are
-       now deprecated (use CMAKE_INSTALL_PREFIX instead);
-     + on Linux, the installed package is relocatable;
-     + on MacOSX, the installed utilities can find the shared library.
-
-   * Use a more precise value for OSGB::CentralScale().
-
-   * Add Arc routines to python interface.
-
-   * The Geod utility has been removed; the same functionality lives on
-     with GeodSolve (introduced in version 1.30).
+  * Many changes in cmake support:
+    + minimum version of cmake needed increased to 2.8.4 (which was
+      released in 2011-02);
+    + allow building both shared and static librarys with
+      -D GEOGRAPHICLIB_LIB_TYPE=BOTH;
+    + both shared and static libraries (Release plus Debug) included in
+      binary installer;
+    + find_package uses COMPONENTS and GeographicLib_USE_STATIC_LIBS to
+      select the library to use;
+    + find_package version checking allows nmake and Visual Studio
+      generators to interoperate on Windows;
+    + find_package (GeographicLib ...) requires that GeographicLib be
+      capitalized correctly;
+    + on Unix/Linux, don't include the version number in directory for
+      the cmake configuration files;
+    + defaults for GEOGRAPHICLIB_DOCUMENTATION and
+      BUILD_NETGEOGRAPHICLIB are now OFF;
+    + the GEOGRAPHICLIB_EXAMPLES configuration parameter is no longer
+      used; cmake always configures to build the examples, but they are
+      not built by default (instead build targets: exampleprograms and
+      netexamples);
+    + matlab-all target renamed to matlabinterface;
+    + the configuration parameters PACKAGE_PATH and INSTALL_PATH are
+      now deprecated (use CMAKE_INSTALL_PREFIX instead);
+    + on Linux, the installed package is relocatable;
+    + on MacOSX, the installed utilities can find the shared library.
+
+  * Use a more precise value for OSGB::CentralScale().
+
+  * Add Arc routines to python interface.
+
+  * The Geod utility has been removed; the same functionality lives on
+    with GeodSolve (introduced in version 1.30).
 
 Changes between 1.33 (released 2013-10-08) and 1.32 versions:
 
-   * Add NETGeographic .NET wrapper library (courtesy of Scott Heiman).
+  * Add NETGeographic .NET wrapper library (courtesy of Scott Heiman).
 
-   * Make inspector functions in GeographicLib::Ellipsoid const.
+  * Make inspector functions in GeographicLib::Ellipsoid const.
 
-   * Add Accumulator.cpp to instantiate GeographicLib::Accumulator.
+  * Add Accumulator.cpp to instantiate GeographicLib::Accumulator.
 
-   * Defer some of the initialization of GeographicLib::OSGB to when it
-     is first called.
+  * Defer some of the initialization of GeographicLib::OSGB to when it
+    is first called.
 
-   * Fix bug in autoconf builds under MacOS.
+  * Fix bug in autoconf builds under MacOS.
 
 Changes between 1.32 (released 2013-07-12) and 1.31 versions:
 
-   * Generalize C interface for polygon areas to allow vertices to be
-     specified incrementally.
+  * Generalize C interface for polygon areas to allow vertices to be
+    specified incrementally.
 
-   * Fix way flags for C++11 support are determined.
+  * Fix way flags for C++11 support are determined.
 
 Changes between 1.31 (released 2013-07-01) and 1.30 versions:
 
-   * Changes breaking binary compatibility (source compatibility is
-     maintained):
-     + overloaded versions of DMS::Encode,
-       EllipticFunction::EllipticFunction, and
-       GeoCoords::DMSRepresentation, have been eliminated by the use of
-       optional arguments;
-     + correct the declaration of first arg to UTMUPS::DecodeEPSG.
-
-   * FIX BUG in GeographicLib::GravityCircle constructor (found by
-     Mathieu Peyréga) which caused bogus results for the gravity
-     disturbance and gravity anomaly vectors. (This only affected
-     calculations using GravityCircle. GravityModel calculations did not
-     suffer from this bug.)
-
-   * Improvements to the build:
-     + add macros GEOGRAPHICLIB_VERSION_{MAJOR,MINOR,PATCH} to Config.h;
-     + fix documentation for new version of perlpod;
-     + improving setting of runtime path for Unix-like systems with
-       cmake;
-     + install PDB files when compiling with Visual Studio to aid
-       debugging;
-     + Windows binary release now uses Matlab R2013a (64-bit) and uses
-       the -largeArrayDims option.
-
-   * Changes to the geodesic routines:
-     + add Java implementation of the geodesic routines (thanks to Skip
-       Breidbach for the maven support);
-     + FIX BUG: avoid altering input args in Fortran implementation;
-     + more systematic treatment of very short geodesic;
-     + fixes to python port so that they work with version 3.x, in
-       addition to 2.x (courtesy of Amato);
-     + accumulate the perimeter and area of polygons via a double-wide
-       accumulator in Fortran, C, and Matlab implementations (this is
-       already included in the other implementations);
-     + port PolygonArea::AddEdge and PolygonArea::TestEdge to JavaScript
-       and python interfaces;
-     + include documentation on short geodesics.
-
-   * Unix scripts for downloading datasets,
-     geographiclib-get-{geoids,gravity,magnetic}, skip already download
-     models by default, unless the -f flag is given.
-
-   * FIX BUGS: meridian convergence and scale returned by
-     TransverseMercatorExact was wrong at a pole.
-
-   * Improve efficiency of MGRS::Forward by avoiding the calculation of
-     the latitude if possible (adapting an idea of Craig Rollins).
-
-   * Fixes to the way the Matlab interface routines are built (thanks to
-     Phil Miller and Chris F.).
+  * Changes breaking binary compatibility (source compatibility is
+    maintained):
+    + overloaded versions of DMS::Encode,
+      EllipticFunction::EllipticFunction, and
+      GeoCoords::DMSRepresentation, have been eliminated by the use of
+      optional arguments;
+    + correct the declaration of first arg to UTMUPS::DecodeEPSG.
+
+  * FIX BUG in GeographicLib::GravityCircle constructor (found by
+    Mathieu Peyréga) which caused bogus results for the gravity
+    disturbance and gravity anomaly vectors. (This only affected
+    calculations using GravityCircle. GravityModel calculations did not
+    suffer from this bug.)
+
+  * Improvements to the build:
+    + add macros GEOGRAPHICLIB_VERSION_{MAJOR,MINOR,PATCH} to Config.h;
+    + fix documentation for new version of perlpod;
+    + improving setting of runtime path for Unix-like systems with
+      cmake;
+    + install PDB files when compiling with Visual Studio to aid
+      debugging;
+    + Windows binary release now uses Matlab R2013a (64-bit) and uses
+      the -largeArrayDims option.
+
+  * Changes to the geodesic routines:
+    + add Java implementation of the geodesic routines (thanks to Skip
+      Breidbach for the maven support);
+    + FIX BUG: avoid altering input args in Fortran implementation;
+    + more systematic treatment of very short geodesic;
+    + fixes to python port so that they work with version 3.x, in
+      addition to 2.x (courtesy of Amato);
+    + accumulate the perimeter and area of polygons via a double-wide
+      accumulator in Fortran, C, and Matlab implementations (this is
+      already included in the other implementations);
+    + port PolygonArea::AddEdge and PolygonArea::TestEdge to JavaScript
+      and python interfaces;
+    + include documentation on short geodesics.
+
+  * Unix scripts for downloading datasets,
+    geographiclib-get-{geoids,gravity,magnetic}, skip already download
+    models by default, unless the -f flag is given.
+
+  * FIX BUGS: meridian convergence and scale returned by
+    TransverseMercatorExact was wrong at a pole.
+
+  * Improve efficiency of MGRS::Forward by avoiding the calculation of
+    the latitude if possible (adapting an idea of Craig Rollins).
+
+  * Fixes to the way the Matlab interface routines are built (thanks to
+    Phil Miller and Chris F.).
 
 Changes between 1.30 (released 2013-02-27) and 1.29 versions:
 
-   * Changes to geodesic routines:
-     + fix BUG in fail-safe mechanisms in Geodesic::Inverse;
-     + the command line utility Geod is now called GeodSolve;
-     + allow addition of polygon edges in PolygonArea;
-     + add full Maxima implementation of geodesic algorithms.
+  * Changes to geodesic routines:
+    + fix BUG in fail-safe mechanisms in Geodesic::Inverse;
+    + the command line utility Geod is now called GeodSolve;
+    + allow addition of polygon edges in PolygonArea;
+    + add full Maxima implementation of geodesic algorithms.
 
 Changes between 1.29 (released 2013-01-16) and 1.28 versions:
 
-   * Changes to allow compilation with libc++ (courtesy of Kal Conley).
+  * Changes to allow compilation with libc++ (courtesy of Kal Conley).
 
-   * Add description of geodesics on triaxial ellipsoid to
-     documentation.
+  * Add description of geodesics on triaxial ellipsoid to
+    documentation.
 
-   * Update journal reference for "Algorithms for geodesics".
+  * Update journal reference for "Algorithms for geodesics".
 
 Changes between 1.28 (released 2012-12-11) and 1.27 versions:
 
-   * Changes to geodesic routines:
-     + compute longitude difference exactly;
-     + hence fix BUG in area calculations for polygons with vertices very
-       close to the prime meridian;
-     + fix BUG is geoddistance.m where the value of m12 was wrong for
-       meridional geodesics;
-     + add Matlab implementations of the geodesic projections;
-     + remove unneeded special code for geodesics which start at a pole;
-     + include polygon area routine in C and Fortran implementations;
-     + add doxygen documentation for C and Fortran libraries.
+  * Changes to geodesic routines:
+    + compute longitude difference exactly;
+    + hence fix BUG in area calculations for polygons with vertices very
+      close to the prime meridian;
+    + fix BUG is geoddistance.m where the value of m12 was wrong for
+      meridional geodesics;
+    + add Matlab implementations of the geodesic projections;
+    + remove unneeded special code for geodesics which start at a pole;
+    + include polygon area routine in C and Fortran implementations;
+    + add doxygen documentation for C and Fortran libraries.
 
 Changes between 1.27 (released 2012-11-29) and 1.26 versions:
 
-   * Changes to geodesic routines:
-     + add native Matlab implementations: geoddistance.m, geodreckon.m,
-       geodarea.m;
-     + add C and Fortran implementations;
-     + improve the solution of the direct problem so that the series
-       solution is accurate to round off for |f| < 1/50;
-     + tighten up the convergence criteria for solution of the inverse
-       problem;
-     + no longer signal failures of convergence with NaNs (a slightly
-       less accurate answer is returned instead).
+  * Changes to geodesic routines:
+    + add native Matlab implementations: geoddistance.m, geodreckon.m,
+      geodarea.m;
+    + add C and Fortran implementations;
+    + improve the solution of the direct problem so that the series
+      solution is accurate to round off for |f| < 1/50;
+    + tighten up the convergence criteria for solution of the inverse
+      problem;
+    + no longer signal failures of convergence with NaNs (a slightly
+      less accurate answer is returned instead).
 
-   * Fix DMS::Decode double rounding BUG.
+  * Fix DMS::Decode double rounding BUG.
 
-   * On MacOSX platforms with the cmake configuration, universal
-     binaries are built.
+  * On MacOSX platforms with the cmake configuration, universal
+    binaries are built.
 
 Changes between 1.26 (released 2012-10-22) and 1.25 versions:
 
-   * Replace the series used for geodesic areas by one with better
-     convergence (this only makes an appreciable difference if |f| >
-     1/150).
+  * Replace the series used for geodesic areas by one with better
+    convergence (this only makes an appreciable difference if |f| >
+    1/150).
 
 Changes between 1.25 (released 2012-10-16) and 1.24 versions:
 
-   * Changes to geodesic calculations:
-     + restart Newton's method in Geodesic::Inverse when it goes awry;
-     + back up Newton's method with the bisection method;
-     + Geodesic::Inverse now converges for any value of f;
-     + add GeodesicExact and GeodesicLineExact which are formulated in
-       terms of elliptic integrals and thus yield accurate results
-       even for very eccentric ellipsoids.
-     + the -E option to Geod invokes these exact classes.
-
-   * Add functionality to EllipticFunction:
-     + add all the traditional elliptic integrals;
-     + remove restrictions on argument range for incomplete elliptic
-       integrals;
-     + allow imaginary modulus for elliptic integrals and elliptic
-       functions;
-     + make interface to the symmetric elliptic integrals public.
-
-   * Allow GeographicLib::Ellipsoid to be copied.
-
-   * Changes to the build tools:
-     + cmake uses folders in Visual Studio to reduce clutter;
-     + allow precision of reals to be set in cmake;
-     + fail gracefully in the absence of pod documentation tools;
-     + remove support for maintainer tasks in Makefile.mk.
+  * Changes to geodesic calculations:
+    + restart Newton's method in Geodesic::Inverse when it goes awry;
+    + back up Newton's method with the bisection method;
+    + Geodesic::Inverse now converges for any value of f;
+    + add GeodesicExact and GeodesicLineExact which are formulated in
+      terms of elliptic integrals and thus yield accurate results
+      even for very eccentric ellipsoids.
+    + the -E option to Geod invokes these exact classes.
+
+  * Add functionality to EllipticFunction:
+    + add all the traditional elliptic integrals;
+    + remove restrictions on argument range for incomplete elliptic
+      integrals;
+    + allow imaginary modulus for elliptic integrals and elliptic
+      functions;
+    + make interface to the symmetric elliptic integrals public.
+
+  * Allow GeographicLib::Ellipsoid to be copied.
+
+  * Changes to the build tools:
+    + cmake uses folders in Visual Studio to reduce clutter;
+    + allow precision of reals to be set in cmake;
+    + fail gracefully in the absence of pod documentation tools;
+    + remove support for maintainer tasks in Makefile.mk.
 
 Changes between 1.24 (released 2012-09-22) and 1.23 versions:
 
-   * Allow the specification of the hemisphere in UTM coordinates in
-     order to provide continuity across the equator:
-     + add UTMUPS::Transfer;
-     + add GeoCoords::UTMUPSRepresentation(bool, int) and
-       GeoCoords::AltUTMUPSRepresentation(bool, int);
-     + use the hemisphere letter in, e.g., GeoConvert -u -z 31N.
+  * Allow the specification of the hemisphere in UTM coordinates in
+    order to provide continuity across the equator:
+    + add UTMUPS::Transfer;
+    + add GeoCoords::UTMUPSRepresentation(bool, int) and
+      GeoCoords::AltUTMUPSRepresentation(bool, int);
+    + use the hemisphere letter in, e.g., GeoConvert -u -z 31N.
 
-   * Add UTMUPS::DecodeEPSG and UTMUPS::EncodeEPSG.
+  * Add UTMUPS::DecodeEPSG and UTMUPS::EncodeEPSG.
 
-   * cmake changes:
-     + restore support for cmake 2.4.x;
-     + explicitly check version of doxygen.
+  * cmake changes:
+    + restore support for cmake 2.4.x;
+    + explicitly check version of doxygen.
 
-   * Fix building under cygwin.
+  * Fix building under cygwin.
 
-   * Document restrictions on f in the Introduction.
+  * Document restrictions on f in the Introduction.
 
-   * Fix python interface to work with version 2.6.x.
+  * Fix python interface to work with version 2.6.x.
 
 Changes between 1.23 (released 2012-07-17) and 1.22 versions:
 
@@ -509,16 +623,16 @@ Changes between 1.11 (released 2011-06-27) and 1.10 versions:
 Changes between 1.10 (released 2011-06-11) and 1.9 versions:
 
   * Improvements to Matlab/Octave interface:
-     + add {geocentric,localcartesian}{forward,reverse};
-     + make geographiclibinterface more general;
-     + install the source for the interface;
-     + cmake compiles the interface if ENABLE_MATLAB=ON;
-     + include compiled interface with Windows binary installer.
+    + add {geocentric,localcartesian}{forward,reverse};
+    + make geographiclibinterface more general;
+    + install the source for the interface;
+    + cmake compiles the interface if ENABLE_MATLAB=ON;
+    + include compiled interface with Windows binary installer.
 
   * Fix various configuration issues
-     + autoconf did not install Config.h;
-     + cmake installed in man/man1 instead of share/man/man1;
-     + cmake did not set the rpath on the tools.
+    + autoconf did not install Config.h;
+    + cmake installed in man/man1 instead of share/man/man1;
+    + cmake did not set the rpath on the tools.
 
 Changes between 1.9 (released 2011-05-28) and 1.8 versions:
 
@@ -664,7 +778,7 @@ Changes between 1.4 (released 2010-09-12) and 1.3 versions:
 
   * Add GeographicLib::Geoid::ConvertHeight.
 
-  * Add -msltohae, -haetomsl, and -z options to \ref geoideval.
+  * Add -msltohae, -haetomsl, and -z options to GeoidEval.
 
   * Constructors check that minor radius is positive.
 
diff --git a/aclocal.m4 b/aclocal.m4
index ec1e5de..37b3854 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.12.2 -*- Autoconf -*-
+# generated automatically by aclocal 1.13.4 -*- Autoconf -*-
 
-# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -11,6 +11,7 @@
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 # PARTICULAR PURPOSE.
 
+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],,
@@ -19,24 +20,95 @@ 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'.])])
 
-# Copyright (C) 2002-2012 Free Software Foundation, Inc.
+# ===========================================================================
+#   http://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS])
+#
+# DESCRIPTION
+#
+#   Check whether the given FLAG works with the current language's compiler
+#   or gives an error.  (Warnings, however, are ignored)
+#
+#   ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
+#   success/failure.
+#
+#   If EXTRA-FLAGS is defined, it is added to the current language's default
+#   flags (e.g. CFLAGS) when the check is done.  The check is thus made with
+#   the flags: "CFLAGS EXTRA-FLAGS FLAG".  This can for example be used to
+#   force the compiler to issue an error when a bad flag is given.
+#
+#   NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
+#   macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Guido U. Draheim <guidod at gmx.de>
+#   Copyright (c) 2011 Maarten Bosmans <mkbosmans at gmail.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 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/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 2
+
+AC_DEFUN([AX_CHECK_COMPILE_FLAG],
+[AC_PREREQ(2.59)dnl for _AC_LANG_PREFIX
+AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
+AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [
+  ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
+  _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
+    [AS_VAR_SET(CACHEVAR,[yes])],
+    [AS_VAR_SET(CACHEVAR,[no])])
+  _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
+AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes],
+  [m4_default([$2], :)],
+  [m4_default([$3], :)])
+AS_VAR_POPDEF([CACHEVAR])dnl
+])dnl AX_CHECK_COMPILE_FLAGS
+
+# Copyright (C) 2002-2013 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.
 
-# serial 8
-
 # 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.12'
+[am__api_version='1.13'
 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.12.2], [],
+m4_if([$1], [1.13.4], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -52,21 +124,19 @@ m4_define([_AM_AUTOCONF_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.12.2])dnl
+[AM_AUTOMAKE_VERSION([1.13.4])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-2012 Free Software Foundation, Inc.
+# Copyright (C) 2001-2013 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.
 
-# serial 2
-
 # 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/../..'.
@@ -114,14 +184,12 @@ am_aux_dir=`cd $ac_aux_dir && pwd`
 
 # AM_CONDITIONAL                                            -*- Autoconf -*-
 
-# Copyright (C) 1997-2012 Free Software Foundation, Inc.
+# Copyright (C) 1997-2013 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.
 
-# serial 10
-
 # AM_CONDITIONAL(NAME, SHELL-CONDITION)
 # -------------------------------------
 # Define a conditional.
@@ -147,13 +215,12 @@ AC_CONFIG_COMMANDS_PRE(
 Usually this means the macro was only invoked conditionally.]])
 fi])])
 
-# Copyright (C) 1999-2012 Free Software Foundation, Inc.
+# Copyright (C) 1999-2013 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.
 
-# serial 17
 
 # 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,
@@ -339,19 +406,18 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl
 
 # Generate code to set up dependency tracking.              -*- Autoconf -*-
 
-# Copyright (C) 1999-2012 Free Software Foundation, Inc.
+# Copyright (C) 1999-2013 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.
 
-# serial 6
 
 # _AM_OUTPUT_DEPENDENCY_COMMANDS
 # ------------------------------
 AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
 [{
-  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # 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
@@ -380,7 +446,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
     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
+    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
@@ -416,14 +482,12 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
 
 # Do all the work for Automake.                             -*- Autoconf -*-
 
-# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+# Copyright (C) 1996-2013 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.
 
-# serial 19
-
 # 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.
 
@@ -439,7 +503,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
 # 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.62])dnl
+[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
@@ -469,8 +533,7 @@ AC_SUBST([CYGPATH_W])
 dnl Distinguish between old-style and new-style calls.
 m4_ifval([$2],
 [AC_DIAGNOSE([obsolete],
-[$0: two- and three-arguments forms are deprecated.  For more info, see:
-http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_INIT_AUTOMAKE-invocation])
+             [$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])],
@@ -524,18 +587,15 @@ AC_PROVIDE_IFELSE([AC_PROG_OBJC],
 		  [_AM_DEPENDENCIES([OBJC])],
 		  [m4_define([AC_PROG_OBJC],
 			     m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
-dnl Support for Objective C++ was only introduced in Autoconf 2.65,
-dnl but we still cater to Autoconf 2.62.
-m4_ifdef([AC_PROG_OBJCXX],
-[AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
 		  [_AM_DEPENDENCIES([OBJCXX])],
 		  [m4_define([AC_PROG_OBJCXX],
-			     m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])])dnl
+			     m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
 ])
-_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
-dnl The 'parallel-tests' driver may need to know about EXEEXT, so add the
-dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
-dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+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
@@ -569,14 +629,12 @@ for _am_header in $config_headers :; do
 done
 echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
 
-# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+# Copyright (C) 2001-2013 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.
 
-# serial 8
-
 # AM_PROG_INSTALL_SH
 # ------------------
 # Define $install_sh.
@@ -592,14 +650,12 @@ if test x"${install_sh}" != xset; then
 fi
 AC_SUBST([install_sh])])
 
-# Copyright (C) 2003-2012 Free Software Foundation, Inc.
+# Copyright (C) 2003-2013 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.
 
-# serial 2
-
 # Check whether the underlying file-system supports filenames
 # with a leading dot.  For instance MS-DOS doesn't.
 AC_DEFUN([AM_SET_LEADING_DOT],
@@ -616,14 +672,12 @@ AC_SUBST([am__leading_dot])])
 # Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
 # From Jim Meyering
 
-# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+# Copyright (C) 1996-2013 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.
 
-# serial 7
-
 # AM_MAINTAINER_MODE([DEFAULT-MODE])
 # ----------------------------------
 # Control maintainer-specific portions of Makefiles.
@@ -651,18 +705,14 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
 ]
 )
 
-AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
-
 # Check to see how 'make' treats includes.	            -*- Autoconf -*-
 
-# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+# Copyright (C) 2001-2013 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.
 
-# serial 5
-
 # AM_MAKE_INCLUDE()
 # -----------------
 # Check to see how make treats includes.
@@ -707,14 +757,12 @@ rm -f confinc confmf
 
 # Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
 
-# Copyright (C) 1997-2012 Free Software Foundation, Inc.
+# Copyright (C) 1997-2013 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.
 
-# serial 7
-
 # AM_MISSING_PROG(NAME, PROGRAM)
 # ------------------------------
 AC_DEFUN([AM_MISSING_PROG],
@@ -722,11 +770,10 @@ AC_DEFUN([AM_MISSING_PROG],
 $1=${$1-"${am_missing_run}$2"}
 AC_SUBST($1)])
 
-
 # AM_MISSING_HAS_RUN
 # ------------------
-# Define MISSING if not defined so far and test if it supports --run.
-# If it does, set am_missing_run to use it, otherwise, to nothing.
+# 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
@@ -739,8 +786,8 @@ if test x"${MISSING+set}" != xset; then
   esac
 fi
 # Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
+if eval "$MISSING --is-lightweight"; then
+  am_missing_run="$MISSING "
 else
   am_missing_run=
   AC_MSG_WARN(['missing' script is too old or missing])
@@ -749,14 +796,12 @@ fi
 
 # Helper functions for option handling.                     -*- Autoconf -*-
 
-# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+# Copyright (C) 2001-2013 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.
 
-# serial 6
-
 # _AM_MANGLE_OPTION(NAME)
 # -----------------------
 AC_DEFUN([_AM_MANGLE_OPTION],
@@ -782,14 +827,12 @@ AC_DEFUN([_AM_IF_OPTION],
 
 # Check to make sure that the build environment is sane.    -*- Autoconf -*-
 
-# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+# Copyright (C) 1996-2013 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.
 
-# serial 9
-
 # AM_SANITY_CHECK
 # ---------------
 AC_DEFUN([AM_SANITY_CHECK],
@@ -865,13 +908,71 @@ AC_CONFIG_COMMANDS_PRE(
 rm -f conftest.file
 ])
 
-# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+# Copyright (C) 2009-2013 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.
 
-# serial 2
+# 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
+])
+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
+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
+])
+
+# Copyright (C) 2001-2013 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
 # ---------------------
@@ -895,14 +996,12 @@ fi
 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 AC_SUBST([INSTALL_STRIP_PROGRAM])])
 
-# Copyright (C) 2006-2012 Free Software Foundation, Inc.
+# Copyright (C) 2006-2013 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.
 
-# serial 3
-
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
 # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
@@ -916,14 +1015,12 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
 # Check how to create a tarball.                            -*- Autoconf -*-
 
-# Copyright (C) 2004-2012 Free Software Foundation, Inc.
+# Copyright (C) 2004-2013 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.
 
-# serial 3
-
 # _AM_PROG_TAR(FORMAT)
 # --------------------
 # Check how to create a tarball in format FORMAT.
@@ -937,76 +1034,114 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 # 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}'])
-m4_if([$1], [v7],
-     [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
-     [m4_case([$1], [ustar],, [pax],,
-              [m4_fatal([Unknown tar format])])
-AC_MSG_CHECKING([how to create a $1 tar archive])
-# Loop over all known methods to create a tar archive until one works.
+
+# 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'
-_am_tools=${am_cv_prog_tar_$1-$_am_tools}
-# Do not fold the above two line into one, because Tru64 sh and
-# Solaris sh will not grok spaces in the rhs of '-'.
-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
+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
 
-  # 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])
+    # 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
-  if test -s conftest.tar; then
-    AM_RUN_LOG([$am__untar <conftest.tar])
-    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_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
diff --git a/cmake/Makefile.in b/cmake/Makefile.in
index a781b65..5622bae 100644
--- a/cmake/Makefile.in
+++ b/cmake/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.12.2 from Makefile.am.
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -19,23 +19,51 @@
 #
 # Copyright (C) 2011, Charles Karney <charles at karney.com>
 VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
+        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; \
-    test $$am__dry = yes; \
-  }
+  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@
@@ -56,7 +84,7 @@ build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
 subdir = cmake
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
 	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
@@ -68,6 +96,18 @@ mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/include/GeographicLib/Config-ac.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 = \
@@ -75,9 +115,11 @@ am__can_run_installinfo = \
     n|no|NO) false;; \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -146,7 +188,6 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POD2HTML = @POD2HTML@
 POD2MAN = @POD2MAN@
-POW_LIB = @POW_LIB@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
@@ -253,11 +294,9 @@ mostlyclean-libtool:
 
 clean-libtool:
 	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
+tags TAGS:
 
-ctags: CTAGS
-CTAGS:
+ctags CTAGS:
 
 cscope cscopelist:
 
@@ -394,15 +433,16 @@ uninstall-am:
 .MAKE: install-am install-strip
 
 .PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	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 uninstall uninstall-am
+	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 uninstall uninstall-am
 
 
 install:
diff --git a/cmake/project-config-version.cmake.in b/cmake/project-config-version.cmake.in
index 2b20f0b..7cd9628 100644
--- a/cmake/project-config-version.cmake.in
+++ b/cmake/project-config-version.cmake.in
@@ -42,7 +42,7 @@ set (@PROJECT_NAME at _STATIC_FOUND @GEOGRAPHICLIB_STATIC_LIB@)
 set (@PROJECT_NAME at _NETGeographicLib_FOUND @BUILD_NETGEOGRAPHICLIB@)
 
 # Check for the components requested.  The convention is that
-# GeographicLib_${comp}_FOUND should be true for all the required
+# @PROJECT_NAME at _${comp}_FOUND should be true for all the required
 # components.
 if (@PROJECT_NAME at _FIND_COMPONENTS)
   foreach (comp ${@PROJECT_NAME at _FIND_COMPONENTS})
diff --git a/cmake/project-config.cmake.in b/cmake/project-config.cmake.in
index 9bd50c2..d0e39f3 100644
--- a/cmake/project-config.cmake.in
+++ b/cmake/project-config.cmake.in
@@ -9,7 +9,7 @@
 #  @PROJECT_NAME at _STATIC_DEFINITIONS = GEOGRAPHICLIB_SHARED_LIB=0
 #  @PROJECT_NAME at _LIBRARY_DIRS = /usr/local/lib
 #  @PROJECT_NAME at _BINARY_DIRS = /usr/local/bin
-#  @PROJECT_NAME at _VERSION = 1.9 (for example)
+#  @PROJECT_NAME at _VERSION = 1.34 (for example)
 #  Depending on @PROJECT_NAME at _USE_STATIC_LIBS
 #    @PROJECT_NAME at _LIBRARIES = ${@PROJECT_NAME at _SHARED_LIBRARIES}, if OFF
 #    @PROJECT_NAME at _LIBRARIES = ${@PROJECT_NAME at _STATIC_LIBRARIES}, if ON
@@ -19,7 +19,7 @@
 #    @PROJECT_NAME at _USE_STATIC_LIBS is ignored.
 
 message (STATUS "Reading ${CMAKE_CURRENT_LIST_FILE}")
-set (@PROJECT_NAME at _VERSION "@PROJECT_VERSION@")
+# @PROJECT_NAME at _VERSION is set by version file
 message (STATUS
   "@PROJECT_NAME@ configuration, version ${@PROJECT_NAME at _VERSION}")
 
@@ -48,6 +48,9 @@ set (@PROJECT_NAME at _STATIC_DEFINITIONS @PROJECT_STATIC_DEFINITIONS@)
 # Read in the exported definition of the library
 include ("${_DIR}/@PROJECT_NAME_LOWER at -depends.cmake")
 
+unset (_ROOT)
+unset (_DIR)
+
 if ((NOT @PROJECT_NAME at _SHARED_LIBRARIES) OR
     (@PROJECT_NAME at _USE_STATIC_LIBS AND @PROJECT_NAME at _STATIC_LIBRARIES))
   set (@PROJECT_NAME at _LIBRARIES ${@PROJECT_NAME at _STATIC_LIBRARIES})
diff --git a/config.guess b/config.guess
index c0adba9..1804e9f 100755
--- a/config.guess
+++ b/config.guess
@@ -2,13 +2,13 @@
 # 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, 2012 Free Software Foundation, Inc.
+#   2011, 2012, 2013 Free Software Foundation, Inc.
 
-timestamp='2012-06-10'
+timestamp='2012-12-29'
 
 # 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
@@ -22,19 +22,17 @@ timestamp='2012-06-10'
 # 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. 
 #
 # 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
+#
+# Please send patches with a ChangeLog entry to config-patches at gnu.org.
+
 
 me=`echo "$0" | sed -e 's,.*/,,'`
 
@@ -55,8 +53,8 @@ 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, 2012
-Free Software Foundation, Inc.
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
+2012, 2013 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."
@@ -200,6 +198,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
 	echo "${machine}-${os}${release}"
 	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}
@@ -302,7 +304,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:*:*)
@@ -801,6 +803,9 @@ EOF
     i*:CYGWIN*:*)
 	echo ${UNAME_MACHINE}-pc-cygwin
 	exit ;;
+    *:MINGW64*:*)
+	echo ${UNAME_MACHINE}-pc-mingw64
+	exit ;;
     *:MINGW*:*)
 	echo ${UNAME_MACHINE}-pc-mingw32
 	exit ;;
@@ -1201,6 +1206,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 ;;
@@ -1330,9 +1338,6 @@ EOF
 	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_
diff --git a/config.sub b/config.sub
index 6205f84..52f04bc 100755
--- a/config.sub
+++ b/config.sub
@@ -2,23 +2,19 @@
 # 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, 2012 Free Software Foundation, Inc.
+#   2011, 2012, 2013 Free Software Foundation, Inc.
 
-timestamp='2012-04-18'
+timestamp='2012-12-29'
 
-# 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, see <http://www.gnu.org/licenses/>.
@@ -26,11 +22,12 @@ timestamp='2012-04-18'
 # 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 with a ChangeLog entry to config-patches at gnu.org.
 #
 # Configuration subroutine to validate and canonicalize a configuration type.
 # Supply the specified configuration type as an argument.
@@ -74,8 +71,8 @@ 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, 2012
-Free Software Foundation, Inc.
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
+2012, 2013 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."
@@ -123,7 +120,7 @@ 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* | \
+  linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
   knetbsd*-gnu* | netbsd*-gnu* | \
   kopensolaris*-gnu* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
@@ -156,7 +153,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
 		;;
@@ -259,8 +256,10 @@ case $basic_machine in
 	| 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 \
+	| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
+	| avr | avr32 \
+	| be32 | be64 \
 	| bfin \
 	| c4x | clipper \
 	| d10v | d30v | dlx | dsp16xx \
@@ -273,7 +272,7 @@ case $basic_machine in
 	| 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 \
@@ -389,7 +388,8 @@ case $basic_machine in
 	| 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-* \
@@ -788,9 +788,13 @@ 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
 		os=-mingw32
@@ -1004,7 +1008,7 @@ case $basic_machine in
 		;;
 	ppc64)	basic_machine=powerpc64-unknown
 		;;
-	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+	ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
 	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
 		basic_machine=powerpc64le-unknown
@@ -1019,7 +1023,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
 		;;
@@ -1352,15 +1360,15 @@ case $os in
 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
 	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
 	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-	      | -openbsd* | -solidbsd* \
+	      | -bitrig* | -openbsd* | -solidbsd* \
 	      | -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* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -mingw32* | -linux-gnu* | -linux-android* \
-	      | -linux-newlib* | -linux-uclibc* \
+	      | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+	      | -linux-newlib* | -linux-musl* | -linux-uclibc* \
 	      | -uxpv* | -beos* | -mpeix* | -udk* \
 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
diff --git a/configure b/configure
index a9a7082..890110b 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for GeographicLib 1.35.
+# Generated by GNU Autoconf 2.69 for GeographicLib 1.37.
 #
 # Report bugs to <charles at karney.com>.
 #
@@ -590,8 +590,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='GeographicLib'
 PACKAGE_TARNAME='geographiclib'
-PACKAGE_VERSION='1.35'
-PACKAGE_STRING='GeographicLib 1.35'
+PACKAGE_VERSION='1.37'
+PACKAGE_STRING='GeographicLib 1.37'
 PACKAGE_BUGREPORT='charles at karney.com'
 PACKAGE_URL=''
 
@@ -635,6 +635,7 @@ ac_includes_default="\
 ac_subst_vars='am__EXEEXT_FALSE
 am__EXEEXT_TRUE
 LTLIBOBJS
+LIBOBJS
 HAVE_PODPROGS_FALSE
 HAVE_PODPROGS_TRUE
 COL
@@ -643,8 +644,6 @@ POD2MAN
 HAVE_DOXYGEN_FALSE
 HAVE_DOXYGEN_TRUE
 DOXYGEN
-LIBOBJS
-POW_LIB
 CXXCPP
 OTOOL64
 OTOOL
@@ -700,6 +699,10 @@ MAINTAINER_MODE_TRUE
 GEOGRAPHICLIB_VERSION_PATCH
 GEOGRAPHICLIB_VERSION_MINOR
 GEOGRAPHICLIB_VERSION_MAJOR
+AM_BACKSLASH
+AM_DEFAULT_VERBOSITY
+AM_DEFAULT_V
+AM_V
 am__untar
 am__tar
 AMTAR
@@ -776,6 +779,7 @@ SHELL'
 ac_subst_files=''
 ac_user_opts='
 enable_option_checking
+enable_silent_rules
 enable_maintainer_mode
 enable_dependency_tracking
 enable_shared
@@ -1339,7 +1343,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 GeographicLib 1.35 to adapt to many kinds of systems.
+\`configure' configures GeographicLib 1.37 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1410,7 +1414,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of GeographicLib 1.35:";;
+     short | recursive ) echo "Configuration of GeographicLib 1.37:";;
    esac
   cat <<\_ACEOF
 
@@ -1418,6 +1422,8 @@ 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")
   --enable-maintainer-mode
                           enable make rules and dependencies not useful (and
                           sometimes confusing) to the casual installer
@@ -1519,7 +1525,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-GeographicLib configure 1.35
+GeographicLib configure 1.37
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1915,155 +1921,52 @@ fi
 
 } # ac_fn_cxx_try_link
 
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_c_check_header_mongrel ()
+# ac_fn_cxx_try_run LINENO
+# ------------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_cxx_try_run ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if eval \${$3+:} false; then :
-  { $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
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_header_compiler=yes
-else
-  ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  ac_header_preproc=yes
-else
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
-  yes:no: )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-    ;;
-  no:yes:* )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-( $as_echo "## --------------------------------- ##
-## Report this to charles at karney.com ##
-## --------------------------------- ##"
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
 esac
-  { $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=\$ac_header_compiler"
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_mongrel
-
-# 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
+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; } && { ac_try='./conftest$ac_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 :
+  ac_retval=0
 else
-  eval "$3=no"
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-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
-int
-main ()
-{
-if (sizeof (($2)))
-	    return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+       $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
-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
+       ac_retval=$ac_status
 fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+  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_c_check_type
+} # ac_fn_cxx_try_run
 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 GeographicLib $as_me 1.35, which was
+It was created by GeographicLib $as_me 1.37, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2554,7 +2457,7 @@ test -n "$target_alias" &&
 
 
 
-am__api_version='1.12'
+am__api_version='1.13'
 
 # Find a good install program.  We prefer a C program (faster),
 # so one script is as good as another.  But avoid the broken or
@@ -2738,8 +2641,8 @@ if test x"${MISSING+set}" != xset; then
   esac
 fi
 # Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
+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
@@ -2979,6 +2882,45 @@ else
 fi
 rmdir .tst 2>/dev/null
 
+# 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=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 "`cd $srcdir && pwd`" != "`pwd`"; then
   # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
   # is not polluted with repeated "-I."
@@ -3001,7 +2943,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='geographiclib'
- VERSION='1.35'
+ VERSION='1.37'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3041,6 +2983,10 @@ mkdir_p='$(MKDIR_P)'
 # 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 -'
 
 
@@ -3048,8 +2994,9 @@ am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
 
 
 
+
 GEOGRAPHICLIB_VERSION_MAJOR=1
-GEOGRAPHICLIB_VERSION_MINOR=35
+GEOGRAPHICLIB_VERSION_MINOR=37
 GEOGRAPHICLIB_VERSION_PATCH=0
 
 cat >>confdefs.h <<_ACEOF
@@ -3097,9 +3044,9 @@ fi
 ac_config_headers="$ac_config_headers include/GeographicLib/Config-ac.h"
 
 
-LT_CURRENT=11
-LT_REVISION=2
-LT_AGE=1
+LT_CURRENT=13
+LT_REVISION=0
+LT_AGE=0
 
 
 
@@ -6978,7 +6925,7 @@ ia64-*-hpux*)
   rm -rf conftest*
   ;;
 
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
 s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
   # Find out which ABI we are using.
   echo 'int i;' > conftest.$ac_ext
@@ -6996,7 +6943,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
 	  x86_64-*linux*)
 	    LD="${LD-ld} -m elf_i386"
 	    ;;
-	  ppc64-*linux*|powerpc64-*linux*)
+	  powerpc64le-*linux*)
+	    LD="${LD-ld} -m elf32lppclinux"
+	    ;;
+	  powerpc64-*linux*)
 	    LD="${LD-ld} -m elf32ppclinux"
 	    ;;
 	  s390x-*linux*)
@@ -7015,7 +6965,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
 	  x86_64-*linux*)
 	    LD="${LD-ld} -m elf_x86_64"
 	    ;;
-	  ppc*-*linux*|powerpc*-*linux*)
+	  powerpcle-*linux*)
+	    LD="${LD-ld} -m elf64lppc"
+	    ;;
+	  powerpc-*linux*)
 	    LD="${LD-ld} -m elf64ppc"
 	    ;;
 	  s390*-*linux*|s390*-*tpf*)
@@ -15220,157 +15173,14 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 # Only expand once:
 
 
+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
 
-# Checks for header files.
-for ac_header in float.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "float.h" "ac_cv_header_float_h" "$ac_includes_default"
-if test "x$ac_cv_header_float_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_FLOAT_H 1
-_ACEOF
-
-fi
-
-done
-
-
-# Checks for typedefs, structures, and compiler characteristics.
-{ $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;
-
-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
 
+# Checks for long double
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long double" >&5
 $as_echo_n "checking for long double... " >&6; }
@@ -15397,7 +15207,7 @@ return test_array [0];
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_cxx_try_compile "$LINENO"; then :
   ac_cv_type_long_double=yes
 else
   ac_cv_type_long_double=no
@@ -15414,300 +15224,6 @@ $as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h
   fi
 
 
-# Checks for library functions.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strtod" >&5
-$as_echo_n "checking for working strtod... " >&6; }
-if ${ac_cv_func_strtod+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  ac_cv_func_strtod=no
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-$ac_includes_default
-#ifndef strtod
-double strtod ();
-#endif
-int
-main()
-{
-  {
-    /* Some versions of Linux strtod mis-parse strings with leading '+'.  */
-    char *string = " +69";
-    char *term;
-    double value;
-    value = strtod (string, &term);
-    if (value != 69 || term != (string + 4))
-      return 1;
-  }
-
-  {
-    /* Under Solaris 2.4, strtod returns the wrong value for the
-       terminating character under some conditions.  */
-    char *string = "NaN";
-    char *term;
-    strtod (string, &term);
-    if (term != string && *(term - 1) == 0)
-      return 1;
-  }
-  return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  ac_cv_func_strtod=yes
-else
-  ac_cv_func_strtod=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strtod" >&5
-$as_echo "$ac_cv_func_strtod" >&6; }
-if test $ac_cv_func_strtod = no; then
-  case " $LIBOBJS " in
-  *" strtod.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS strtod.$ac_objext"
- ;;
-esac
-
-ac_fn_c_check_func "$LINENO" "pow" "ac_cv_func_pow"
-if test "x$ac_cv_func_pow" = xyes; then :
-
-fi
-
-if test $ac_cv_func_pow = no; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pow in -lm" >&5
-$as_echo_n "checking for pow in -lm... " >&6; }
-if ${ac_cv_lib_m_pow+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lm  $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 pow ();
-int
-main ()
-{
-return pow ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_m_pow=yes
-else
-  ac_cv_lib_m_pow=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_m_pow" >&5
-$as_echo "$ac_cv_lib_m_pow" >&6; }
-if test "x$ac_cv_lib_m_pow" = xyes; then :
-  POW_LIB=-lm
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot find library containing definition of pow" >&5
-$as_echo "$as_me: WARNING: cannot find library containing definition of pow" >&2;}
-fi
-
-fi
-
-fi
-
-for ac_func in strtol
-do :
-  ac_fn_c_check_func "$LINENO" "strtol" "ac_cv_func_strtol"
-if test "x$ac_cv_func_strtol" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_STRTOL 1
-_ACEOF
-
-fi
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing floor" >&5
-$as_echo_n "checking for library containing floor... " >&6; }
-if ${ac_cv_search_floor+:} 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 floor ();
-int
-main ()
-{
-return floor ();
-  ;
-  return 0;
-}
-_ACEOF
-for ac_lib in '' m; 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_floor=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_floor+:} false; then :
-  break
-fi
-done
-if ${ac_cv_search_floor+:} false; then :
-
-else
-  ac_cv_search_floor=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_floor" >&5
-$as_echo "$ac_cv_search_floor" >&6; }
-ac_res=$ac_cv_search_floor
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pow" >&5
-$as_echo_n "checking for library containing pow... " >&6; }
-if ${ac_cv_search_pow+:} 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 pow ();
-int
-main ()
-{
-return pow ();
-  ;
-  return 0;
-}
-_ACEOF
-for ac_lib in '' m; 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_pow=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_pow+:} false; then :
-  break
-fi
-done
-if ${ac_cv_search_pow+:} false; then :
-
-else
-  ac_cv_search_pow=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_pow" >&5
-$as_echo "$ac_cv_search_pow" >&6; }
-ac_res=$ac_cv_search_pow
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing sqrt" >&5
-$as_echo_n "checking for library containing sqrt... " >&6; }
-if ${ac_cv_search_sqrt+:} 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 sqrt ();
-int
-main ()
-{
-return sqrt ();
-  ;
-  return 0;
-}
-_ACEOF
-for ac_lib in '' m; 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_sqrt=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_sqrt+:} false; then :
-  break
-fi
-done
-if ${ac_cv_search_sqrt+:} false; then :
-
-else
-  ac_cv_search_sqrt=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sqrt" >&5
-$as_echo "$ac_cv_search_sqrt" >&6; }
-ac_res=$ac_cv_search_sqrt
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-fi
-
-
 # Check endianness
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
 $as_echo_n "checking whether byte ordering is bigendian... " >&6; }
@@ -15724,7 +15240,7 @@ else
 	     typedef int dummy;
 
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_cxx_try_compile "$LINENO"; then :
 
 	# Check for potential -arch flags.  It is not universal unless
 	# there are at least two -arch flags with different values.
@@ -15769,7 +15285,7 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_cxx_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.  */
@@ -15787,7 +15303,7 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_cxx_try_compile "$LINENO"; then :
   ac_cv_c_bigendian=yes
 else
   ac_cv_c_bigendian=no
@@ -15813,7 +15329,7 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_cxx_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.  */
@@ -15830,7 +15346,7 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_cxx_try_compile "$LINENO"; then :
   ac_cv_c_bigendian=yes
 else
   ac_cv_c_bigendian=no
@@ -15869,7 +15385,7 @@ return use_ascii (foo) == use_ebcdic (foo);
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_cxx_try_compile "$LINENO"; then :
   if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
 	      ac_cv_c_bigendian=yes
 	    fi
@@ -15904,7 +15420,7 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_cxx_try_run "$LINENO"; then :
   ac_cv_c_bigendian=no
 else
   ac_cv_c_bigendian=yes
@@ -15934,8 +15450,64 @@ $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
  esac
 
 
+# Check flag for C++11
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler accepts -std=c++0x" >&5
+$as_echo_n "checking whether C++ compiler accepts -std=c++0x... " >&6; }
+if ${ax_cv_check_cxxflags___std_cpp0x+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  ax_check_save_flags=$CXXFLAGS
+  CXXFLAGS="$CXXFLAGS  -std=c++0x"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ax_cv_check_cxxflags___std_cpp0x=yes
+else
+  ax_cv_check_cxxflags___std_cpp0x=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CXXFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cxxflags___std_cpp0x" >&5
+$as_echo "$ax_cv_check_cxxflags___std_cpp0x" >&6; }
+if test x"$ax_cv_check_cxxflags___std_cpp0x" = xyes; then :
+  CXXFLAGS="$CXXFLAGS -std=c++0x"
+else
+  :
+fi
+
+# Check for C++11 math functions
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <cmath>
+int
+main ()
+{
+return int(std::hypot(3.0, 4.0) + std::expm1(0.5) +
+                    std::log1p(2.0) + std::asinh(10.0) + std::atanh(0.8) +
+                    std::cbrt(8.0)) + std::isfinite(4.0) + std::isnan(0.0);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  CXXFLAGS="$CXXFLAGS -DGEOGRAPHICLIB_CXX11_MATH=1"
+else
+  CXXFLAGS="$CXXFLAGS -DGEOGRAPHICLIB_CXX11_MATH=0"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
 # Check for doxygen.
-# Need version 1.8.1.2 or later for greek and math symbols.
 for ac_prog in doxygen
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
@@ -15978,8 +15550,7 @@ fi
   test -n "$DOXYGEN" && break
 done
 
- if test "$DOXYGEN" && test `"$DOXYGEN" --version |
-	sed 's/^\([0-9]\)\.\([0-9]\)\./\1.0\2./'` '>' 1.08.1.1; then
+ if test "$DOXYGEN"; then
   HAVE_DOXYGEN_TRUE=
   HAVE_DOXYGEN_FALSE='#'
 else
@@ -16672,7 +16243,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by GeographicLib $as_me 1.35, which was
+This file was extended by GeographicLib $as_me 1.37, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -16738,7 +16309,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-GeographicLib config.status 1.35
+GeographicLib config.status 1.37
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
@@ -17851,7 +17422,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
 
   case $ac_file$ac_mode in
     "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
-  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # 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
@@ -17902,7 +17473,7 @@ $as_echo X"$mf" |
     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
+    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
diff --git a/configure.ac b/configure.ac
index c0b539c..379b593 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,7 +1,7 @@
 dnl
 dnl Copyright (C) 2009, Francesco P. Lovergine <frankie at debian.org>
 
-AC_INIT([GeographicLib],[1.35],[charles at karney.com])
+AC_INIT([GeographicLib],[1.37],[charles at karney.com])
 AC_CANONICAL_SYSTEM
 AC_PREREQ(2.61)
 AC_CONFIG_SRCDIR(src/Geodesic.cpp)
@@ -9,7 +9,7 @@ AC_CONFIG_MACRO_DIR(m4)
 AM_INIT_AUTOMAKE
 
 GEOGRAPHICLIB_VERSION_MAJOR=1
-GEOGRAPHICLIB_VERSION_MINOR=35
+GEOGRAPHICLIB_VERSION_MINOR=37
 GEOGRAPHICLIB_VERSION_PATCH=0
 AC_DEFINE_UNQUOTED([GEOGRAPHICLIB_VERSION_MAJOR],
 	[$GEOGRAPHICLIB_VERSION_MAJOR],[major version number])
@@ -34,9 +34,9 @@ dnl Library code modified:              REVISION++
 dnl Interfaces changed/added/removed:   CURRENT++ REVISION=0
 dnl Interfaces added:                   AGE++
 dnl Interfaces removed:                 AGE=0
-LT_CURRENT=11
-LT_REVISION=2
-LT_AGE=1
+LT_CURRENT=13
+LT_REVISION=0
+LT_AGE=0
 AC_SUBST(LT_CURRENT)
 AC_SUBST(LT_REVISION)
 AC_SUBST(LT_AGE)
@@ -47,31 +47,27 @@ AC_PROG_MAKE_SET
 AC_PROG_INSTALL
 AC_PROG_CXX
 AC_PROG_LIBTOOL
+AC_LANG_CPLUSPLUS
 
-# Checks for header files.
-AC_CHECK_HEADERS([float.h])
-
-# Checks for typedefs, structures, and compiler characteristics.
-AC_HEADER_STDBOOL
-AC_C_INLINE
+# Checks for long double
 AC_TYPE_LONG_DOUBLE
 
-# Checks for library functions.
-AC_FUNC_STRTOD
-AC_CHECK_FUNCS([strtol])
-AC_SEARCH_LIBS([floor],[m])
-AC_SEARCH_LIBS([pow],[m])
-AC_SEARCH_LIBS([sqrt],[m])
-
 # Check endianness
 AC_C_BIGENDIAN
 
+# Check flag for C++11
+AX_CHECK_COMPILE_FLAG([-std=c++0x], [CXXFLAGS="$CXXFLAGS -std=c++0x"])
+# Check for C++11 math functions
+AC_TRY_COMPILE([#include <cmath>],
+	[return int(std::hypot(3.0, 4.0) + std::expm1(0.5) +
+                    std::log1p(2.0) + std::asinh(10.0) + std::atanh(0.8) +
+                    std::cbrt(8.0)) + std::isfinite(4.0) + std::isnan(0.0);],
+	[CXXFLAGS="$CXXFLAGS -DGEOGRAPHICLIB_CXX11_MATH=1"],
+	[CXXFLAGS="$CXXFLAGS -DGEOGRAPHICLIB_CXX11_MATH=0"])
+
 # Check for doxygen.
-# Need version 1.8.1.2 or later for greek and math symbols.
 AC_CHECK_PROGS([DOXYGEN], [doxygen])
-AM_CONDITIONAL([HAVE_DOXYGEN],
-	[test "$DOXYGEN" && test `"$DOXYGEN" --version |
-	sed 's/^\([[0-9]]\)\.\([[0-9]]\)\./\1.0\2./'` '>' 1.08.1.1])
+AM_CONDITIONAL([HAVE_DOXYGEN], [test "$DOXYGEN"])
 
 AC_CHECK_PROGS([POD2MAN], [pod2man])
 AC_CHECK_PROGS([POD2HTML], [pod2html])
diff --git a/depcomp b/depcomp
index debb6ff..4ebd5b3 100755
--- a/depcomp
+++ b/depcomp
@@ -1,9 +1,9 @@
 #! /bin/sh
 # depcomp - compile a program generating dependencies as side-effects
 
-scriptversion=2012-03-27.16; # UTC
+scriptversion=2013-05-30.07; # UTC
 
-# Copyright (C) 1999-2012 Free Software Foundation, Inc.
+# Copyright (C) 1999-2013 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
@@ -27,9 +27,9 @@ scriptversion=2012-03-27.16; # UTC
 
 case $1 in
   '')
-     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
-     exit 1;
-     ;;
+    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
+    exit 1;
+    ;;
   -h | --h*)
     cat <<\EOF
 Usage: depcomp [--help] [--version] PROGRAM [ARGS]
@@ -56,11 +56,65 @@ EOF
     ;;
 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
@@ -74,6 +128,9 @@ 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
@@ -85,32 +142,32 @@ if test "$depmode" = hp; then
 fi
 
 if test "$depmode" = dashXmstdout; then
-   # This is just like dashmstdout with a different argument.
-   dashmflag=-xM
-   depmode=dashmstdout
+  # 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
+  # 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
+  # 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 informations.
-   gccflag=-qmakedep=gcc,-MF
-   depmode=gcc
+  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
+  gccflag=-qmakedep=gcc,-MF
+  depmode=gcc
 fi
 
 case "$depmode" in
@@ -133,8 +190,7 @@ gcc3)
   done
   "$@"
   stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
@@ -142,13 +198,17 @@ gcc3)
   ;;
 
 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).
+##   -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
@@ -156,15 +216,14 @@ gcc)
   fi
   "$@" -Wp,"$gccflag$tmpdepfile"
   stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
   rm -f "$depfile"
   echo "$object : \\" > "$depfile"
-  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
-## The second -e expression handles DOS-style file names with drive letters.
+  # 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.
@@ -173,15 +232,15 @@ gcc)
 ## 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.
-  tr ' ' "$nl" < "$tmpdepfile" |
 ## 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.
-    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
-      | sed -e 's/$/ :/' >> "$depfile"
+  tr ' ' "$nl" < "$tmpdepfile" \
+    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+    | sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
@@ -199,8 +258,7 @@ sgi)
     "$@" -MDupdate "$tmpdepfile"
   fi
   stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
@@ -208,7 +266,6 @@ sgi)
 
   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
@@ -216,19 +273,15 @@ sgi)
     # 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"
+      | 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"
+      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+      >> "$depfile"
   else
-    # The sourcefile does not contain any dependencies, so just
-    # store a dummy comment line, to avoid errors with the Makefile
-    # "include basename.Plo" scheme.
-    echo "#dummy" > "$depfile"
+    make_dummy_depfile
   fi
   rm -f "$tmpdepfile"
   ;;
@@ -246,9 +299,8 @@ aix)
   # 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.
-  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
-  test "x$dir" = "x$object" && dir=
-  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  set_dir_from "$object"
+  set_base_from "$object"
   if test "$libtool" = yes; then
     tmpdepfile1=$dir$base.u
     tmpdepfile2=$base.u
@@ -261,9 +313,7 @@ aix)
     "$@" -M
   fi
   stat=$?
-
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
     exit $stat
   fi
@@ -272,65 +322,113 @@ aix)
   do
     test -f "$tmpdepfile" && break
   done
-  if test -f "$tmpdepfile"; then
-    # Each line is of the form 'foo.o: dependent.h'.
-    # Do two passes, one to just change these to
-    # '$object: dependent.h' and one to simply 'dependent.h:'.
-    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
-    sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
-  else
-    # The sourcefile does not contain any dependencies, so just
-    # store a dummy comment line, to avoid errors with the Makefile
-    # "include basename.Plo" scheme.
-    echo "#dummy" > "$depfile"
+  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"
   ;;
 
-icc)
-  # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'.
-  # However on
-  #    $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c
-  # ICC 7.0 will fill foo.d with something like
-  #    foo.o: sub/foo.c
-  #    foo.o: sub/foo.h
-  # which is wrong.  We want
-  #    sub/foo.o: sub/foo.c
-  #    sub/foo.o: sub/foo.h
-  #    sub/foo.c:
-  #    sub/foo.h:
-  # ICC 7.1 will output
+## 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 '\':
+  # and will wrap long lines using '\' :
   #    foo.o: sub/foo.c ... \
   #     sub/foo.h ... \
   #     ...
-  # tcc 0.9.26 (FIXME still under development at the moment of writing)
-  # will emit a similar output, but also prepend the continuation lines
-  # with horizontal tabulation characters.
-  "$@" -MD -MF "$tmpdepfile"
-  stat=$?
-  if test $stat -eq 0; then :
-  else
+  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 \'.
+  # 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 -e "s/^[ $tab][ $tab]*/  /" -e "s,^[^:]*:,$object :," \
-    < "$tmpdepfile" > "$depfile"
-  sed '
-    s/[ '"$tab"'][ '"$tab"']*/ /g
-    s/^ *//
-    s/ *\\*$//
-    s/^[^:]*: *//
-    /^$/d
-    /:$/d
-    s/$/ :/
-  ' < "$tmpdepfile" >> "$depfile"
+  # `$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"
   ;;
 
@@ -341,9 +439,8 @@ hp2)
   # '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.
-  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
-  test "x$dir" = "x$object" && dir=
-  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  set_dir_from  "$object"
+  set_base_from "$object"
   if test "$libtool" = yes; then
     tmpdepfile1=$dir$base.d
     tmpdepfile2=$dir.libs/$base.d
@@ -354,8 +451,7 @@ hp2)
     "$@" +Maked
   fi
   stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
      rm -f "$tmpdepfile1" "$tmpdepfile2"
      exit $stat
   fi
@@ -365,76 +461,61 @@ hp2)
     test -f "$tmpdepfile" && break
   done
   if test -f "$tmpdepfile"; then
-    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
+    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
     # Add 'dependent.h:' lines.
     sed -ne '2,${
-	       s/^ *//
-	       s/ \\*$//
-	       s/$/:/
-	       p
-	     }' "$tmpdepfile" >> "$depfile"
+               s/^ *//
+               s/ \\*$//
+               s/$/:/
+               p
+             }' "$tmpdepfile" >> "$depfile"
   else
-    echo "#dummy" > "$depfile"
+    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.
-   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
-   test "x$dir" = "x$object" && dir=
-   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
-
-   if test "$libtool" = yes; then
-      # With Tru64 cc, shared objects can also be used to make a
-      # static library.  This mechanism is used in libtool 1.4 series to
-      # handle both shared and static libraries in a single compilation.
-      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
-      #
-      # With libtool 1.5 this exception was removed, and libtool now
-      # 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.libs/$base.lo.d   # libtool 1.4
-      tmpdepfile2=$dir$base.o.d          # libtool 1.5
-      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
-      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
-      "$@" -Wc,-MD
-   else
-      tmpdepfile1=$dir$base.o.d
-      tmpdepfile2=$dir$base.d
-      tmpdepfile3=$dir$base.d
-      tmpdepfile4=$dir$base.d
-      "$@" -MD
-   fi
-
-   stat=$?
-   if test $stat -eq 0; then :
-   else
-      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
-      exit $stat
-   fi
-
-   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
-   do
-     test -f "$tmpdepfile" && break
-   done
-   if test -f "$tmpdepfile"; then
-      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
-      sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
-   else
-      echo "#dummy" > "$depfile"
-   fi
-   rm -f "$tmpdepfile"
-   ;;
+  # 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
@@ -445,8 +526,7 @@ msvc7)
   "$@" $showIncludes > "$tmpdepfile"
   stat=$?
   grep -v '^Note: including file: ' "$tmpdepfile"
-  if test "$stat" = 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
@@ -472,6 +552,7 @@ $ {
   G
   p
 }' >> "$depfile"
+  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
   rm -f "$tmpdepfile"
   ;;
 
@@ -523,13 +604,14 @@ dashmstdout)
   # 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"
+    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
   rm -f "$depfile"
   cat < "$tmpdepfile" > "$depfile"
-  tr ' ' "$nl" < "$tmpdepfile" | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$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"
   ;;
 
@@ -582,10 +664,12 @@ makedepend)
   # 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"
-  sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$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
   ;;
 
@@ -621,10 +705,10 @@ cpp)
     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"
+  "$@" -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"
@@ -656,15 +740,15 @@ msvisualcpp)
       shift
       ;;
     "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
-	set fnord "$@"
-	shift
-	shift
-	;;
+        set fnord "$@"
+        shift
+        shift
+        ;;
     *)
-	set fnord "$@" "$arg"
-	shift
-	shift
-	;;
+        set fnord "$@" "$arg"
+        shift
+        shift
+        ;;
     esac
   done
   "$@" -E 2>/dev/null |
diff --git a/doc/GeographicLib.dox b/doc/GeographicLib.dox
index 7fd60e9..b472a39 100644
--- a/doc/GeographicLib.dox
+++ b/doc/GeographicLib.dox
@@ -7,16 +7,16 @@
  * MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
-
+namespace GeographicLib {
 /**
 \mainpage GeographicLib library
 \author Charles F. F. Karney (charles at karney.com)
-\version 1.35
-\date 2014-03-13
+\version 1.37
+\date 2014-08-08
 
 \section abstract Abstract
 
-%GeographicLib is a small set of <a href="annotated.html">C++
+GeographicLib is a small set of <a href="annotated.html">C++
 classes</a> for performing conversions between geographic, UTM, UPS,
 MGRS, geocentric, and local cartesian coordinates, for gravity (e.g.,
 EGM2008), geoid height and geomagnetic field (e.g., WMM2010)
@@ -45,22 +45,22 @@ The main project page is at
   http://sourceforge.net/projects/geographiclib </a>
 .
 The code is available for download at
-- <a href="http://sf.net/projects/geographiclib/files/distrib/GeographicLib-1.35.tar.gz">
-  GeographicLib-1.35.tar.gz</a>
-- <a href="http://sf.net/projects/geographiclib/files/distrib/GeographicLib-1.35.zip">
-  GeographicLib-1.35.zip</a>
+- <a href="http://sf.net/projects/geographiclib/files/distrib/GeographicLib-1.37.tar.gz">
+  GeographicLib-1.37.tar.gz</a>
+- <a href="http://sf.net/projects/geographiclib/files/distrib/GeographicLib-1.37.zip">
+  GeographicLib-1.37.zip</a>
 .
 as either a compressed tar file (tar.gz) or a zip file.  (The two
 archives have identical contents, except that the zip file has DOS
 line endings.)  Alternatively you can get the latest release using git
 \verbatim
-  git clone -b r1.35 git://git.code.sf.net/p/geographiclib/code geographiclib
+  git clone -b r1.37 git://git.code.sf.net/p/geographiclib/code geographiclib
 \endverbatim
 There are also binary installers for Windows available at
-- <a href="http://sf.net/projects/geographiclib/files/distrib/GeographicLib-1.35-win32.exe">
-  GeographicLib-1.35-win32.exe</a>
-- <a href="http://sf.net/projects/geographiclib/files/distrib/GeographicLib-1.35-win64.exe">
-  GeographicLib-1.35-win64.exe</a>
+- <a href="http://sf.net/projects/geographiclib/files/distrib/GeographicLib-1.37-win32.exe">
+  GeographicLib-1.37-win32.exe</a>
+- <a href="http://sf.net/projects/geographiclib/files/distrib/GeographicLib-1.37-win64.exe">
+  GeographicLib-1.37-win64.exe</a>
 .
 It is licensed under the
 <a href="http://www.opensource.org/licenses/MIT">MIT/X11 License</a>;
@@ -79,9 +79,11 @@ For more information, see http://geographiclib.sourceforge.net/.
  - \ref magnetic
  - \ref geodesic
  - \ref triaxial
+ - \ref rhumb
  - \ref transversemercator
  - \ref geocentric
- - \ref old
+ - \ref highprec
+ - \ref changes
 
 <center>
 Forward to \ref intro.
@@ -95,37 +97,37 @@ Forward to \ref intro.
 Forward to \ref install.  Up to \ref contents.
 </center>
 
-%GeographicLib offers a C++ interfaces to a small (but important!) set
+GeographicLib offers a C++ interfaces to a small (but important!) set
 of geographic transformations.  It grew out of a desire to improve on
 the <a href="http://earth-info.nima.mil/GandG/geotrans/">geotrans</a>
 package for transforming between geographic and MGRS coordinates.  At
-present, %GeographicLib provides UTM, UPS, MGRS, geocentric, and local
+present, GeographicLib provides UTM, UPS, MGRS, geocentric, and local
 cartesian projections, gravity and geomagnetic models, and classes for
 geodesic calculations.
 
-The goals of %GeographicLib are:
+The goals of GeographicLib are:
  - Accuracy.  In most applications the accuracy is close to round-off,
    about 5 nm (5 nanometers).  Even though in many geographic
    applications 1 cm is considered "accurate enough", there is little
    penalty in providing much better accuracy.  In situations where a
-   faster approximate algorithm is necessary, %GeographicLib offers an
+   faster approximate algorithm is necessary, GeographicLib offers an
    accurate benchmark to guide the development.
  - Completeness.  For each of the projections included, an attempt is
    made to provide a complete solution.  For example,
-   GeographicLib::Geodesic::Inverse works for anti-podal points.
-   Similarly, GeographicLib::Geocentric.Reverse will return accurate
+   Geodesic::Inverse works for anti-podal points.
+   Similarly, Geocentric.Reverse will return accurate
    geodetic coordinates even for points close to the center of the
    earth.
  - C++ interface.  For the projection methods, this allows encapsulation
    of the ellipsoid parameters.
  - Emphasis on projections necessary for analyzing military data.
- - Uniform treatment of UTM/UPS.  The GeographicLib::UTMUPS class treats
+ - Uniform treatment of UTM/UPS.  The UTMUPS class treats
    UPS as zone 0.  This simplifies conversions between UTM and UPS
    coordinates, etc.
  - Well defined and stable conventions for the conversion between
    UTM/UPS to MGRS coordinates.
  - Detailed internal documentation on the algorithms.  For the most part
-   %GeographicLib uses published algorithms and references are given.  If
+   GeographicLib uses published algorithms and references are given.  If
    changes have been made (usually to improve the numerical accuracy),
    these are described in the code.
 
@@ -136,7 +138,7 @@ and the utilities have been tested with g++ 4.4 under Linux, with g++
 (2012), and 12 (2013) compiled for 32 bit and 64 bit.
 
 Matlab, JavaScript, and Python interfaces are provided to portions of
-%GeographicLib; see \ref other.
+GeographicLib; see \ref other.
 
 The section \ref geodesic documents the method of solving the geodesic
 problem.
@@ -146,13 +148,13 @@ projection.
 
 The bulk of the testing has used geographically relevant values of the
 flattening.  Thus, you can expect close to full accuracy for -0.01 ≤
-\e f ≤ 0.01 (but note that GeographicLib::TransverseMercatorExact is
+\e f ≤ 0.01 (but note that TransverseMercatorExact is
 restricted to \e f > 0).  However, reasonably accurate results can be
 expected if -0.1 ≤ \e f ≤ 0.1.  Outside this range, you should
 attempt to verify the accuracy of the routines independently.  Two types
-of problems may occur with larger values of \e f:
- - Some classes, specifically GeographicLib::Geodesic,
-   GeographicLib::GeodesicLine, and GeographicLib::TransverseMercator,
+of problems may occur with larger values of <i>f</i>:
+ - Some classes, specifically Geodesic,
+   GeodesicLine, and TransverseMercator,
    use series expansions using \e f as a small parameter.  The accuracy
    of these routines will degrade as \e f becomes large.
  - Even when exact formulas are used, many of the classes need to invert
@@ -170,24 +172,25 @@ Forward to \ref install.  Up to \ref contents.
 </center>
 **********************************************************************/
 /**
-\page install Installing %GeographicLib
+\page install Installing GeographicLib
 
 <center>
 Back to \ref intro.  Forward to \ref start.  Up to \ref contents.
 </center>
 
-%GeographicLib has been developed under Linux with the g++ compiler
-(versions 4.0 and later) and under Windows with Visual Studio 2005, 2008,
-and 2010.  Earlier versions were tested also under Darwin and Solaris.  It
-should compile on a wide range of other systems.  First download either
-<a href="http://sourceforge.net/projects/geographiclib/files/distrib/GeographicLib-1.35.tar.gz">
-GeographicLib-1.35.tar.gz</a> or
-<a href="http://sourceforge.net/projects/geographiclib/files/distrib/GeographicLib-1.35.zip">
-GeographicLib-1.35.zip</a> (or
-<a href="http://sourceforge.net/projects/geographiclib/files/distrib/GeographicLib-1.35-win32.exe">
-GeographicLib-1.35-win32.exe</a> or
-<a href="http://sourceforge.net/projects/geographiclib/files/distrib/GeographicLib-1.35-win64.exe">
-GeographicLib-1.35-win64.exe</a> for binary installation under Windows).
+GeographicLib has been developed under Linux with the g++ compiler
+(versions 4.0 and later) and under Windows with Visual Studio 2010,
+2012, and 2013.  Earlier versions were tested also under Visual Studio
+2005 and 2008 and under Darwin and Solaris.  It should compile on a wide
+range of other systems.  First download either
+<a href="http://sourceforge.net/projects/geographiclib/files/distrib/GeographicLib-1.37.tar.gz">
+GeographicLib-1.37.tar.gz</a> or
+<a href="http://sourceforge.net/projects/geographiclib/files/distrib/GeographicLib-1.37.zip">
+GeographicLib-1.37.zip</a> (or
+<a href="http://sourceforge.net/projects/geographiclib/files/distrib/GeographicLib-1.37-win32.exe">
+GeographicLib-1.37-win32.exe</a> or
+<a href="http://sourceforge.net/projects/geographiclib/files/distrib/GeographicLib-1.37-win64.exe">
+GeographicLib-1.37-win64.exe</a> for binary installation under Windows).
 Then pick one of the first five options below:
 - \ref cmake.  This is the preferred installation method as it will work
   on the widest range of platforms.  However it requires that you have
@@ -199,15 +202,15 @@ Then pick one of the first five options below:
 - \ref windows.  This is a simple installation method that works with
   Visual Studio 2005, 2008, and 2010 under Windows.
 - \ref windowsbin.  Use this installation method if you only need to use
-  the \ref utilities supplied with %GeographicLib.  (This method also
+  the \ref utilities supplied with GeographicLib.  (This method also
   installs the header files and the library for use by Visual Studio 10.)
-- \ref qt.  How to compile %GeographicLib so that it can be used by Qt
+- \ref qt.  How to compile GeographicLib so that it can be used by Qt
   programs.
 - \ref maintainer.  This describes addition tasks of interest only to
   the maintainers of this code.
 .
 This section documents only how to install the <i>software</i>.  If you
-wish to use %GeographicLib to evaluate geoid heights or the earth's
+wish to use GeographicLib to evaluate geoid heights or the earth's
 gravitational or magnetic fields, then you must also install the
 relevant data files.  See \ref geoidinst, \ref gravityinst, and \ref
 magneticinst for instructions.
@@ -229,7 +232,7 @@ make software maintanence simpler
   separate <i>install</i> step which copies the headers, libraries,
   tools, and documentation to a "central" location.  You may at this
   point delete the source and build directories.  If you have
-  administrative privileges, you can install %GeographicLib for the use
+  administrative privileges, you can install GeographicLib for the use
   of all users (e.g., in /usr/local).  Otherwise, you can install it for
   your personal use (e.g., in $HOME/packages).
 
@@ -237,7 +240,7 @@ make software maintanence simpler
 
 This is the recommended method of installation; however it requires that
 <a href="http://www.cmake.org">cmake</a> be installed on your system.
-This permits %GeographicLib to be built either as a shared or a static
+This permits GeographicLib to be built either as a shared or a static
 library on a wide variety of systems.  cmake can also determine the
 capabilities of your system and adjust the compilation of the
 libraries and examples appropriately.
@@ -248,7 +251,7 @@ command like
   \verbatim
   yum install cmake \endverbatim
 (executed as root).  The minimum version of cmake supported for building
-%GeographicLib is 2.8.4 (which was released on 2011-02-16).  (Actually,
+GeographicLib is 2.8.4 (which was released on 2011-02-16).  (Actually,
 a few earlier versions will also work for non-Windows platforms.)
 
 On other systems, download a binary installer from http://www.cmake.org
@@ -258,14 +261,15 @@ ccmake and cmake-gui which offer curses and graphical interfaces to
 cmake.  Building under cmake depends on whether it is targeting an IDE
 (interactive development environment) or generating Unix-style
 makefiles.  The instructions below have been tested with makefiles and
-g++ on Linux and with the Visual Studio IDE on Windows.
+g++ on Linux and with the Visual Studio IDE on Windows.  It is known to
+work also for Visual Studio 12 Express (2013).
 
-Here are the steps to compile and install %GeographicLib:
+Here are the steps to compile and install GeographicLib:
 - Unpack the source, running one of \verbatim
-  tar xfpz GeographicLib-1.35.tar.gz
-  unzip -q GeographicLib-1.35.zip \endverbatim
+  tar xfpz GeographicLib-1.37.tar.gz
+  unzip -q GeographicLib-1.37.zip \endverbatim
   then enter the directory created with one of \verbatim
-  cd GeographicLib-1.35 \endverbatim
+  cd GeographicLib-1.37 \endverbatim
 - Create a separate build directory and enter it, for example, \verbatim
   mkdir BUILD
   cd BUILD \endverbatim
@@ -273,16 +277,16 @@ Here are the steps to compile and install %GeographicLib:
   and MacOSX systems, the command is \verbatim
   cmake .. \endverbatim
   For Windows, the command is typically one of \verbatim
-  cmake -G "Visual Studio 10" -D CMAKE_INSTALL_PREFIX=C:/pkg-vc10/GeographicLib-1.35 ..
-  cmake -G "Visual Studio 9 2008" -D CMAKE_INSTALL_PREFIX=C:/pkg-vc9/GeographicLib-1.35 ..
+  cmake -G "Visual Studio 10" -D CMAKE_INSTALL_PREFIX=C:/pkg-vc10/GeographicLib-1.37 ..
+  cmake -G "Visual Studio 9 2008" -D CMAKE_INSTALL_PREFIX=C:/pkg-vc9/GeographicLib-1.37 ..
 \endverbatim
   The definitions of CMAKE_INSTALL_PREFIX are optional (see below).  The
   settings given above are recommended to ensure that packages that use
-  %GeographicLib use the version compiled with the right compiler.
+  GeographicLib use the version compiled with the right compiler.
   If you need to rerun cmake, use \verbatim
   cmake . \endverbatim
   possibly including some options via <code>-D</code> (see the next step).
-- cmake allows you to configure how %GeographicLib is built and installed by
+- cmake allows you to configure how GeographicLib is built and installed by
   supplying options, for example \verbatim
   cmake -D CMAKE_INSTALL_PREFIX=/tmp/geographic . \endverbatim
   The options you might need to change are
@@ -290,7 +294,7 @@ Here are the steps to compile and install %GeographicLib:
     convention.  If it is on ON (the Linux default), the installation
     is to a common directory, e.g., /usr/local.  If it is OFF (the
     Windows default), the installation directory contains the package
-    name, e.g., C:/pkg/GeographicLib-1.35.  The installation
+    name, e.g., C:/pkg/GeographicLib-1.37.  The installation
     directories for the documentation, cmake configuration, python and
     matlab interfaces all depend on the variable with deeper paths
     relative to CMAKE_INSTALL_PREFIX being used when it's ON:
@@ -305,21 +309,20 @@ Here are the steps to compile and install %GeographicLib:
     For windows systems, it is recommended to use a prefix which
     includes the compiler version, as shown above (and also, possibly,
     whether this is a 64-bit build, e.g., <code>cmake -G "Visual Studio
-    10 Win64" -D CMAKE_INSTALL_PREFIX=C:/pkg-vc10-x64/GeographicLib-1.35
+    10 Win64" -D CMAKE_INSTALL_PREFIX=C:/pkg-vc10-x64/GeographicLib-1.37
     ..</code>).  If you just want to try the library to see if it suits
     your needs, pick, for example,
     <code>CMAKE_INSTALL_PREFIX</code>=/tmp/geographic.
   - <code>GEOGRAPHICLIB_DATA</code> (default:
     /usr/local/share/GeographicLib for non-Windows systems,
-    C:/Documents and Settings/All Users/Application
-    Data/GeographicLib for Windows systems) specifies the default
-    location for the various datasets for use by GeographicLib::Geoid,
-    GeographicLib::GravityModel, and GeographicLib::MagneticModel.
+    C:/ProgramData/GeographicLib for Windows systems) specifies the default
+    location for the various datasets for use by Geoid,
+    GravityModel, and MagneticModel.
     See \ref geoidinst, \ref gravityinst, and \ref magneticinst for more
     information.
   - <code>GEOGRAPHICLIB_LIB_TYPE</code> (allowed values: SHARED, STATIC, or
     BOTH), specifies the types of libraries build.  The default is
-    STATIC for Windows and SHARED otherwise.  If building %GeographicLib
+    STATIC for Windows and SHARED otherwise.  If building GeographicLib
     for sytem-wide use, BOTH is recommended, because this provides users
     with the choice of which library to use.
   - <code>CMAKE_BUILD_TYPE</code> (default: Release).  This
@@ -348,12 +351,21 @@ Here are the steps to compile and install %GeographicLib:
     <a href="NET/index.html">NETGeographicLib</a>.  This only makes
     sense for Windows systems.
   - <code>GEOGRAPHICLIB_PRECISION</code> specifies the precision to be
-    used for "real" (i.e., floating point) numbers.  1 means float
-    (single precision); 2 (the default) means double; 3 means long
-    double; 4 is reserved for quadruple precision.  Nearly all the
-    testing has been carried out with doubles and that's the
-    recommended configuration.  In particular you should avoid
-    "installing" the library with a precision different from double.
+    used for "real" (i.e., floating point) numbers.  Here are the
+    possible values
+    -# float (24-bit precision); typically this is far to inaccurate
+       for geodetic applications.
+    -# double precision (53-bit precision, the default).
+    -# long double (64-bit precision); this does not apply for Visual
+       Studio (long double is the same as double with that compiler).
+    -# quad precision (113-bit precision).
+    -# arbitrary precision.
+    .
+    See \ref highprec for addition information about the last two
+    values.  Nearly all the testing has been carried out with doubles
+    and that's the recommended configuration.  In particular you should
+    avoid "installing" the library with a precision different from
+    double.
 - Build and install the software.  In non-IDE environments, run
   \verbatim
   make         # compile the library and the examples
@@ -392,18 +404,18 @@ Here are the steps to compile and install %GeographicLib:
 \section autoconf Installation using the autoconfigure tools
 
 The method works on most Unix-like systems including Linux and Mac OS X.
-Here are the steps to compile and install %GeographicLib:
+Here are the steps to compile and install GeographicLib:
 - Unpack the source, running \verbatim
-  tar xfpz GeographicLib-1.35.tar.gz \endverbatim
+  tar xfpz GeographicLib-1.37.tar.gz \endverbatim
   then enter the directory created \verbatim
-  cd GeographicLib-1.35 \endverbatim
+  cd GeographicLib-1.37 \endverbatim
 - Create a separate build directory and enter it, for example, \verbatim
   mkdir BUILD
   cd BUILD \endverbatim
 - Configure the software, specifing the path of the source directory,
   with \verbatim
   ../configure \endverbatim
-- By default %GeographicLib will be installed under /usr/local.
+- By default GeographicLib will be installed under /usr/local.
   You can change this with, for example \verbatim
   ../configure --prefix=/tmp/geographic \endverbatim
 - Compile and install the software with \verbatim
@@ -423,18 +435,18 @@ Here are the steps to compile and install %GeographicLib:
 This method requires the standard GNU suite of tools, in particular make
 and g++.  This builds a static library and the examples.
 
-Here are the steps to compile and install %GeographicLib:
+Here are the steps to compile and install GeographicLib:
 - Unpack the source, running \verbatim
-  tar xfpz GeographicLib-1.35.tar.gz \endverbatim
+  tar xfpz GeographicLib-1.37.tar.gz \endverbatim
   then enter the directory created \verbatim
-  cd GeographicLib-1.35 \endverbatim
+  cd GeographicLib-1.37 \endverbatim
 - Edit \verbatim
   include/GeographicLib/Config.h \endverbatim
   If your C++ compiler does not recognize the long double type
   (unlikely), insert \code
-  #undef HAVE_LONG_DOUBLE \endcode
+  #undef GEOGRAPHICLIB_HAVE_LONG_DOUBLE \endcode
   If your machine using big endian ordering, then insert \code
-  #define WORDS_BIGENDIAN 1 \endcode
+  #define GEOGRAPHICLIB_WORDS_BIGENDIAN 1 \endcode
 - Build and install the software: \verbatim
   make             # compile the library and the examples
   make install     # as root \endverbatim
@@ -458,18 +470,19 @@ static library and the utilities.  If you only have Visual Studio 2003,
 use cmake to create the necessary solution file, see \ref cmake.  (cmake
 is needed to build the Matlab interface and to run the tests.)
 - Unpack the source, running \verbatim
-  unzip -q GeographicLib-1.35.zip \endverbatim
-- Open GeographicLib-1.35/windows/GeographicLib-vc10.sln in Visual Studio
-  2010 (for Visual Studio 2005 and 2008, replace -vc10 by -vc8 or -vc9).
+  unzip -q GeographicLib-1.37.zip \endverbatim
+- Open GeographicLib-1.37/windows/GeographicLib-vc10.sln in Visual Studio
+  2010 (for Visual Studio 2005 and 2008, replace -vc10 by -vc8 or -vc9;
+  for Visual Studio Express 2010, replace -vc10 by -vc10x).
 - Pick the build type (e.g., Release), and select "Build Solution".
 - The library and the compiled examples are in the windows/Release.
 - Copy the library windows/Release/GeographicLib.lib and the
   headers in include/GeographicLib somewhere convenient.  The
-  headers should remain in a directory named %GeographicLib.  If you
-  expect to use the Matlab/Octave interface, copy matlab/*.m and
-  matlab/*.cpp to a directory in your matlab/octave path, see \ref
-  matlab for instructions on compiling the interface.  For documentation,
-  open
+  headers should remain in a directory named GeographicLib.  If you
+  expect to use the Matlab/Octave interface, copy *.m and *.cpp from the
+  matlab directory to a directory in your matlab/octave path, see \ref
+  matlab for instructions on compiling the interface.  For
+  documentation, open
   <a href="index.html">doc/html/index.html</a> in a web
   browser.
 
@@ -478,7 +491,7 @@ The Visual Studio 10 solution also contains projects to build
 
 \section windowsbin Using a binary installer for Windows
 
-Use this method if you only need to use the %GeographicLib utilities.
+Use this method if you only need to use the GeographicLib utilities.
 The header files and static and shared versions of library are also
 provided; these can only be used by Visual Studio 2010 (in either
 release or debug mode).  However, if you plan to use the library, it may
@@ -486,14 +499,14 @@ be advisable to build it with the compiler you are using for your own
 code using either \ref cmake or \ref windows.
 
 Download and run
-<a href="http://sourceforge.net/projects/geographiclib/files/distrib/GeographicLib-1.35-win32.exe">
-GeographicLib-1.35-win32.exe</a> or
-<a href="http://sourceforge.net/projects/geographiclib/files/distrib/GeographicLib-1.35-win64.exe">
-GeographicLib-1.35-win64.exe</a>:
+<a href="http://sourceforge.net/projects/geographiclib/files/distrib/GeographicLib-1.37-win32.exe">
+GeographicLib-1.37-win32.exe</a> or
+<a href="http://sourceforge.net/projects/geographiclib/files/distrib/GeographicLib-1.37-win64.exe">
+GeographicLib-1.37-win64.exe</a>:
  - read the MIT/X11 License agreement,
  - select whether you want your PATH modified,
  - select the installation folder, by default
-   C:\\pkg-vc10\\GeographicLib-1.35 or C:\\pkg-vc10-x64\\GeographicLib-1.35,
+   C:\\pkg-vc10\\GeographicLib-1.37 or C:\\pkg-vc10-x64\\GeographicLib-1.37,
  - select the start menu folder,
  - and install.
  .
@@ -501,7 +514,7 @@ GeographicLib-1.35-win64.exe</a>:
 given in \ref cmake.)  The start menu will now include links to the
 documentation for the library and for the utilities (and a link for
 uninstalling the library).  If you ask for your PATH to be modified, it
-will include C:/pkg-vc10/GeographicLib-1.35/bin where the utilities are
+will include C:/pkg-vc10/GeographicLib-1.37/bin where the utilities are
 installed.  The headers and library are installed in the
 include/GeographicLib and lib folders.  With the 64-bit installer, the
 Matlab interface is installed in the matlab folder.  Add this to your
@@ -512,15 +525,15 @@ was compiled with Matlab R2013a 64-bit, however it may work with some
 other 64-bit versions of Matlab.
 <a href="NET/index.html">NETGeographicLib</a> library dlls (release and
 debug) are included with the binary installers; these are linked against
-the shared library for %GeographicLib.
+the shared library for GeographicLib.
 
 \section qt Building the library for use with Qt
 
-If Qt is using a standard compiler, then build %GeographicLib with that
+If Qt is using a standard compiler, then build GeographicLib with that
 same compiler (and optimization flags) as Qt.
 
 If you are using the mingw compiler on Windows for Qt, then you need to
-build %GeographicLib with mingw.  You can accomplish this with cmake
+build GeographicLib with mingw.  You can accomplish this with cmake
 under cygwin with, for example, \verbatim
   export PATH="`cygpath -m c:/QtSDK/mingw/bin`:$PATH"
   mkdir BUILD
@@ -536,7 +549,7 @@ If cmake complains that sh mustn't be in your path, invoke cmake with
   cmake -G "MinGW Makefiles" -D CMAKE_INSTALL_PREFIX=C:/pkg-mingw/GeographicLib ..
 \endverbatim
 If cmake is not available, there is a simple project file that compiles
-the %GeographicLib library <i>only</i> with the Qt compiler: \verbatim
+the GeographicLib library <i>only</i> with the Qt compiler: \verbatim
   cd src
   qmake GeographicLib.pro # configure the project
   make                    # build the library \endverbatim
@@ -552,7 +565,7 @@ Check the code out of git with \verbatim
 Here the "master" branch is checked out.  There are three branches in
 the git repository:
 - <b>master</b>: the main branch for code maintainence.  Releases are
-  tagged on this branch as, e.g., v1.35.
+  tagged on this branch as, e.g., v1.37.
 - <b>devel</b>: the development branch; changes made here are merged
   into master.
 - <b>release</b>: the release branch created by unpacking the source
@@ -562,7 +575,7 @@ the git repository:
   specifying a branch).  This differs from the master branch in that
   some administrative files are excluded while some intermediate files
   are included (in order to aid building on as many platforms as
-  possible).  Releases are tagged on this branch as, e.g., r1.35.
+  possible).  Releases are tagged on this branch as, e.g., r1.37.
 .
 The autoconf configuration script and the formatted man pages are not
 checked into master branch of the repository.  In order to create the
@@ -578,14 +591,14 @@ In the case of cmake, you then run \verbatim
 which will copy the man pages from the build directory back into the
 source tree and package the resulting source tree for distribution as
 \verbatim
-  GeographicLib-1.35.tar.gz
-  GeographicLib-1.35.zip \endverbatim
+  GeographicLib-1.37.tar.gz
+  GeographicLib-1.37.zip \endverbatim
 Finally, \verbatim
   make package \endverbatim
 or building PACKAGE in Visual Studio will create a binary installer for
-%GeographicLib.  For Windows, this requires in the installation of
+GeographicLib.  For Windows, this requires in the installation of
 <a href="http://nsis.sourceforge.net">NSIS</a>.  On Windows, you should
-configure %GeographicLib with <code>PACKAGE_DEBUG_LIBS</code>=ON, build both
+configure GeographicLib with <code>PACKAGE_DEBUG_LIBS</code>=ON, build both
 Release and Debug versions of the library and finally build PACKAGE in
 Release mode.  This will get the release and debug versions of the
 library included in the package.  For example, the 64-bit binary
@@ -605,7 +618,7 @@ With configure, run \verbatim
   make dist-gzip \endverbatim
 which will create the additional files and packages the results ready
 for distribution as \verbatim
-  geographiclib-1.35.tar.gz \endverbatim
+  geographiclib-1.37.tar.gz \endverbatim
 
 <center>
 Back to \ref intro.  Forward to \ref start.  Up to \ref contents.
@@ -618,16 +631,16 @@ Back to \ref intro.  Forward to \ref start.  Up to \ref contents.
 Back to \ref install.  Forward to \ref utilities.  Up to \ref contents.
 </center>
 
-Much (but not all!) of the useful functionality of %GeographicLib is
+Much (but not all!) of the useful functionality of GeographicLib is
 available via simple command line utilities.  Interfaces to some of them
 are available via the web.  See \ref utilities for documentation on
 these.
 
-In order to use %GeographicLib from C++ code, you will need to
-- Include the header files for the %GeographicLib classes in your code.
+In order to use GeographicLib from C++ code, you will need to
+- Include the header files for the GeographicLib classes in your code.
   E.g., \code
   #include <GeographicLib/LambertConformalConic.hpp> \endcode
-- Include the GeographicLib:: namespace prefix to the %GeographicLib classes,
+- Include the GeographicLib:: namespace prefix to the GeographicLib classes,
   or include \code
   using namespace GeographicLib; \endcode
   in your code.
@@ -664,7 +677,7 @@ In order to use %GeographicLib from C++ code, you will need to
   .
   The most import step is the find_package command.  The cmake
   documentation describes the locations searched by find_package (the
-  appropriate rule for %GeographicLib are those for "Config" mode lookups).
+  appropriate rule for GeographicLib are those for "Config" mode lookups).
   In brief, the locations that are searched are (from least specific to
   most specific, i.e., in <i>reverse</i> order) are
   - under the system paths, i.e., locations such as <code>C:/Program
@@ -673,32 +686,32 @@ In order to use %GeographicLib from C++ code, you will need to
     (or set of directories) for external dependencies; this is given by
     a (semicolon separated) list of directories specified by the cmake
     variable <code>CMAKE_PREFIX_PATH</code> (illustrated above);
-  - the package directory for %GeographicLib can be overridden with the
+  - the package directory for GeographicLib can be overridden with the
     <i>environment variable</i> <code>GeographicLib_DIR</code> (which is the
-    directory under which %GeographicLib is installed);
-  - finally, if you need to point to a particular build of %GeographicLib,
+    directory under which GeographicLib is installed);
+  - finally, if you need to point to a particular build of GeographicLib,
     define the <i>cmake variable</i> <code>GeographicLib_DIR</code>, which
     specifies the directory containing the configuration file
-    <code>geographiclib-config.cmake</code> (for debugging this be the
+    <code>geographiclib-config.cmake</code> (for debugging this may be the
     top-level <i>build</i> directory, as opposed to <i>installation</i>
-    directory, for %GeographicLib).
+    directory, for GeographicLib).
   .
   Typically, specifying nothing or <code>CMAKE_PREFIX_PATH</code>
   suffices.  However the two <code>GeographicLib_DIR</code> variables allow
   for a specific version to be chosen.  On Windows systems (with Visual
-  Studio), find_package will only find versions of %GeographicLib built with
+  Studio), find_package will only find versions of GeographicLib built with
   the right version of the compiler.  (If you used a non-cmake method of
-  installing %GeographicLib, you can try copying cmake/FindGeographicLib.cmake
+  installing GeographicLib, you can try copying cmake/FindGeographicLib.cmake
   to somewhere in your <code>CMAKE_MODULE_PATH</code> in order for
   find_package to work.  However, this method has not been thoroughly
   tested.)
 
-  If %GeographicLib is found, then the following cmake variables are set:
+  If GeographicLib is found, then the following cmake variables are set:
   - <code>GeographicLib_FOUND</code> = 1
-  - <code>GeographicLib_VERSION</code> = 1.35
+  - <code>GeographicLib_VERSION</code> = 1.37
   - <code>GeographicLib_INCLUDE_DIRS</code>
   - <code>GeographicLib_LIBRARIES</code> = one of the following two:
-  - <code>GeographicLib_SHARED_LIBRARIES</code> = %GeographicLib
+  - <code>GeographicLib_SHARED_LIBRARIES</code> = GeographicLib
   - <code>GeographicLib_STATIC_LIBRARIES</code> = GeographicLib_STATIC
   - <code>GeographicLib_DEFINITIONS</code> = one of the following two:
   - <code>GeographicLib_SHARED_DEFINITIONS</code> = -DGEOGRAPHICLIB_SHARED_LIB=1
@@ -728,9 +741,9 @@ In order to use %GeographicLib from C++ code, you will need to
   On Windows, cmake takes care of linking to the release or debug
   version of the library as appropriate.  (This assumes that the Release
   and Debug versions of the libraries were built and installed.  This is
-  true for the Windows binary installer for %GeographicLib version 1.34 and
+  true for the Windows binary installer for GeographicLib version 1.34 and
   later.)
-- Here are the steps to compile and link your code using %GeographicLib
+- Here are the steps to compile and link your code using GeographicLib
   "manually".
   - Tell the compiler where to find the header files.  With g++ and with
     /usr/local specified as the installation directory,
@@ -762,7 +775,7 @@ In order to use %GeographicLib from C++ code, you will need to
     Linker -> General -> Additional Library Directories = C:\pkg-vc10\Geographic\lib
     \endverbatim
     Note that the library name is <b>Geographic</b> and not
-    %GeographicLib.  For the Debug version of your program on Windows
+    GeographicLib.  For the Debug version of your program on Windows
     add "_d" to the library, e.g., Geographic_d-i.lib or
     Geographic_d.lib.
   - Tell the runtime environment where to find the shared library
@@ -780,7 +793,7 @@ In order to use %GeographicLib from C++ code, you will need to
     your executable or else include the directory containing the dll in
     your <code>PATH</code>.
 
-Here is a very simple test code, which uses the GeographicLib::Geodesic
+Here is a very simple test code, which uses the Geodesic
 class:
 \include example-Geodesic-small.cpp
 This example is <code>examples/example-Geodesic-small.cpp</code>.  If you
@@ -820,10 +833,10 @@ The next steps are:
  - Browse the <a href="annotated.html">Class List</a> for full documentation
    on the classes in the library.
  - Look at the example code in the examples directory.  Each file
-   provides a very simple standalone example of using one %GeographicLib
+   provides a very simple standalone example of using one GeographicLib
    class.  These are included in the descriptions of the classes.
  - Look at the source code for the utilities in the tools directory for
-   more examples of using %GeographicLib from C++ code, e.g.,
+   more examples of using GeographicLib from C++ code, e.g.,
    GeodesicProj.cpp is a program to performing various geodesic
    projections.
 
@@ -855,7 +868,7 @@ Back to \ref install.  Forward to \ref utilities.  Up to \ref contents.
 Back to \ref start.  Forward to \ref organization.  Up to \ref contents.
 </center>
 
-Various utility programs are provided with %GeographicLib.  These should
+Various utility programs are provided with GeographicLib.  These should
 be installed in a directory included in your PATH (e.g.,
 /usr/local/bin).  These programs are wrapper programs that invoke
 the underlying functionality provided by the library.
@@ -863,46 +876,50 @@ the underlying functionality provided by the library.
 The utilities are
  - <a href="GeoConvert.1.html">
    <b>GeoConvert</b></a>: convert geographic coordinates using
-   GeographicLib::GeoCoords.
+   GeoCoords.  See \ref GeoConvert.cpp.
  - <a href="GeodSolve.1.html">
    <b>GeodSolve</b></a>: perform geodesic calculations using
-   GeographicLib::Geodesic and GeographicLib::GeodesicLine.
+   Geodesic and GeodesicLine.  See \ref GeodSolve.cpp.
  - <a href="Planimeter.1.html">
    <b>Planimeter</b></a>: compute the area of geodesic polygons using
-   GeographicLib::PolygonArea.
+   PolygonArea.  See \ref Planimeter.cpp.
  - <a href="TransverseMercatorProj.1.html">
    <b>TransverseMercatorProj</b></a>: convert between geographic
    and transverse Mercator.  This is for testing
-   GeographicLib::TransverseMercatorExact and
-   GeographicLib::TransverseMercator.
+   TransverseMercatorExact and
+   TransverseMercator.  See \ref TransverseMercatorProj.cpp.
  - <a href="CartConvert.1.html">
    <b>CartConvert</b></a>: convert geodetic coordinates to geocentric or
-   local cartesian using GeographicLib::Geocentric and
-   GeographicLib::LocalCartesian.
+   local cartesian using Geocentric and
+   LocalCartesian.  See \ref CartConvert.cpp.
  - <a href="GeodesicProj.1.html">
    <b>GeodesicProj</b></a>: perform projections based on geodesics
-   using GeographicLib::AzimuthalEquidistant, GeographicLib::Gnomonic,
-   and GeographicLib::CassiniSoldner.
+   using AzimuthalEquidistant, Gnomonic,
+   and CassiniSoldner.  See \ref GeodesicProj.cpp.
  - <a href="ConicProj.1.html">
    <b>ConicProj</b></a>: perform conic projections using
-   GeographicLib::LambertConformalConic and
-   GeographicLib::AlbersEqualArea.
+   LambertConformalConic and
+   AlbersEqualArea.  See \ref ConicProj.cpp.
  - <a href="GeoidEval.1.html">
    <b>GeoidEval</b></a>: look up geoid heights using
-   GeographicLib::Geoid.
+   Geoid.  See \ref GeoidEval.cpp.
  - <a href="Gravity.1.html">
    <b>Gravity</b></a>: compute the earth's gravitational field using
-   GeographicLib::GravityModel and GeographicLib::GravityCircle.
+   GravityModel and GravityCircle.  See \ref Gravity.cpp.
  - <a href="MagneticField.1.html">
    <b>MagneticField</b></a>: compute the earth's magnetic field using
-   GeographicLib::MagneticModel and GeographicLib::MagneticCircle.
+   MagneticModel and MagneticCircle.  See \ref MagneticField.cpp.
+ - <a href="RhumbSolve.1.html">
+   <b>RhumbSolve</b></a>: perform rhumb line calculations using Rhumb
+   and RhumbLine.  See \ref RhumbSolve.cpp.
  .
 The documentation for these utilities is in the form of man pages.  This
 documentation can be accessed by clicking on the utility name in the
 list above, running the man command on Unix-like systems, or by invoking
-the utility with the --help option.  A brief summary of usage is given
-by invoking the utility with the -h option.  The version of the utility
-is given by the --version option.
+the utility with the <code>--help</code> option.  A brief summary of
+usage is given by invoking the utility with the <code>-h</code> option.
+The version of the utility is given by the <code>--version</code>
+option.
 
 The utilities all accept data on standard input, transform it in some
 way, and print the results on standard output.  This makes the utilities
@@ -929,11 +946,11 @@ Back to \ref utilities.  Forward to \ref other.  Up to \ref contents.
 </center>
 
 Here is a brief description of the relationship between the various
-components of %GeographicLib.  All of these are defined in the
+components of GeographicLib.  All of these are defined in the
 GeographicLib namespace.
 
-GeographicLib::TransverseMercator, GeographicLib::PolarStereographic,
-GeographicLib::LambertConformalConic, and GeographicLib::AlbersEqualArea
+TransverseMercator, PolarStereographic,
+LambertConformalConic, and AlbersEqualArea
 provide the basic projections.  The constructors for these classes
 specify the ellipsoid and the forward and reverse projections are
 implemented as const member functions.  TransverseMercator uses
@@ -942,18 +959,18 @@ square of the eccentricity.  PolarStereographic, LambertConformalConic,
 and AlbersEqualArea use the exact formulas for the projections (e.g.,
 from Snyder).
 
-GeographicLib::TransverseMercator::UTM and
-GeographicLib::PolarStereographic::UPS are const static instantiations
+TransverseMercator::UTM and
+PolarStereographic::UPS are const static instantiations
 specific for the WGS84 ellipsoid with the UTM and UPS scale factors.
 (These do \e not add the standard false eastings or false northings for
-UTM and UPS.)  Similarly GeographicLib::LambertConformalConic::Mercator
+UTM and UPS.)  Similarly LambertConformalConic::Mercator
 is a const static instantiation of this projection for a WGS84 ellipsoid
 and a standard parallel of 0 (which gives the Mercator projection).
-GeographicLib::AlbersEqualArea::CylindricalEqualArea,
+AlbersEqualArea::CylindricalEqualArea,
 AzimuthalEqualAreaNorth, and AzimuthalEqualAreaSouth, likewise provide
 special cases of the equal area projection.
 
-GeographicLib::UTMUPS uses TransverseMercator::UTM and
+UTMUPS uses TransverseMercator::UTM and
 PolarStereographic::UPS to perform the UTM and UPS
 projections.  The class offers a uniform interface to UTM and UPS by
 treating UPS as UTM zone 0.  This class stores no internal state and the
@@ -961,128 +978,128 @@ forward and reverse projections are provided via static member
 functions.  The forward projection offers the ability to override the
 standard UTM/UPS choice and the UTM zone.
 
-GeographicLib::MGRS transforms between UTM/UPS coordinates and MGRS.
+MGRS transforms between UTM/UPS coordinates and MGRS.
 UPS coordinates are handled as UTM zone 0.  This class stores no
 internal state and the forward (UTM/UPS to MGRS) and reverse (MGRS to
 UTM/UPS) conversions are provided via static member functions.
 
-GeographicLib::GeoCoords holds a single geographic location which may be
+GeoCoords holds a single geographic location which may be
 specified as latitude and longitude, UTM or UPS, or MGRS.  Member
 functions are provided to convert between coordinate systems and to
 provide formatted representations of them.
 <a href="GeoConvert.1.html">GeoConvert</a> is a simple command line
 utility to provide access to the GeoCoords class.
 
-GeographicLib::TransverseMercatorExact is a drop in replacement for
+TransverseMercatorExact is a drop in replacement for
 TransverseMercator which uses the exact formulas, based on elliptic
 functions, for the projection as given by Lee.
 <a href="TransverseMercatorProj.1.html">TransverseMercatorProj</a> is a
 simple command line utility to test to the TransverseMercator and
 TransverseMercatorExact.
 
-GeographicLib::Geodesic and GeographicLib::GeodesicLine perform geodesic
-calculations.  The constructor for GeographicLib::Geodesic specifies the
+Geodesic and GeodesicLine perform geodesic
+calculations.  The constructor for Geodesic specifies the
 ellipsoid and the direct and inverse calculations are implemented as
-const member functions.  GeographicLib::Geocentric::WGS84 is a const
+const member functions.  Geocentric::WGS84 is a const
 static instantiation of Geodesic specific for the WGS84 ellipsoid.  In
 order to perform a series of direct geodesic calculations on a single
-line, the GeographicLib::GeodesicLine class can be used.  This packages
+line, the GeodesicLine class can be used.  This packages
 all the information needed to specify a geodesic.  A const member
 function returns the coordinates a specified distance from the starting
 point.  <a href="GeodSolve.1.html">GeodSolve</a> is a simple command
 line utility to perform geodesic calculations.
-GeographicLib::PolygonArea is a class which compute the area of geodesic
-polygons using the Geodesic class and <a
-href="Planimeter.1.html">Planimeter</a> is a command line utility for
-the same purpose.  GeographicLib::AzimuthalEquidistant,
-GeographicLib::CassiniSoldner, and GeographicLib::Gnomonic are
-projections based on the Geodesic class.  <a
-href="GeodesicProj.1.html">GeodesicProj</a> is a command line utility to
-exercise these projections.
-
-GeographicLib::GeodesicExact and GeographicLib::GeodesicLineExact are
-drop in replacements for GeographicLib::Geodesic and
-GeographicLib::GeodesicLine in which the solution is given in terms of
-elliptic integrals (computed by GeographicLib::EllipticFunction).
+PolygonArea is a class which compute the area of geodesic
+polygons using the Geodesic class and
+<a href="Planimeter.1.html">Planimeter</a> is a command line utility for
+the same purpose.  AzimuthalEquidistant,
+CassiniSoldner, and Gnomonic are
+projections based on the Geodesic class.
+<a href="GeodesicProj.1.html">GeodesicProj</a> is a command line utility
+to exercise these projections.
+
+GeodesicExact and GeodesicLineExact are
+drop in replacements for Geodesic and
+GeodesicLine in which the solution is given in terms of
+elliptic integrals (computed by EllipticFunction).
 These classes should be used if the absolute value of the flattening
 exceeds 0.02.  The -E option to <a href="GeodSolve.1.html">GeodSolve</a>
 uses these classes.
 
-GeographicLib::Geocentric and GeographicLib::LocalCartesian convert between
+Geocentric and LocalCartesian convert between
 geodetic and geocentric or a local cartesian system.  The constructor for
 specifies the ellipsoid and the forward and reverse projections are
-implemented as const member functions.  GeographicLib::Geocentric::WGS84 is a
+implemented as const member functions.  Geocentric::WGS84 is a
 const static instantiation of Geocentric specific for the WGS84 ellipsoid.
 <a href="CartConvert.1.html">CartConvert</a> is a simple command line
 utility to provide access to these classes.
 
-GeographicLib::Geoid evaluates geoid heights by interpolation.  This is
+Geoid evaluates geoid heights by interpolation.  This is
 provided by the operator() member function.
 <a href="GeoidEval.1.html">GeoidEval</a> is a simple command line
 utility to provide access to this class.  This class requires
 installation of data files for the various geoid models; see \ref
 geoidinst for details.
 
-GeographicLib::Ellipsoid is a class which performs latitude
+Ellipsoid is a class which performs latitude
 conversions and returns various properties of the ellipsoid.
 
-GeographicLib::GravityModel evaluates the earth's gravitational field
+GravityModel evaluates the earth's gravitational field
 using a particular gravity model.  Various member functions return the
 gravitational field, the gravity disturbance, the gravity anomaly, and
 the geoid height <a href="Gravity.1.html">Gravity</a> is a simple
 command line utility to provide access to this class.  If the field
 several points on a circle of latitude are sought then use
-GeographicLib::GravityModel::Circle to return a
-GeographicLib::GravityCircle object whose member functions performs the
+GravityModel::Circle to return a
+GravityCircle object whose member functions performs the
 calculations efficiently.  (This is particularly important for high
 degree models such as EGM2008.)  These classes requires installation of
 data files for the various gravity models; see \ref gravityinst for
 details.
 
-GeographicLib::MagneticModel evaluates the earth's magnetic field using
+MagneticModel evaluates the earth's magnetic field using
 a particular magnetic model.  The field is provided by the operator()
 member function.  <a href="MagneticField.1.html">MagneticField</a> is a
 simple command line utility to provide access to this class.  If the
 field several points on a circle of latitude are sought then use
-GeographicLib::MagneticModel::Circle to return a
-GeographicLib::MagneticCircle object whose operator() member function
+MagneticModel::Circle to return a
+MagneticCircle object whose operator() member function
 performs the calculation efficiently.  (This is particularly important
 for high degree models such as emm2010.)  These classes requires
 installation of data files for the various magnetic models; see \ref
 magneticinst for details.
 
-GeographicLib::Constants, GeographicLib::Math, GeographicLib::Utility,
-GeographicLib::DMS, are general utility class which are used
-internally by the library; in addition GeographicLib::EllipticFunction
-is used by GeographicLib::TransverseMercatorExact,
-GeographicLib::Ellipsoid, and GeographicLib::GeodesicExact, and
-GeographicLib::GeodesicLineExact; GeographicLib::Accumulator is used
-by GeographicLib::PolygonArea, and GeographicLib::SphericalEngine,
-GeographicLib::CircularEngine, GeographicLib::SphericalHarmonic,
-GeographicLib::SphericalHarmonic1, and
-GeographicLib::SphericalHarmonic2 facilitate the summation of
+Constants, Math, Utility,
+DMS, are general utility class which are used
+internally by the library; in addition EllipticFunction
+is used by TransverseMercatorExact,
+Ellipsoid, and GeodesicExact, and
+GeodesicLineExact; Accumulator is used
+by PolygonArea, and SphericalEngine,
+CircularEngine, SphericalHarmonic,
+SphericalHarmonic1, and
+SphericalHarmonic2 facilitate the summation of
 spherical harmonic series which is needed by and
-GeographicLib::MagneticModel and GeographicLib::MagneticCircle.  One
-important definition is GeographicLib::Math::real which is the type
+MagneticModel and MagneticCircle.  One
+important definition is Math::real which is the type
 used for real numbers.  This allows the library to be easily switched
 to using floats, doubles, or long doubles.  However all the testing
 has been with real set to double and the library should be installed
 in this way.
 
-In general, the constructors for the classes in %GeographicLib check
-their arguments and throw GeographicLib::GeographicErr exceptions with a
+In general, the constructors for the classes in GeographicLib check
+their arguments and throw GeographicErr exceptions with a
 explanatory message if these are illegal.  The member functions, e.g.,
 the projections implemented by TransverseMercator and
 PolarStereographic, the solutions to the geodesic problem, etc.,
 typically do <i>not</i> check their arguments; the calling program
 should ensure that the arguments are legitimate.  However, the functions
 implemented by UTMUPS, MGRS, and GeoCoords do check their arguments and
-may throw GeographicLib::GeographicErr exceptions.  Similarly Geoid may
+may throw GeographicErr exceptions.  Similarly Geoid may
 throw exceptions on file errors.  If a function does throw an exception,
 then the function arguments used for return values will not have been
 altered.
 
-%GeographicLib attempts to act sensibly with NaNs.  NaNs in constructors
+GeographicLib attempts to act sensibly with NaNs.  NaNs in constructors
 typically throw errors (an exception is GeodesicLine).  However, calling
 the class functions with NaNs as arguments is not an error; NaNs are
 returned as appropriate.  "INV" is treated as an invalid zone
@@ -1094,7 +1111,7 @@ they can be easily plotted in Matlab.
 A note about portability.  For the most part, the code uses standard C++
 and should be able to be deployed on any system with a modern C++
 compiler.  System dependencies come into
- - GeographicLib::Math -- GeographicLib needs to define functions such
+ - Math -- GeographicLib needs to define functions such
    as atanh for systems that lack them.  The system dependence will
    disappear with the adoption of C++11 because the needed functions are
    part of that standard.
@@ -1102,27 +1119,32 @@ compiler.  System dependencies come into
    which lack this data type the cmake and autoconf configuration
    methods should detect its absence and omit the code that depends on
    it.
- - GeographicLib::Geoid, GeographicLib::GravityModel, and
-   GeographicLib::MagneticModel -- these class uses system-dependent
+ - Geoid, GravityModel, and
+   MagneticModel -- these class uses system-dependent
    default paths for looking up the respective datasets.  It also relies
    on getenv to find the value of the environment variables.
- - GeographicLib::Utility::readarray reads numerical data from binary
+ - Utility::readarray reads numerical data from binary
    files.  This assumes that floating point numbers are in IEEE format.
    It attempts to handled the "endianness" of the target platform using
-   the WORDS_BIGENDIAN macro (which sets the compile-time constant
-   GeographicLib::Math::bigendian).
-
-An attempt is made to maintain backward compatibility with
-%GeographicLib (especially at the level of your source code).  Sometimes
-it's necessary to take actions that depend on what version of
-%GeographicLib is being used; for example, you may want to use a new
-feature of %GeographicLib, but want your code still to work with older
-versions.  In that case, you can test the values of the macros
-GEOGRAPHICLIB_VERSION_MAJOR, GEOGRAPHICLIB_VERSION_MINOR, and
-GEOGRAPHICLIB_VERSION_PATCH; these expand to numbers (and the last one
-is usually 0); these macros appeared starting in version 1.31.  There's
-also a macro GEOGRAPHICLIB_VERSION_STRING which expands to, e.g.,
-"1.35"; this macro has been defined since version 1.9.
+   the GEOGRAPHICLIB_WORDS_BIGENDIAN macro (which sets the compile-time
+   constant Math::bigendian).
+
+An attempt is made to maintain backward compatibility with GeographicLib
+(especially at the level of your source code).  Sometimes it's necessary
+to take actions that depend on what version of GeographicLib is being
+used; for example, you may want to use a new feature of GeographicLib,
+but want your code still to work with older versions.  In that case, you
+can test the values of the macros GEOGRAPHICLIB_VERSION_MAJOR,
+GEOGRAPHICLIB_VERSION_MINOR, and GEOGRAPHICLIB_VERSION_PATCH; these
+expand to numbers (and the last one is usually 0); these macros appeared
+starting in version 1.31.  There's also a macro
+GEOGRAPHICLIB_VERSION_STRING which expands to, e.g., "1.37"; this macro
+has been defined since version 1.9.  Since version 1.37, there's also
+been a macro GEOGRAPHICLIB_VERSION which encode the vesion as a single
+number, e.g, 1003700.  The macro GEOGRAPHICLIB_VERSION_NUM allows you to
+compare versions, e.g., \code
+#if GEOGRAPHICLIB_VERSION >= GEOGRAPHICLIB_VERSION_NUM(1,36,0)
+... \endcode
 
 <center>
 Back to \ref utilities.  Forward to \ref other.  Up to \ref contents.
@@ -1135,7 +1157,7 @@ Back to \ref utilities.  Forward to \ref other.  Up to \ref contents.
 Back to \ref organization.  Forward to \ref geoid.  Up to \ref contents.
 </center>
 
-Implementations of subsets of %GeographicLib are available in other languages
+Implementations of subsets of GeographicLib are available in other languages
 - \ref c-fortran
 - \ref java.
 - \ref javascript.
@@ -1147,12 +1169,12 @@ Implementations of subsets of %GeographicLib are available in other languages
 \section c-fortran C and Fortran implementation
 
 The directories <code>legacy/C</code> and <code>legacy/Fortran</code>
-contain implementations of GeographicLib::Geodesic,
-GeographicLib::GeodesicLine, and GeographicLib::PolygonArea in C and
+contain implementations of Geodesic,
+GeodesicLine, and PolygonArea in C and
 Fortran respectively.  These are intended for use in old codes written
 in these languages and should work any reasonably modern compiler.
 These implementations are entirely self-contained and do not depend on
-the rest of %GeographicLib.  Sample main programs to solve the direct
+the rest of GeographicLib.  Sample main programs to solve the direct
 and inverse geodesic problems and to compute polygonal areas are
 provided.
 
@@ -1163,9 +1185,9 @@ For documentation, see
 \section java Java implementation
 
 The directory <code>java</code> contains implementations of
-GeographicLib::Geodesic, GeographicLib::GeodesicLine, and
-GeographicLib::PolygonArea in Java.  This implementation is entirely
-self-contained and does not depend on the rest of %GeographicLib.
+Geodesic, GeodesicLine, and
+PolygonArea in Java.  This implementation is entirely
+self-contained and does not depend on the rest of GeographicLib.
 Sample main programs to solve the direct and inverse geodesic problems
 and to compute polygonal areas are provided.
 
@@ -1175,12 +1197,12 @@ For documentation, see
 \section javascript JavaScript implementation
 
 The directory doc/scripts/GeographicLib contains the classes
-- GeographicLib::Math
-- GeographicLib::Accumulator
-- GeographicLib::Geodesic
-- GeographicLib::GeodesicLine
-- GeographicLib::PolygonArea
-- GeographicLib::DMS
+- Math
+- Accumulator
+- Geodesic
+- GeodesicLine
+- PolygonArea
+- DMS
 .
 translated into JavaScript.  See Interface.js for a simple JavaScript
 interface to these routines (documented near the top of the file).
@@ -1206,14 +1228,14 @@ are provided in the python/geographiclib directory (which is installed
 as PREFIX/lib/python/site-packages/geographiclib, if
 COMMON_INSTALL_PATH is ON, and as PREFIX/python/geographiclib,
 otherwise).  This contains implementations of the classes
-- GeographicLib::Math
-- GeographicLib::Accumulator
-- GeographicLib::Geodesic
-- GeographicLib::GeodesicLine
-- GeographicLib::PolygonArea
+- Math
+- Accumulator
+- Geodesic
+- GeodesicLine
+- PolygonArea
 .
 You can also download the python interface independent of the rest of
-%GeographicLib from
+GeographicLib from
 - <a href="http://pypi.python.org/pypi/geographiclib">
   http://pypi.python.org/pypi/geographiclib</a>
 .
@@ -1274,7 +1296,7 @@ The <code>matlab</code> directory contains
  - Native Matlab implementations of the geodesic routines.  To use
    these, start Matlab or Octave and run one of (for example) \verbatim
    addpath /usr/local/libexec/GeographicLib/matlab
-   addpath 'C:/pkg-vc10-x64/GeographicLib-1.35/libexec/GeographicLib/matlab'
+   addpath 'C:/pkg-vc10-x64/GeographicLib-1.37/libexec/GeographicLib/matlab'
    \endverbatim
    The available functions are:
    - geoddoc: briefly descibe the routines
@@ -1306,7 +1328,7 @@ The <code>matlab</code> directory contains
      http://www.mathworks.com/matlabcentral/fileexchange/39366</a>
    .
    (This requires that the previous package also be installed.)
- - Interface code so that some %GeographicLib classes can be accessed
+ - Interface code so that some GeographicLib classes can be accessed
    from Matlab or Octave.  The rest of this section describes how to
    compile and use these interfaces.
 
@@ -1314,7 +1336,7 @@ There are two ways of compiling the interface code: (1) using cmake and
 (2) invoking the compiler from Matlab.
  - <b>Using cmake:</b> Before running cmake, configure MATLAB on
    Windows to use the same compiler that you're going to use for compiling
-   %GeographicLib.  For example \verbatim
+   GeographicLib.  For example \verbatim
    mex.bat -setup
 
    Please choose your compiler for building MEX-files:
@@ -1335,7 +1357,7 @@ There are two ways of compiling the interface code: (1) using cmake and
    (Note that only the Release configuration is supported for Matlab.)
    If you are running a 64-bit version of Matlab, be sure to select a
    64-bit generator with cmake, e.g., "Visual Studio 10 Win64".  Finally
-   compile %GeographicLib with Visual Studio.  (The binary installer for
+   compile GeographicLib with Visual Studio.  (The binary installer for
    64-bit Windows includes the compiled interface built with Visual
    Studio 10 and Matlab R2013a 64-bit).<br>
    On Linux systems, you can compile the interface for use with octave
@@ -1345,46 +1367,46 @@ There are two ways of compiling the interface code: (1) using cmake and
  - <b>Invoking the compiler from Matlab or Octave:</b> Start Matlab or
    Octave and run, e.g., \code
    mex -setup
-   cd 'C:/pkg-vc10-x64/GeographicLib-1.35/matlab'
+   cd 'C:/pkg-vc10-x64/GeographicLib-1.37/matlab'
    help geographiclibinterface
-   geographiclibinterface('C:/pkg-vc10/GeographicLib-1.35');
+   geographiclibinterface('C:/pkg-vc10/GeographicLib-1.37');
    addpath(pwd);
    \endcode
    The first command allows you to select the compiler to use (which
-   should be the same as that used to compile %GeographicLib).
+   should be the same as that used to compile GeographicLib).
 
-To use the interface routines for %GeographicLib, run one of (for
+To use the interface routines for GeographicLib, run one of (for
 example) \verbatim
   addpath /usr/local/libexec/GeographicLib/matlab
-  addpath 'C:/pkg-vc10-x64/GeographicLib-1.35/libexec/GeographicLib/matlab'
+  addpath 'C:/pkg-vc10-x64/GeographicLib-1.37/libexec/GeographicLib/matlab'
 \endverbatim
 in Octave or Matlab.  The available functions are:
  - geodesicdirect: solve direct geodesic problem
-   (see GeographicLib::Geodesic::Direct)
+   (see Geodesic::Direct)
  - geodesicinverse: solve inverse geodesic problem
-   (see GeographicLib::Geodesic::Inverse)
+   (see Geodesic::Inverse)
  - geodesicline: compute points along a geodesic
-   (see GeographicLib::GeodesicLine::Position)
+   (see GeodesicLine::Position)
  - polygonarea: compute area of a geodesic polygon
-   (see GeographicLib::PolygonArea)
+   (see PolygonArea)
  - utmupsforward: convert geographic coordinates to UTM/UPS
-   (see GeographicLib::UTMUPS::Forward)
+   (see UTMUPS::Forward)
  - utmupsreverse: convert UTM/UPS coordinates to geographic
-   (see GeographicLib::UTMUPS::Reverse)
+   (see UTMUPS::Reverse)
  - mgrsforward: convert UTM/UPS coordinates to MGRS
-   (see GeographicLib::MGRS::Forward)
+   (see MGRS::Forward)
  - mgrsreverse: convert MGRS coordinates to UTM/UPS
-   (see GeographicLib::MGRS::Reverse)
+   (see MGRS::Reverse)
  - geoidheight: compute geoid height
-   (see GeographicLib::Geoid::operator()())
+   (see Geoid::operator()())
  - geocentricforward: convert geographic coordinates to geocentric
-   (see GeographicLib::Geocentric::Forward)
+   (see Geocentric::Forward)
  - geocentricreverse: convert geocentric coordinates to geographic
-   (see GeographicLib::Geocentric::Reverse)
+   (see Geocentric::Reverse)
  - localcartesianforward: convert geographic coordinates to local cartesian
-   (see GeographicLib::LocalCartesian::Forward)
+   (see LocalCartesian::Forward)
  - localcartesianreverse: convert local cartesian coordinates to geographic
-   (see GeographicLib::LocalCartesian::Reverse)
+   (see LocalCartesian::Reverse)
  .
 These routines just offer a simple interface to the corresponding C++
 class.  Use the help function to get documentation, e.g., \code
@@ -1403,8 +1425,8 @@ Visual Studio 2010.)
 
 Maxima is a free computer algebra system which can be downloaded from
 http://maxima.sf.net.  Maxima was used to generate the series used by
-GeographicLib::TransverseMercator (<a href="tmseries.mac">
-tmseries.mac</a>) and GeographicLib::Geodesic (<a href="geod.mac">
+TransverseMercator (<a href="tmseries.mac">
+tmseries.mac</a>) and Geodesic (<a href="geod.mac">
 geod.mac</a>) and to generate accurate data for testing
 (<a href="tm.mac"> tm.mac</a> and <a href="geodesic.mac">
 geodesic.mac</a>).  The latter uses Maxima's bigfloat arithmetic
@@ -1415,7 +1437,7 @@ contain brief instructions on how to use them.
 \section dotnet .NET wrapper
 
 This is a comprehensive wrapper library, written and maintained by Scott
-Heiman, which exposes all of the functionality of %GeographicLib to the
+Heiman, which exposes all of the functionality of GeographicLib to the
 .NET family of languages.  For documentation, see
  - <a href="NET/index.html">NETGeographicLib .NET wrapper library</a>.
 
@@ -1431,7 +1453,7 @@ Back to \ref other.  Forward to \ref gravity.  Up to \ref contents.
 </center>
 
 The gravitational equipotential surface approximately coinciding with
-mean sea level is called the geoid.  The GeographicLib::Geoid class and
+mean sea level is called the geoid.  The Geoid class and
 the <a href="GeoidEval.1.html">GeoidEval</a> utility evaluate the height
 of the geoid above the WGS84 ellipsoid.  This can be used to convert
 heights above mean sea level to heights above the WGS84 ellipsoid.
@@ -1449,21 +1471,21 @@ The models published by the NGA are:
 - <b>EGM2008</b>:
   http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008
 .
-GeographicLib::Geoid offers a uniform way to handle all 3 geoids at a
+Geoid offers a uniform way to handle all 3 geoids at a
 variety of grid resolutions.  (In contrast, the software tools that NGA
 offers are different for each geoid, and the interpolation programs are
 different for each grid resolution.  In addition these tools are written
 in Fortran with is nowadays difficult to integrate with other software.)
 
-Unlike other components of %GeographicLib, there is a appreciable error
+Unlike other components of GeographicLib, there is a appreciable error
 in the results obtained (at best, the RMS error is 1 mm).  However the
 class provides methods to report the maximum and RMS errors in the
 results.  The class also returns the gradient of the geoid.  This can be
 used to estimate the direction of a plumb line relative to the WGS84
 ellipsoid.
 
-The GeographicLib::GravityModel class calculates geoid heights using the
-underlying gravity model.  This is slower then GeographicLib::Geoid but
+The GravityModel class calculates geoid heights using the
+underlying gravity model.  This is slower then Geoid but
 considerably more accurate.  This class also can accurately compute all
 the components of the acceleration due to gravity (and hence the
 direction of plumb line).
@@ -1595,12 +1617,12 @@ EGM2008.  These data files are available for download:
 </center>
 The "size" column is the size of the uncompressed data and it also
 gives the memory requirements for caching the entire dataset using the
-GeographicLib::Geoid::CacheAll method.
+Geoid::CacheAll method.
 At a minimum you should install egm96-5 and either egm2008-1 or
 egm2008-2_5.  Many applications use the EGM96 geoid, however the use of
 EGM2008 is growing. (EGM84 is rarely used now.)
 
-For Linux and Unix systems, %GeographicLib provides a shell script
+For Linux and Unix systems, GeographicLib provides a shell script
 geographiclib-get-geoids (typically installed in /usr/local/sbin) which
 automates the process of downloading and installing the geoid data.  For
 example
@@ -1614,9 +1636,8 @@ installation directory, which is typically
 flag), and the data will then be placed in the "geoids" subdirectory.
 
 Windows users should download and run the Windows installers.  These
-will prompt for an installation directory with the default being one of
+will prompt for an installation directory with the default being
 \verbatim
-   C:/Documents and Settings/All Users/Application Data/GeographicLib
    C:/ProgramData/GeographicLib
 \endverbatim
 (which you probably should not change) and the data is installed in the
@@ -1636,26 +1657,25 @@ run, for example
 and, again, the data will be placed in the "geoids" subdirectory.
 
 However you install the geoid data, all the datasets should
-be installed in the same directory.  GeographicLib::Geoid and
+be installed in the same directory.  Geoid and
 <a href="GeoidEval.1.html">GeoidEval</a> uses a compile time default to
 locate the datasets.  This is
 - /usr/local/share/GeographicLib/geoids, for non-Windows systems
-- C:/Documents and Settings/All Users/Application Data/GeographicLib/geoids,
-  for Windows systems
+- C:/ProgramData/GeographicLib/geoids, for Windows systems
 .
 consistent with the examples above.  This may be overridden at run-time
-by defining the GEOID_PATH or the GEOGRAPHICLIB_DATA environment variables;
-see GeographicLib::Geoid::DefaultGeoidPath() for details.  Finally, the
-path may be set using the optional second argument to the
-GeographicLib::Geoid constructor or with the "-d" flag to
-<a href="GeoidEval.1.html">GeoidEval</a>.  Supplying the "-h" flag to
+by defining the GEOGRAPHICLIB_GEOID_PATH or the GEOGRAPHICLIB_DATA
+environment variables; see Geoid::DefaultGeoidPath() for
+details.  Finally, the path may be set using the optional second
+argument to the Geoid constructor or with the "-d" flag
+to <a href="GeoidEval.1.html">GeoidEval</a>.  Supplying the "-h" flag to
 <a href="GeoidEval.1.html">GeoidEval</a> reports the default geoid path
 for that utility.  The "-v" flag causes GeoidEval to report the full
 path name of the data file it uses.
 
 \section geoidformat The format of the geoid data files
 
-The gridded data used by the GeographicLib::Geoid class is stored in
+The gridded data used by the Geoid class is stored in
 16-bit PGM files.  Thus the data for egm96-5 might be stored in the file
 - /usr/local/share/GeographicLib/geoids/egm96-5.pgm
 .
@@ -1669,7 +1689,7 @@ PGM simple graphic format with the following properties
 - it is sufficiently simple that it can be easily read without using the
   <a href="http://netpbm.sf.net/doc/libnetpbm.html">libnetpbm</a>
   library (and thus we avoid adding a software dependency to
-  %GeographicLib).
+  GeographicLib).
 .
 The major drawback of this format is that since there are only 65535
 possible pixel values, the height must be quantized to 3 mm.  However,
@@ -1696,15 +1716,15 @@ conversion from pixel value to height (in meters) using \e height =
 \e offset + \e scale \e pixel.  The Geoid constructor also reads the
 Description, DateTime, and error lines (if present) and stores the
 resulting data so that it can be returned by
-GeographicLib::Geoid::Description, GeographicLib::Geoid::DateTime,
-GeographicLib::Geoid::MaxError, and GeographicLib::Geoid::RMSError
+Geoid::Description, Geoid::DateTime,
+Geoid::MaxError, and Geoid::RMSError
 methods.  The other lines serve as additional documentation but are not
 used by this class.  Accompanying egm96-5.pgm (and similarly with the
 other geoid data files) are two files egm96-5.wld and
 egm96-5.pgm.aux.xml.  The first is an ESRI "world" file and the second
 supplies complete projection metadata for use by
 <a href="http://www.gdal.org">GDAL</a>.  Neither of these files is read
-by GeographicLib::Geoid.
+by Geoid.
 
 You can use gdal_translate to convert the data files to a standard
 GeoTiff, e.g., with
@@ -1761,22 +1781,22 @@ The resulting files sizes are
     egm2008-2_5    75 MB    28 MB
     egm2008-1     470 MB    97 MB
 \endverbatim
-Currently, there are no plans for %GeographicLib to support this
+Currently, there are no plans for GeographicLib to support this
 compressed format.
 
 \section geoidinterp Interpolating the geoid data
 
-GeographicLib::Geoid evaluates the geoid height using bilinear or cubic
+Geoid evaluates the geoid height using bilinear or cubic
 interpolation.  The gradient of the geoid height is obtained by
 differentiating the interpolated height and referencing the result to
 distance on the WGS84 ellipsoid.
 
-<b>WARNING</b>: Although GeographicLib::Geoid computes the gradient of
+<b>WARNING</b>: Although Geoid computes the gradient of
 the geoid height, this is subject to large quantization errors as a
 result of the way that the geoid data is stored.  This is particularly
 acute for fine grids, at high latitudes, and for the easterly gradient.
 If you need to compute the direction of the acceleration due to gravity
-accurately, you should use GeographicLib::GravityModel::Gravity.
+accurately, you should use GravityModel::Gravity.
 
 The bilinear interpolation is based on the values at the 4 corners of
 the enclosing cell.  The interpolated height is a continuous function of
@@ -1801,7 +1821,7 @@ quantization errors on average.
 
 The algorithm for the least squares fit is taken from, F. H. Lesh,
 Multi-dimensional least-squares polynomial curve fitting, CACM 2, 29-30
-(1959).  This algorithm is not part of GeographicLib::Geoid; instead it is
+(1959).  This algorithm is not part of Geoid; instead it is
 implemented as
 <a href="http://en.wikipedia.org/wiki/Maxima_(software)">Maxima</a>
 code which is used to precompute the matrices to convert the function
@@ -1860,8 +1880,8 @@ EGM2008 is about 0.5 m.  The RMS difference between EGM84 and EGM96 is
 about 1.5 m.)
 
 The errors in the table above include the quantization errors that arise
-because the height data that GeographicLib::Geoid uses are quantized to
-3 mm.  If, instead, GeographicLib::Geoid were to use data files without
+because the height data that Geoid uses are quantized to
+3 mm.  If, instead, Geoid were to use data files without
 such quantization artifacts, the overall error would be reduced <i>but
 only modestly</i> as shown in the following table, where only the
 changed rows are included and where the changed entries are given in
@@ -1916,8 +1936,8 @@ followed.
 
 If a large quantity of geoid calculations are needed, the calculation
 can be sped up by preloading the data for a rectangular block with
-GeographicLib::Geoid::CacheArea or the entire dataset with
-GeographicLib::Geoid::CacheAll.  If the requested points lie within the
+Geoid::CacheArea or the entire dataset with
+Geoid::CacheAll.  If the requested points lie within the
 cached area, the cached data values are used; otherwise the data is read
 from disk as before.  Caching all the data is a reasonable choice for
 the 5' grids and coarser.  Caching all the data for the 1' grid will
@@ -1930,7 +1950,7 @@ safe; i.e., a single instantiation cannot be safely used by multiple
 threads.  If multiple threads need to calculate geoid heights, there are
 two alternatives:
  - they should all construct thread-local instantiations.
- - GeographicLib::Geoid should be constructed with \e threadsafe = true.
+ - Geoid should be constructed with \e threadsafe = true.
    This causes all the data to be read at the time of construction (and
    if this fails, an exception is thrown), the data file to be closed
    and the single-cell caching to be turned off.  The resulting object
@@ -1974,9 +1994,9 @@ Back to \ref other.  Forward to \ref gravity.  Up to \ref contents.
 Back to \ref geoid.  Forward to \ref magnetic.  Up to \ref contents.
 </center>
 
-%GeographicLib can compute the earth's gravitational field with an
-earth gravity model using the GeographicLib::GravityModel and
-GeographicLib::GravityCircle classes and with the
+GeographicLib can compute the earth's gravitational field with an
+earth gravity model using the GravityModel and
+GravityCircle classes and with the
 <a href="Gravity.1.html">Gravity</a> utility.  These models expand the
 gravitational potential of the earth as sum of spherical harmonics.  The
 models also specify a reference ellipsoid, relative to which geoid
@@ -1995,8 +2015,14 @@ The supported models are
  - <b>wgs84</b>, the
    <a href="http://earth-info.nga.mil/GandG/publications/tr8350.2/tr8350_2.html">
    WGS84 Reference Ellipsoid</a>.  This is just reproduces the normal
-   gravitational field for the reference ellipsoid.  Usually
-   GeographicLib::NormalGravity::WGS84 should be used instead.
+   gravitational field for the reference ellipsoid.  This includes the
+   zonal coefficients up to order 20.  Usually NormalGravity::WGS84()
+   should be used instead.
+ - <b>grs80</b>, the
+   GRS80 Reference Ellipsoid.  This is just reproduces the normal
+   gravitational field for the GRS80 ellipsoid.  This includes the
+   zonal coefficients up to order 20.  Usually NormalGravity::GRS80()
+   should be used instead.
 
 See
  - W. A. Heiskanen and H. Moritz, Physical Geodesy (Freeman, San
@@ -2088,7 +2114,7 @@ These gravity models are available for download:
 </center>
 The "size" column is the size of the uncompressed data.
 
-For Linux and Unix systems, %GeographicLib provides a shell script
+For Linux and Unix systems, GeographicLib provides a shell script
 geographiclib-get-gravity (typically installed in /usr/local/sbin)
 which automates the process of downloading and installing the gravity
 models.  For example
@@ -2102,9 +2128,8 @@ installation directory, which is typically
 flag), and the data will then be placed in the "gravity" subdirectory.
 
 Windows users should download and run the Windows installers.  These
-will prompt for an installation directory with the default being one of
+will prompt for an installation directory with the default being
 \verbatim
-   C:/Documents and Settings/All Users/Application Data/GeographicLib
    C:/ProgramData/GeographicLib
 \endverbatim
 (which you probably should not change) and the data is installed in the
@@ -2122,19 +2147,18 @@ have the same contents).  To unpack these, run, for example
 and, again, the data will be placed in the "gravity" subdirectory.
 
 However you install the gravity models, all the datasets should be
-installed in the same directory.  GeographicLib::GravityModel and
+installed in the same directory.  GravityModel and
 <a href="Gravity.1.html">Gravity</a> uses a compile time default to
 locate the datasets.  This is
 - /usr/local/share/GeographicLib/gravity, for non-Windows systems
-- C:/Documents and Settings/All Users/Application Data/GeographicLib/gravity,
-  for Windows systems
+- C:/ProgramData/GeographicLib/gravity, for Windows systems
 .
 consistent with the examples above.  This may be overridden at run-time
-by defining the GRAVITY_PATH or the GEOGRAPHICLIB_DATA environment
-variables; see GeographicLib::GravityModel::DefaultGravityPath() for
-details.  Finally, the path may be set using the optional second
-argument to the GeographicLib::GravityModel constructor or with the "-d"
-flag to
+by defining the GEOGRAPHICLIB_GRAVITY_PATH or the GEOGRAPHICLIB_DATA
+environment variables; see
+GravityModel::DefaultGravityPath() for details.  Finally,
+the path may be set using the optional second argument to the
+GravityModel constructor or with the "-d" flag to
 <a href="Gravity.1.html">Gravity</a>.  Supplying the "-h" flag to
 <a href="Gravity.1.html">Gravity</a> reports the default path for
 gravity models for that utility.  The "-v" flag causes Gravity to report
@@ -2142,7 +2166,7 @@ the full path name of the data file it uses.
 
 \section gravityformat The format of the gravity model files
 
-The constructor for GeographicLib::GravityModel reads a file called
+The constructor for GravityModel reads a file called
 NAME.egm which specifies various properties for the gravity model.  It
 then opens a binary file NAME.egm.cof to obtain the coefficients of the
 spherical harmonic sum.
@@ -2156,7 +2180,7 @@ everything after it are discarded.  If the result is just white space it
 is discarded.  The remaining lines are of the form "KEY WHITESPACE
 VALUE".  In general, the KEY and the VALUE are case-sensitive.
 
-GeographicLib::GravityModel only pays attention to the following
+GravityModel only pays attention to the following
 keywords
  - keywords that affect the field calculation, namely:
    - <b>ModelRadius</b> (required), the normalizing radius for the model
@@ -2220,11 +2244,11 @@ for each set of coefficients is:
    This must satisfy \e N ≥ −1.
  - \e M, the maximum order of the sum stored as a 4-byte signed integer.
    This must satisfy \e N ≥ \e M ≥ −1.
- - \e C<sub>\e nm</sub>, the coefficients of the cosine coefficients of
-   the sum in column (i.e., \e m) major order.  There are (\e M + 1)
-   (2\e N - \e M + 2) / 2 elements which are stored as IEEE doubles (8
-   bytes).  For example for \e N = \e M = 3, there are 10 coefficients
-   arranged as
+ - <i>C</i><sub><i>nm</i></sub>, the coefficients of the cosine
+   coefficients of the sum in column (i.e., \e m) major order.  There
+   are (\e M + 1) (2\e N - \e M + 2) / 2 elements which are stored as
+   IEEE doubles (8 bytes).  For example for \e N = \e M = 3, there are
+   10 coefficients arranged as
    <i>C</i><sub>00</sub>,
    <i>C</i><sub>10</sub>,
    <i>C</i><sub>20</sub>,
@@ -2235,11 +2259,11 @@ for each set of coefficients is:
    <i>C</i><sub>22</sub>,
    <i>C</i><sub>32</sub>,
    <i>C</i><sub>33</sub>.
- - \e S<sub>\e nm</sub>, the coefficients of the sine coefficients of
-   the sum in column (i.e., \e m) major order starting at \e m = 1.
-   There are \e M (2\e N - \e M + 1) / 2 elements which are stored as
-   IEEE doubles (8 bytes).  For example for \e N = \e M = 3, there are 6
-   coefficients arranged as
+ - <i>S</i><sub><i>nm</i></sub>, the coefficients of the sine
+   coefficients of the sum in column (i.e., \e m) major order starting
+   at \e m = 1.  There are \e M (2\e N - \e M + 1) / 2 elements which
+   are stored as IEEE doubles (8 bytes).  For example for \e N = \e M =
+   3, there are 6 coefficients arranged as
    <i>S</i><sub>11</sub>,
    <i>S</i><sub>21</sub>,
    <i>S</i><sub>31</sub>,
@@ -2247,7 +2271,7 @@ for each set of coefficients is:
    <i>S</i><sub>32</sub>,
    <i>S</i><sub>33</sub>.
  .
-Although the coefficient file is in little endian order, %GeographicLib
+Although the coefficient file is in little endian order, GeographicLib
 can read it on big endian machines.  It can only be read on machines
 which store doubles in IEEE format.
 
@@ -2278,9 +2302,13 @@ HeightOffset    -0.41
 ID              EGM2008A
 \endverbatim
 
+The code to produce the coefficient files for the wgs84 and grs80 models
+is
+\include make-egmcof.cpp
+
 \section gravitynga Comments on the NGA harmonic synthesis code
 
-GeographicLib::GravityModel attempts to reproduce the results of NGA's
+GravityModel attempts to reproduce the results of NGA's
 harmonic synthesis code for EGM2008, hsynth_WGS84.f.  Listed here are
 issues that I encountered using the NGA code:
  -# A compiler which allocates local variables on the stack produces an
@@ -2300,9 +2328,9 @@ issues that I encountered using the NGA code:
     \e h = 400 km).
  -# There are several expressions which will return inaccurate results
     due to cancellation.  For example, subroutine <code>grs</code>
-    computes the flattening using \e f = 1 - sqrt(1 -
+    computes the flattening using \e f = 1 − sqrt(1 −
     <i>e</i><sup>2</sup>).  Much better is to use \e f =
-    <i>e</i><sup>2</sup>/(1 + sqrt(1 - <i>e</i><sup>2</sup>)).  The
+    <i>e</i><sup>2</sup>/(1 + sqrt(1 − <i>e</i><sup>2</sup>)).  The
     expressions for \e q and \e q' in <code>grs</code> and
     <code>radgrav</code> suffer from similar problems.  The resulting
     errors are tiny (about 50 pm in the geoid height); however, given
@@ -2310,27 +2338,27 @@ issues that I encountered using the NGA code:
     expressions, it's preferable to do so.
  -# hsynth_WGS84 returns an "undefined" value for \e xi and \e eta at the
     poles.  Better would be to return the value obtained by taking the
-    limit \e lat -> +/- 90°.
+    limit \e lat → ± 90°.
  .
 Issues 1--4 have been reported to the authors of hsynth_WGS84.
 Issue 1 is peculiar to Fortran and is not encountered in C++ code and
-GeographicLib::GravityModel corrects issues 3--5.  On issue 2,
-GeographicLib::GravityModel neglects the 1/\e r term in \e T in
-GeographicLib::GravityModel::GeoidHeight and
-GeographicLib::GravityModel::SphericalAnomaly in order to produce
+GravityModel corrects issues 3--5.  On issue 2,
+GravityModel neglects the 1/\e r term in \e T in
+GravityModel::GeoidHeight and
+GravityModel::SphericalAnomaly in order to produce
 results which match NGA's for these quantities.  On the other hand,
-GeographicLib::GravityModel::Disturbance and
-GeographicLib::GravityModel::T <i>do</i> include this term.
+GravityModel::Disturbance and
+GravityModel::T <i>do</i> include this term.
 
 \section gravitygeoid Details of the geoid height and anomaly calculations
 
 Ideally, the geoid represents a surface of constant gravitational
 potential which approximates mean sea level.  In reality some
 approximations are taken in determining this surface.  The steps taking
-by GeographicLib::GravityModel in computing the geoid height are
+by GravityModel in computing the geoid height are
 described here (in the context of EGM2008).  This mimics NGA's code
 hsynth_WGS84 closely because most users of EGM2008 use the gridded data
-generated by this code (e.g., GeographicLib::Geoid) and it is desirable
+generated by this code (e.g., Geoid) and it is desirable
 to use a consistent definition of the geoid height.
  - The model potential is band limited; the minimum wavelength that is
    represented is 360°/2160 = 10' (i.e., about 10NM or
@@ -2351,11 +2379,11 @@ to use a consistent definition of the geoid height.
    represented by a spherical harmonic sum of degree and order 2160 (and
    so it misses short wavelength terrain variations).  In addition, it
    entails estimating the isostatic equilibrium of the earth's crust.
-   The correction lies in the range [-5.05 m, 0.05 m], however for 99.9%
+   The correction lies in the range [−5.05 m, 0.05 m], however for 99.9%
    of the earth's surface the correction is less than 10 mm in
    magnitude.
  - The resulting surface lies above the observed mean sea level,
-   so -0.41m is added to the geoid height.  (Better would be to change
+   so −0.41m is added to the geoid height.  (Better would be to change
    the potential used to define the geoid; but this would only change
    the result by about 2mm.)
  .
@@ -2366,7 +2394,7 @@ There is no such thing as "The" EGM96 geoid: Subtle points on the use of
 a global geopotential model</a>, IGeS Bulletin No. 8, International
 Geoid Service, Milan, Italy, pp. 17--28 (1998).
 
-GeographicLib::GravityModel::GeoidHeight reproduces the results of the
+GravityModel::GeoidHeight reproduces the results of the
 several NGA codes for harmonic synthesis with the following maximum
 discrepancies:
  - egm84 = 1.1mm.  This is probably due to inconsistent parameters for the
@@ -2385,7 +2413,7 @@ between the points unknown <i>ab initio</i>).  Since the gravity anomaly
 is already a small quantity it is sometimes acceptable to employ
 approximations that change the quantities by \e O(\e f).  The NGA code
 uses the spherical approximation described by Heiskanen and Moritz,
-Sec. 2-14 and GeographicLib::GravityModel::SphericalAnomaly uses the
+Sec. 2-14 and GravityModel::SphericalAnomaly uses the
 same approximation for compatibility.  In this approximation, the
 gravity disturbance <b>delta</b> = <b>grad</b> \e T is calculated.
 Here, \e T once again excludes the 1/\e r term (this is issue 2 in \ref
@@ -2399,17 +2427,17 @@ example, \e deltaz is the \e radial component of <b>delta</b> (not the
 component perpendicular to the ellipsoid) and \e deltay is similarly
 slightly different from the usual northerly component.  The components
 of the anomaly are then given by
- - gravity anomaly, \e Dg01 = \e deltaz - 2<i>T</i>/\e R, where \e R
+ - gravity anomaly, \e Dg01 = \e deltaz − 2<i>T</i>/\e R, where \e R
    distance to the center of the earth;
- - northerly component of the deflection of the vertical, \e xi = -
+ - northerly component of the deflection of the vertical, \e xi = −
    <i>deltay</i>/\e gamma, where \e gamma is the magnitude of the normal
    gravity;
- - easterly component of the deflection of the vertical, \e eta = -
+ - easterly component of the deflection of the vertical, \e eta = −
    <i>deltax</i>/\e gamma.
  .
-GeographicLib::NormalGravity computes the normal gravity accurately and
+NormalGravity computes the normal gravity accurately and
 avoids issue 3 of \ref gravitynga.  Thus while
-GeographicLib::GravityModel::SphericalAnomaly reproduces the results for
+GravityModel::SphericalAnomaly reproduces the results for
 \e xi and \e eta at \e h = 0, there is a slight discrepancy if \e h is
 non-zero.
 
@@ -2444,7 +2472,7 @@ The egm2008 model includes many terms (over 2 million spherical
 harmonics).  For that reason computations using this model may be slow;
 for example it takes about 78 ms to compute the geoid height at a single
 point.  There are two ways to speed up this computation:
- - Use a GeographicLib::GravityCircle to compute the geoid height at
+ - Use a GravityCircle to compute the geoid height at
    several points on a circle of latitude.  This reduces the cost per
    point to about 92 μs (a reduction by a factor of over 800).
  - Compute the values on several circles of latitude in parallel.  One
@@ -2462,9 +2490,8 @@ the geoid height for EGM2008 on a 1' gride.  (Without these
 optimizations, the computation would have taken about 200 days!)
 \include GeoidToGTX.cpp
 
-This example, <code>examples/GeoidToGTX.cpp</code>, is built if cmake
-is configured with <code>-D GEOGRAPHICLIB_EXAMPLES=ON</code>.  cmake
-will add in support for OpenMP, if it is available.
+cmake will add in support for OpenMP for
+<code>examples/GeoidToGTX.cpp</code>, if it is available.
 
 <center>
 Back to \ref geoid.  Forward to \ref magnetic.  Up to \ref contents.
@@ -2477,14 +2504,14 @@ Back to \ref geoid.  Forward to \ref magnetic.  Up to \ref contents.
 Back to \ref gravity.  Forward to \ref geodesic.  Up to \ref contents.
 </center>
 
-%GeographicLib can compute the earth's magnetic field by a magnetic
-model using the GeographicLib::MagneticModel and
-GeographicLib::MagneticCircle classes and with the
+GeographicLib can compute the earth's magnetic field by a magnetic
+model using the MagneticModel and
+MagneticCircle classes and with the
 <a href="MagneticField.1.html">MagneticField</a> utility.  These models
 expand the internal magnetic potential of the earth as sum of spherical
 harmonics.  They neglect magnetic fields due to the ionosphere, the
 magnetosphere, nearby magnetized materials, electric machinery, etc.
-Users of GeographicLib::MagneticModel are advised to read the
+Users of MagneticModel are advised to read the
 <a href="http://www.ngdc.noaa.gov/IAGA/vmod/igrfhw.html">"Health
 Warning"</a> this is provided with igrf11.  Although the advice is
 specific to igrf11, many of the comments apply to all magnetic field
@@ -2569,7 +2596,7 @@ These magnetic models are available for download:
 </center>
 The "size" column is the size of the uncompressed data.
 
-For Linux and Unix systems, %GeographicLib provides a shell script
+For Linux and Unix systems, GeographicLib provides a shell script
 geographiclib-get-magnetic (typically installed in /usr/local/sbin)
 which automates the process of downloading and installing the magnetic
 models.  For example
@@ -2583,9 +2610,8 @@ installation directory, which is typically
 flag), and the data will then be placed in the "magnetic" subdirectory.
 
 Windows users should download and run the Windows installers.  These
-will prompt for an installation directory with the default being one of
+will prompt for an installation directory with the default being
 \verbatim
-   C:/Documents and Settings/All Users/Application Data/GeographicLib
    C:/ProgramData/GeographicLib
 \endverbatim
 (which you probably should not change) and the data is installed in the
@@ -2603,27 +2629,27 @@ have the same contents).  To unpack these, run, for example
 and, again, the data will be placed in the "magnetic" subdirectory.
 
 However you install the magnetic models, all the datasets should be
-installed in the same directory.  GeographicLib::MagneticModel and
+installed in the same directory.  MagneticModel and
 <a href="MagneticField.1.html">MagneticField</a> uses a compile time
 default to locate the datasets.  This is
 - /usr/local/share/GeographicLib/magnetic, for non-Windows systems
-- C:/Documents and Settings/All Users/Application Data/GeographicLib/magnetic,
-  for Windows systems
+- C:/ProgramData/GeographicLib/magnetic, for Windows systems
 .
 consistent with the examples above.  This may be overridden at run-time
-by defining the MAGNETIC_PATH  or the GEOGRAPHIC_DATA environment
-variables; see GeographicLib::MagneticModel::DefaultMagneticPath() for
-details.  Finally, the path may be set using the optional second
-argument to the GeographicLib::MagneticModel constructor or with the
-"-d" flag to <a href="MagneticField.1.html">MagneticField</a>.
-Supplying the "-h" flag to
+by defining the GEOGRAPHICLIB_MAGNETIC_PATH or the GEOGRAPHIC_DATA
+environment variables; see
+MagneticModel::DefaultMagneticPath() for details.
+Finally, the path may be set using the optional second argument to the
+MagneticModel constructor or with the "-d" flag to
+<a href="MagneticField.1.html">MagneticField</a>.  Supplying the "-h"
+flag to
 <a href="MagneticField.1.html">MagneticField</a> reports the default
 path for magnetic models for that utility.  The "-v" flag causes
 MagneticField to report the full path name of the data file it uses.
 
 \section magneticformat The format of the magnetic model files
 
-The constructor for GeographicLib::MagneticModel reads a file called
+The constructor for MagneticModel reads a file called
 NAME.wmm which specifies various properties for the magnetic model.  It
 then opens a binary file NAME.wmm.cof to obtain the coefficients of the
 spherical harmonic sum.
@@ -2637,7 +2663,7 @@ everything after it are discarded.  If the result is just white space it
 is discarded.  The remaining lines are of the form "KEY WHITESPACE
 VALUE".  In general, the KEY and the VALUE are case-sensitive.
 
-GeographicLib::MagneticModel only pays attention to the following
+MagneticModel only pays attention to the following
 keywords
  - keywords that affect the field calculation, namely:
    - <b>Radius</b> (required), the normalizing radius of the model in
@@ -2668,7 +2694,7 @@ keywords
    - <b>MaxHeight</b>, the maximum height above the ellipsoid for which
      the model should be used.
    .
-   GeographicLib::MagneticModel does not enforce the restrictions
+   MagneticModel does not enforce the restrictions
    implied by last four quantities.  However,
    <a href="MagneticField.1.html">MagneticField</a> issues a warning if
    these limits are exceeded.
@@ -2695,11 +2721,11 @@ is:
    This must satisfy \e N ≥ −1.
  - \e M, the maximum order of the sum stored as a 4-byte signed integer.
    This must satisfy \e N ≥ \e M ≥ −1.
- - \e C<sub>\e nm</sub>, the coefficients of the cosine coefficients of
-   the sum in column (i.e., \e m) major order.  There are (\e M + 1)
-   (2\e N − \e M + 2) / 2 elements which are stored as IEEE doubles (8
-   bytes).  For example for \e N = \e M = 3, there are 10 coefficients
-   arranged as
+ - <i>C</i><sub><i>nm</i></sub>, the coefficients of the cosine
+   coefficients of the sum in column (i.e., \e m) major order.  There
+   are (\e M + 1) (2\e N − \e M + 2) / 2 elements which are stored
+   as IEEE doubles (8 bytes).  For example for \e N = \e M = 3, there
+   are 10 coefficients arranged as
    <i>C</i><sub>00</sub>,
    <i>C</i><sub>10</sub>,
    <i>C</i><sub>20</sub>,
@@ -2710,11 +2736,11 @@ is:
    <i>C</i><sub>22</sub>,
    <i>C</i><sub>32</sub>,
    <i>C</i><sub>33</sub>.
- - \e S<sub>\e nm</sub>, the coefficients of the sine coefficients of
-   the sum in column (i.e., \e m) major order starting at \e m = 1.
-   There are \e M (2\e N − \e M + 1) / 2 elements which are stored as
-   IEEE doubles (8 bytes).  For example for \e N = \e M = 3, there are 6
-   coefficients arranged as
+ - <i>S</i><sub><i>nm</i></sub>, the coefficients of the sine
+   coefficients of the sum in column (i.e., \e m) major order starting
+   at \e m = 1.  There are \e M (2\e N − \e M + 1) / 2 elements
+   which are stored as IEEE doubles (8 bytes).  For example for \e N =
+   \e M = 3, there are 6 coefficients arranged as
    <i>S</i><sub>11</sub>,
    <i>S</i><sub>21</sub>,
    <i>S</i><sub>31</sub>,
@@ -2722,7 +2748,7 @@ is:
    <i>S</i><sub>32</sub>,
    <i>S</i><sub>33</sub>.
  .
-Although the coefficient file is in little endian order, %GeographicLib
+Although the coefficient file is in little endian order, GeographicLib
 can read it on big endian machines.  It can only be read on machines
 which store doubles in IEEE format.
 
@@ -2766,25 +2792,25 @@ Back to \ref gravity.  Forward to \ref geodesic.  Up to \ref contents.
 Back to \ref magnetic.  Forward to \ref triaxial.  Up to \ref contents.
 </center>
 
-GeographicLib::Geodesic and GeographicLib::GeodesicLine provide accurate
+Geodesic and GeodesicLine provide accurate
 solutions to the direct and inverse geodesic problems.  The
 <a href="GeodSolve.1.html">GeodSolve</a> utility provides an interface
-to these classes.  GeographicLib::AzimuthalEquidistant implements the
+to these classes.  AzimuthalEquidistant implements the
 azimuthal equidistant projection in terms of geodesics.
-GeographicLib::CassiniSoldner implements a transverse cylindrical
-equidistant projection in terms of geodesics.  The <a
-href="GeodesicProj.1.html">GeodesicProj</a> utility provides an
+CassiniSoldner implements a transverse cylindrical
+equidistant projection in terms of geodesics.  The
+<a href="GeodesicProj.1.html">GeodesicProj</a> utility provides an
 interface to these projections.
 
-The algorithms used by GeographicLib::Geodesic and
-GeographicLib::GeodesicLine are based on a Taylor expansion of the
+The algorithms used by Geodesic and
+GeodesicLine are based on a Taylor expansion of the
 geodesic integrals valid when the flattening \e f is small.
-GeographicLib::GeodesicExact and GeographicLib::GeodesicLineExact
+GeodesicExact and GeodesicLineExact
 evaluate the integrals exactly (in terms of incomplete elliptic
 integrals).  For the WGS84 ellipsoid, the series solutions are about
 2--3 times faster and 2--3 times more accurate (because it's easier to
 control round-off errors with series solutions); thus
-GeographicLib::Geodesic and GeographicLib::GeodesicLine are
+Geodesic and GeodesicLine are
 recommended for most geodetic applications.  However, in applications
 where the absolute value of \e f is greater than about 0.02, the exact
 classes should be used.
@@ -2804,7 +2830,7 @@ References
    <a href="http://dx.doi.org/10.1002/asna.201011352">The calculation
    of longitude and latitude from geodesic measurements (1825)</a>,
    Astron. Nachr. 331(8), 852-861 (2010);
-   translated by C. F. F. Karney and R. E. Deakin.  Preprint:
+   translated by C. F. F. Karney and R. E. Deakin; preprint:
    <a href="http://arxiv.org/abs/0908.1824">arXiv:0908.1824</a>.
  - F. R. Helmert,
    <a href="http://geographiclib.sf.net/geodesic-papers/helmert80-en.pdf">
@@ -2923,9 +2949,9 @@ in <a href="geodesic.mac"> geodesic.mac</a> (this depends on
 <a href="ellint.mac"> ellint.mac</a> and uses the series computed by
 <a href="geod.mac"> geod.mac</a>).  This solve both the direct and
 inverse geodesic problems and offers the ability to solve the problems
-either using series expansions (similar to GeographicLib::Geodesic) or
+either using series expansions (similar to Geodesic) or
 in terms of elliptic integrals (similar to
-GeographicLib::GeodesicExact).
+GeodesicExact).
 
 \section geodseries Expansions for geodesics
 
@@ -2939,7 +2965,7 @@ used to select any order up to 8.  (If using long doubles, with a
 order <i>f</i><sup>30</sup> are given in <a href="geodseries30.html">
 geodseries30.html</a>.
 
-In the formulas below ^ indicates exponentiation (\e f^3 =
+In the formulas below ^ indicates exponentiation (<i>f</i>^3 =
 <i>f</i><sup>3</sup>) and / indicates real division (3/5 = 0.6).  The
 equations need to be converted to Horner form, but are here left in
 expanded form so that they can be easily truncated to lower order.
@@ -3256,7 +3282,7 @@ C4[9] = + 32768/92147055 * eps^9;
 
 \section geodellip Geodesics in terms of elliptic integrals
 
-GeographicLib::GeodesicExact and GeographicLib::GeodesicLineExact solve
+GeodesicExact and GeodesicLineExact solve
 the geodesic problem using elliptic integrals.  The formulation of
 geodesic in terms of incomplete elliptic integrals is given in
  - C. F. F. Karney,
@@ -3271,7 +3297,7 @@ with an imaginary modulus.  However, the integrals themselves are real
 and the algorithms used to compute the elliptic integrals handles the
 case of an imaginary modulus using real arithmetic.
 
-The key relations used by %GeographicLib are
+The key relations used by GeographicLib are
 \f[
  \begin{aligned}
   \frac sb &= E(\sigma, ik), \\
@@ -3313,21 +3339,20 @@ integrals.  The second (equivalent) expression for \f$ \lambda \f$,
 which was given by Cayley (1870), is useful in that the elliptic
 integral is relegated to a small correction term.  This form allows
 the longitude to be computed more accurately and is used in
-%GeographicLib.  (The equivalence of the two expressions for \f$
+GeographicLib.  (The equivalence of the two expressions for \f$
 \lambda \f$ follows from http://dlmf.nist.gov/19.7.E8.)
 
-Nominally, GeographicLib::GeodesicExact and
-GeographicLib::GeodesicLineExact will give "exact" results for any value
-of the flattening.  However, the geographic latitude is a distorted
-measure of distance from the equator with very eccentric ellipsoids and
-this introducing an irreducible representational error in the algorithms
-in this case.  It is therefore recommended to restrict the use of these
-classes to \e b/\e a ∈ [0.01, 100] or \e f ∈ [-99, 0.99].
-Note that GeographicLib::GeodesicExact still uses a series expansion for
-the area \e S12.  However the series is taken out to 30th order and
-gives accurate results for \e b/\e a ∈ [1/2, 2]; the accuracy is
-about 8 decimal digits for \e b/\e a ∈ [1/4, 4].  Additional work
-planned for this aspect of the geodesic problem:
+Nominally, GeodesicExact and GeodesicLineExact will give "exact" results
+for any value of the flattening.  However, the geographic latitude is a
+distorted measure of distance from the equator with very eccentric
+ellipsoids and this introducing an irreducible representational error in
+the algorithms in this case.  It is therefore recommended to restrict
+the use of these classes to <i>b</i>/\e a ∈ [0.01, 100] or \e f
+∈ [-99, 0.99].  Note that GeodesicExact still uses a series
+expansion for the area \e S12.  However the series is taken out to 30th
+order and gives accurate results for <i>b</i>/\e a ∈ [1/2, 2]; the
+accuracy is about 8 decimal digits for <i>b</i>/\e a ∈ [1/4, 4].
+Additional work planned for this aspect of the geodesic problem:
 - formulate the area integral \e S12 in terms of elliptic integrals;
 - generate accurate test geodesics for highly eccentric ellipsoids so
   that the roundoff errors can be quantified.
@@ -3398,7 +3423,7 @@ and are linearly related by
 - \f$ u + u' = K(e) ,\quad v + v' = K(ie') \f$
 - \f$ v = \sqrt{1-e^2} u ,\quad u = \sqrt{1+e'^2} v \f$.
 .
-The cartesian coordinates for the meridian \f$ (x, y) \f$ are given by
+The cartesian coordinates for the meridian \f$ (x, z) \f$ are given by
 \f[
 \begin{aligned}
   x &= a \cos\beta = a \cos\phi / \sqrt{1 - e^2 \sin^2\phi} \\
@@ -3456,7 +3481,7 @@ There are several considerations in the choice of independent variable
 for evaluate the meridian distance
 - The use of an imaginary modulus (namely, \f$ ie' \f$, above) is of no
   practical concern.  The integrals are real in this case and modern
-  methods (%GeographicLib uses the method given in
+  methods (GeographicLib uses the method given in
   http://dlmf.nist.gov/19.36.i) for computing integrals handles this
   case using just real arithmetic.
 - If the "natural" origin is the equator, choose one of \f$ \phi, \beta,
@@ -3479,7 +3504,7 @@ for evaluate the meridian distance
   choices (see the figure below).  The choice of \f$ \phi \f$ is
   probably a poor one in this case.
 .
-%GeographicLib uses the geodesic generalization of
+GeographicLib uses the geodesic generalization of
 \f$ y = b E(\beta, ie') \f$, namely \f$ s = b E(\sigma, ik) \f$.  See
 \ref geodellip.
 
@@ -3613,7 +3638,7 @@ error once again is \f$O(f\Delta\phi^4)\f$.  This is the "Bowring
 
 \subsection auxsphere Bessel's auxiliary sphere
 
-%GeographicLib's uses the auxiliary sphere method of Legendre, Bessel,
+GeographicLib's uses the auxiliary sphere method of Legendre, Bessel,
 and Helmert.  For short geodesics, this is equivalent to picking
 \f$ R, A, K \f$ so that
 \f[
@@ -3707,10 +3732,10 @@ bounds</caption>
 
 For example, if you're only interested in measuring distances and an
 accuracy of 1 mm is sufficient, then Bowring's improved method can be
-used for distances up to 180 km.  On the other hand, %GeographicLib uses
+used for distances up to 180 km.  On the other hand, GeographicLib uses
 Bessel's auxiliary sphere and we require both the distance and the
 azimuth to be accurate, so the great circle approximation can only be
-used for distances less than 1.7 m.  The reason that %GeographicLib does
+used for distances less than 1.7 m.  The reason that GeographicLib does
 not use Bowring's method is that the information necessary for auxiliary
 sphere method is already available as part of the general solution and,
 as much as possible, we allow all geodesics to be computed by the
@@ -3724,8 +3749,7 @@ Back to \ref magnetic.  Forward to \ref triaxial.  Up to \ref contents.
 \page triaxial Geodesics on a triaxial ellipsoid
 
 <center>
-Back to \ref geodesic.  Forward to \ref transversemercator.  Up to
-\ref contents.
+Back to \ref geodesic.  Forward to \ref rhumb.  Up to \ref contents.
 </center>
 
 Jacobi (1839) showed that the problem of geodesics on a triaxial
@@ -3794,7 +3818,7 @@ Go to
     ensure that the long time behavior is correctly modeled with such an
     approach.
  -# At this point, I have no plans to add the solution of triaxial
-    geodesic problem to %GeographicLib.
+    geodesic problem to GeographicLib.
  -# If you only want to learn about geodesics on a biaxial ellipsoid (an
     ellipsoid of revolution), then see \ref geodesic or the paper
     - C. F. F. Karney,
@@ -4253,7 +4277,441 @@ The shortest path found by this method is unique unless:
    \f$\pi - \alpha_2\f$.
 
 <center>
-Back to \ref geodesic.  Forward to \ref transversemercator.  Up to
+Back to \ref geodesic.  Forward to \ref rhumb.  Up to \ref contents.
+</center>
+**********************************************************************/
+/**
+\page rhumb Rhumb lines
+
+<center>
+Back to \ref triaxial.  Forward to \ref transversemercator.  Up to
+\ref contents.
+</center>
+
+The Rhumb and RhumbLine classes together with the
+<a href="RhumbSolve.1.html">RhumbSolve</a> utility perform rhumb line
+calculations.  A rhumb line (also called a loxodrome) is a line of
+constant azimuth on the surface of the ellipsoid.  It is important for
+historical reasons because sailing with a constant compass heading is
+simpler than sailing the shorter geodesic course; see Osborne (2013).
+My interest in this problem was piqued by Botnev and Ustinov (2014) who
+discuss various techniques to improve the accuracy of rhumb line
+calculations.  The items of interest here are:
+ - Review of accurate formulas for the auxiliary latitudes.
+ - Using divided differences to compute \f$\mu_{12}/\psi_{12}\f$
+   maintaining full accuracy.  Two cases are treated:
+   - If \f$f\f$ is small, Krüger's series for the transverse
+     Mercator projection relate \f$\chi\f$ and \f$\mu\f$.
+   - For arbitrary \f$f\f$, the divided difference formula for
+     incomplete elliptic integrals of the second relates \f$\beta\f$ and
+     \f$\mu\f$.
+   .
+ - Extending Clenshaw summation to compute the divided difference of a
+   trigonometric sum.
+
+Jump to
+ - \ref rhumbform
+ - \ref rhumblat
+ - \ref divideddiffs
+ - \ref dividedclenshaw
+
+References:
+ - F. W. Bessel,
+   <a href="http://dx.doi.org/10.1002/asna.201011352">The calculation
+   of longitude and latitude from geodesic measurements (1825)</a>,
+   Astron. Nachr. 331(8), 852-861 (2010);
+   translated by C. F. F. Karney and R. E. Deakin; preprint:
+   <a href="http://arxiv.org/abs/0908.1824">arXiv:0908.1824</a>.
+ - V.A. Botnev, S.M. Ustinov,
+   <a href="http://ntv.spbstu.ru/fulltext/T3.198.2014_05.PDF">
+   Metody reshenija prjamoj i obratnoj geodezicheskih zadach s vysokoj
+   tochnost'ju</a> (Methods for direct and inverse geodesic problems
+   solving with high precision), St. Petersburg State Polytechnical
+   University Journal 3(198), 49--58 (2014).
+ - K. E. Engsager and K. Poder,
+   <a href="http://icaci.org/files/documents/ICC_proceedings/ICC2007/documents/doc/THEME 2/oral 1/2.1.2 A HIGHLY ACCURATE WORLD WIDE ALGORITHM FOR THE TRANSVE.doc">
+   A highly accurate world wide algorithm for the
+   transverse Mercator mapping (almost)</a>,
+   Proc. XXIII Intl. Cartographic Conf. (ICC2007), Moscow (2007).
+ - F. R. Helmert,
+   <a href="http://geographiclib.sf.net/geodesic-papers/helmert80-en.pdf">
+   Mathematical and Physical Theories of Higher Geodesy, Part 1 (1880)</a>,
+   Aeronautical Chart and Information Center (St. Louis, 1964),
+   Chaps. 5--7.
+ - W. M. Kahan and R. J. Fateman,
+   <a href="http://www.cs.berkeley.edu/~fateman/papers/divdiff.pdf">
+   Symbolic computation of divided differences</a>,
+   SIGSAM Bull. 33(3), 7--28 (1999)
+   DOI: <a href="http://dx.doi.org/10.1145/334714.334716">
+   10.1145/334714.334716</a>.
+ - C. F. F. Karney,
+   <a href="http://dx.doi.org/10.1007/s00190-011-0445-3">
+   Transverse Mercator with an accuracy of a few nanometers</a>,
+   J. Geodesy 85(8), 475--485 (Aug. 2011);
+   addenda: <a href="http://geographiclib.sourceforge.net/tm-addenda.html">
+   tm-addenda.html</a>;
+   preprint:
+   <a href="http://arxiv.org/abs/1002.1417"> arXiv:1002.1417</a>;
+   resource page:
+   <a href="http://geographiclib.sf.net/tm.html"> tm.html</a>.
+ - C. F. F. Karney,
+   <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+   Algorithms for geodesics</a>,
+   J. Geodesy 87(1), 43--55 (Jan. 2013);
+   DOI: <a href="http://dx.doi.org/10.1007/s00190-012-0578-z">
+   10.1007/s00190-012-0578-z</a>;
+   addenda: <a href="http://geographiclib.sf.net/geod-addenda.html">
+   geod-addenda.html</a>;
+   resource page:
+   <a href="http://geographiclib.sf.net/geod.html"> geod.html</a>.
+ - L. Krüger,
+   <a href="http://dx.doi.org/10.2312/GFZ.b103-krueger28"> Konforme
+   Abbildung des Erdellipsoids in der Ebene</a> (Conformal mapping of
+   the ellipsoidal earth to the plane), Royal Prussian Geodetic Institute,
+   New Series 52, 172 pp. (1912).
+ - T. H. Meyer and C. M. Rollins,
+   The direct and indirect problem for loxodromes,
+   Navigation 58(1), 1--6 (2011).
+ - P. Osborne,
+   <a href="http://www.mercator99.webspace.virginmedia.com/">
+   The Mercator Projections</a> (2013), §2.5 and §6.5.
+
+\section rhumbform Formulation of the rhumb line problem
+
+The rhumb line can formulated in terms of three types of latitude, the
+isometric latitude \f$\psi\f$ (this serves to define the course of rhumb
+lines), the rectifying latitude \f$\mu\f$ (needed for computing
+distances along rhumb lines), and the parametric latitude \f$\beta\f$
+(needed for dealing with rhumb lines that run along a parallel).  These
+are defined in terms of the geographical latitude \f$\phi\f$ by
+\f[
+\begin{aligned}
+ \frac{d\psi}{d\phi} &= \frac{\rho}R, \\
+ \frac{d\mu}{d\phi}  &= \frac{\pi}{2M}\rho, \\
+\end{aligned}
+\f]
+where \f$\rho\f$ is the meridional radius of curvature, \f$R =
+a\cos\beta\f$ is the radius of a circle of latitude, and \f$M\f$ is the
+length of a quarter meridian (from the equator to the pole).
+
+Rhumb lines are straight in the Mercator projection, which maps a point
+with geographical coordinates \f$ (\phi,\lambda) \f$ on the ellipsoid to
+a point \f$ (\psi,\lambda) \f$.  The azimuth \f$\alpha_{12}\f$ of a
+rhumb line from \f$ (\phi_1,\lambda_1) \f$ to \f$ (\phi_2,\lambda_2) \f$
+is thus given by
+\f[
+\tan\alpha_{12} = \frac{\lambda_{12}}{\psi_{12}},
+\f]
+where the quadrant of \f$\alpha_{12}\f$ is determined by the signs of
+the numerator and denominator of the right-hand side, \f$\lambda_{12} =
+\lambda_2 - \lambda_1\f$, \f$\psi_{12} = \psi_2 - \psi_1\f$, and,
+typically, \f$\lambda_{12}\f$ is reduced to the range \f$[-\pi,\pi]\f$
+(thus giving the course of the <i>shortest</i> rhumb line).
+
+The distance is given by
+\f[
+\begin{aligned}
+s_{12} &= \frac {2M}{\pi} \mu_{12} \sec\alpha_{12} \\
+  &= \frac {2M}{\pi}
+\frac{\mu_{12}}{\psi_{12}} \sqrt{\lambda_{12}^2 + \psi_{12}^2},
+\end{aligned}
+\f]
+where \f$\mu_{12} = \mu_2 - \mu_1\f$.  This relation is indeterminate if
+\f$\phi_1 = \phi_2\f$, so we take the limits
+\f$\psi_{12}\rightarrow0\f$ and \f$\mu_{12}\rightarrow0\f$ and apply
+L'Hôpital's rule to yield
+\f[
+\begin{aligned}
+ s_{12} &= \frac {2M}{\pi} \frac{d\mu}{d\psi} \left|\lambda_{12}\right|\\
+&=a \cos\beta \left|\lambda_{12}\right|,
+\end{aligned}
+\f]
+where the last relation is given by the defining equations for
+\f$\psi\f$ and \f$\mu\f$.
+
+This provides a complete solution for rhumb lines.  This formulation
+entirely encapsulates the ellipsoidal shape of the earth via the
+auxiliary latitudes; thus in the Rhumb class, the ellipsoidal
+generalization is handled by the Ellipsoid class where the auxiliary
+latitudes are defined.
+
+\section rhumblat Determining the auxiliary latitudes
+
+Here we brief develop the necessary formulas for the auxiliary
+latitudes.
+
+<b>Isometric latitude:</b> The equation for \f$\psi\f$ can be integrated
+to give
+\f[
+\psi = \sinh^{-1}\tan\phi - e\tanh^{-1}(e \sin\phi),
+\f]
+where \f$e = \sqrt{f(2-f)}\f$ is the eccentricity of the ellipsoid.  To
+invert this equation (to give \f$\phi\f$ in terms of \f$\psi\f$), it is
+convenient to introduce the variables \f$\tau=\tan\phi\f$ and \f$\tau' =
+\tan\chi = \sinh\psi\f$ (\f$\chi\f$ is the conformal latitude) which are
+related by (Karney, 2011)
+\f[
+\begin{aligned}
+\tau' &= \tau \sqrt{1 + \sigma^2} - \sigma \sqrt{1 + \tau^2}, \\
+\sigma &= \sinh\bigl(e \tanh^{-1}(e \tau/\sqrt{1 + \tau^2}) \bigr).
+\end{aligned}
+\f]
+The equation for \f$\tau'\f$ can be inverted to give \f$\tau\f$ in terms
+of \f$\tau'\f$ using Newton's method with \f$\tau_0 = \tau'/(1-e^2)\f$
+as a starting guess; and, of course, \f$\phi\f$ and \f$\psi\f$ are then
+given by
+\f[
+\begin{aligned}
+\phi &= \tan^{-1}\tau,\\
+\psi &= \sinh^{-1}\tau'.
+\end{aligned}
+\f]
+This allows conversions to and from \f$\psi\f$ to be carried out for any
+value of the flattening \f$f\f$; these conversions are implemented by
+Ellipsoid::IsometricLatitude and Ellipsoid::InverseIsometricLatitude.
+(For prolate ellipsoids, \f$f\f$ is negative and \f$e\f$ is imaginary,
+and the equation for \f$\sigma\f$ needs to be recast in terms of the
+tangent function.)
+
+For small values of \f$f\f$, Engsager and Poder (2007) express
+\f$\chi\f$ as a trigonometric series in \f$\phi\f$.  This series can be
+reverted to give a series for \f$\phi\f$ in terms of \f$\chi\f$.  Both
+series can be efficiently evaluated using Clenshaw summation and this
+provides a fast non-iterative way of making the conversions.
+
+<b>Parametric latitude:</b> This is given by
+\f[
+\tan\beta = (1-f)\tan\phi,
+\f]
+which allows rapid and accurate conversions; these conversions are
+implemented by Ellipsoid::ParametricLatitude and
+Ellipsoid::InverseParametricLatitude.
+
+<b>Rectifying latitude:</b> Solving for distances on the meridian is
+naturally carried out in terms of the parametric latitude instead of the
+geographical latitude.  This leads to a simpler elliptic integral which
+is easier to evaluate and to invert.  Helmert (1880, §5.11) notes
+that the series for meridian distance in terms of \f$\beta\f$ converge
+faster than the corresponding ones in terms of \f$\phi\f$.
+
+In terms of \f$\beta\f$, the rectifying latitude  is given by
+\f[
+\mu = \frac{\pi}{2E(ie')} E(\beta,ie'),
+\f]
+where \f$e'=e/\sqrt{1-e^2}\f$ is the second eccentricity and \f$E(k)\f$
+and \f$E(\phi,k)\f$ are the complete and incomplete elliptic integrals
+of the second kind; see http://dlmf.nist.gov/19.2.ii.  These can be
+evaluated accurately for arbitrary flattening using the method given in
+http://dlmf.nist.gov/19.36.i.  To find \f$\beta\f$ in terms of
+\f$\mu\f$, Newton's method can be used (noting that \f$dE(\phi,k)/d\phi
+= \sqrt{1 - k^2\sin^2\phi}\f$); for a starting guess use \f$\beta_0 =
+\mu\f$ (or use the first terms in the reverted series; see below).
+These conversions are implemented by Ellipsoid::RectifyingLatitude and
+Ellipsoid::InverseRectifyingLatitude.
+
+If the flattening is small, \f$\mu\f$ can be expressed as a series in
+various ways.  The most economical series is in terms of the second
+flattening \f$ n = f/(2-f)\f$ and was found by Bessel (1825); see
+Eq. 5.5.7 of Helmert (1880).  Helmert (1880, Eq. 5.6.8) also gives the
+reverted series (finding \f$\beta\f$ given \f$\mu\f$).  These series are
+used by the Geodesic class where the coefficients are \f$C_{1j}\f$ and
+\f$C_{1j}'\f$; see Eqs. (18) and (21) of Karney (2013) and \ref
+geodseries.  (Make the replacements, \f$\sigma\rightarrow\beta\f$,
+\f$\tau\rightarrow\mu\f$, \f$\epsilon\rightarrow n\f$, to convert the
+notation of the geodesic problem to the problem at hand.)  The series
+are evaluated by Clenshaw summation.
+
+These relations allow inter-conversions between the various latitudes
+\f$\phi\f$, \f$\psi\f$, \f$\chi\f$, \f$\beta\f$, \f$\mu\f$ to be carried
+out simply and accurately.  The approaches using series apply only if
+\f$f\f$ is small.  The others apply for arbitrary values of \f$f\f$.
+
+\section divideddiffs Use of divided differences
+
+Despite our ability to compute latitudes accurately, the way that
+distances enter into the solution involves the ratio
+\f$\mu_{12}/\psi_{12}\f$; the numerical calculation of this term is
+subject to catastrophic round-off errors when \f$\phi_1\f$ and
+\f$\phi_2\f$ are close.  A simple solution, suggested by Meyer and
+Rollins (2011), is to extend the treatment of rhumb lines along
+parallels to this case, i.e., to replace the ratio by the derivative
+evaluated at the midpoint.  (Meyer and Rollins only offer this solution
+when dealing with the inverse problem; but it can also be applied with
+the direct problem.)  However this is not entirely satisfactory: you
+have to pick the transition point where the derivative takes over from
+the ratio of differences; and, near this transition point, many bits of
+accuracy will be lost (I estimate that about 1/3 of bits are lost,
+leading to errors on the order of 0.1 mm for double precision).  Note
+too that this problem crops up even in the spherical limit.
+
+It turns out that we can do substantially better than this and maintain
+full double precision accuracy.  Indeed Botnev and Ustinov provide
+formulas which allow \f$\mu_{12}/\psi_{12}\f$ to be computed accurately
+(but the formula for \f$\mu_{12}\f$ applies only for small flattening).
+
+Here I give a more systematic treatment using the algebra of <i>divided
+differences</i>.  Many readers will be already using this technique,
+e.g., when writing, for example,
+\f[
+  \frac{\sin(2x) - \sin(2y)}{x-y} = 2\frac{\sin(x-y)}{x-y}\cos(x+y).
+\f]
+However, Kahan and Fateman (1999) provide an extensive set of rules
+which allow the technique to be applied to a wide range of problems.
+(The classes LambertConformalConic and AlbersEqualArea use this
+technique to improve the accuracy.)
+
+To illustrate the technique, consider the relation between \f$\psi\f$
+and \f$\chi\f$,
+\f[
+  \psi = \sinh^{-1}\tan\chi.
+\f]
+The divided difference operator is defined by
+\f[
+ \Delta[f](x,y) =
+\begin{cases}
+df(x)/dx, & \text{if $x=y$,} \\
+\displaystyle\frac{f(x)-f(y)}{x-y}, & \text{otherwise.}
+\end{cases}
+\f]
+Many of the rules for differentiation apply to divided differences; in
+particular, we can use the chain rule to write
+\f[
+\frac{\psi_1 - \psi_2}{\chi_1 - \chi_2}
+= \Delta[\sinh^{-1}](\tan\chi_1,\tan\chi_2) \times
+  \Delta[\tan](\chi_1,\chi_2).
+\f]
+
+Kahan and Fateman catalog the divided difference formulas for all the
+elementary functions.  In this case, we need
+\f[
+\begin{aligned}
+\Delta[\tan](x,y) &= \frac{\tan(x-y)}{x-y} (1 + \tan x\tan y),\\
+\Delta[\sinh^{-1}](x,y) &= \frac1{x-y}
+\sinh^{-1}\biggl(\frac{(x-y)(x+y)}{x\sqrt{1+y^2}+y\sqrt{1+x^2}}\biggr).
+\end{aligned}
+\f]
+The crucial point in these formulas is that the right hand sides can be
+evaluated accurately even if \f$x-y\f$ is small.  (I've only included
+the basic results here; Kahan and Fateman supplement these with the
+derivatives if \f$x-y\f$ vanishes or the direct ratios if \f$x-y\f$ is
+not small.)
+
+To complete the computation of \f$\mu_{12}/\psi_{12}\f$, we now need
+\f$(\mu_1 - \mu_2)/(\chi_1 - \chi_2)\f$, i.e., we need the divided
+difference of the function that converts the conformal latitude to
+rectifying latitude.  We could go through the chain of relations between
+these quantities.  However, we can take a short cut and recognize that
+this function was given as a trigonometric series by Krüger (1912)
+in his development of the transverse Mercator projection.  This is also
+given by Eqs. (5) and (35) of Karney (2011) with the replacements
+\f$\zeta \rightarrow \mu\f$ and \f$\zeta' \rightarrow \chi\f$.  The
+coefficients appearing in this series and the reverted series Eqs. (6)
+and (36) are already computed by the TransverseMercator class.  The
+series can be readily converted to divided difference form (see the
+example at the beginning of this section) and Clenshaw summation can be
+used to evaluate it (see below).
+
+The approach of using the series for the transverse Mercator projection
+limits the applicability of the method to \f$\left|f\right|\lt 0.01\f$.
+If we want to extend the method to arbitrary flattening we need to
+compute \f$\Delta[E](x,y;k)\f$.  The necessary relation is the "addition
+theorem" for the incomplete elliptic integral of the second kind given
+in http://dlmf.nist.gov/19.11.E2.  This can be converted in the followinging divided
+difference formula
+\f[
+\Delta[E](x,y;k)
+=\begin{cases}
+\sqrt{1 - k^2\sin^2x}, & \text{if $x=y$,} \\
+\displaystyle \frac{E(x,k)-E(y,k)}{x-y}, & \text{if $xy \le0$,}\\
+\displaystyle
+\biggl(\frac{E(z,k)}{\sin z} - k^2 \sin x \sin y\biggr)\frac{\sin z}{x-y},
+&\text{otherwise,}
+\end{cases}
+\f]
+where the angle \f$z\f$ is given by
+\f[
+\begin{aligned}
+\sin z &= \frac{2t}{1 + t^2},\quad\cos z = \frac{(1-t)(1+t)}{1 + t^2},\\
+t &=
+\frac{(x-y)\Delta[\sin](x,y)}
+{\sin x\sqrt{1 - k^2\sin^2y} + \sin y\sqrt{1 - k^2\sin^2x}}
+\frac{\sin x + \sin y}{\cos x + \cos y}.
+\end{aligned}
+\f]
+We also need to apply the divided difference formulas to the conversions
+from \f$\phi\f$ to \f$\beta\f$ and \f$\phi\f$ to \f$\psi\f$; but these
+all involve elementary functions and the techniques given in Kahan and
+Fateman can be used.
+
+The end result is that the Rhumb class allows the computation of all
+rhumb lines for any flattening with full double precision accuracy (the
+maximum error is about 10 nanometers).  I've kept the implementation
+simple, which results in rather a lot of repeated evaluations of
+quantities.  However, in this case, the need for clarity trumps the
+desire for speed..
+
+\section dividedclenshaw Clenshaw evaluation of differenced sums
+
+The use of
+<a href="https://en.wikipedia.org/wiki/Clenshaw_algorithm#Geodetic_applications">
+Clenshaw summation</a> for summing series of the form,
+\f[
+g(x) = \sum_{k=1}^N c_k \sin(2kx),
+\f]
+is well established.  However when computing divided differences, we are
+interested in evaluating
+\f[
+g(x)-g(y) = \sum_{k=1}^N 2 c_k \sin\bigl(k(x-y)\bigr)\cos\bigl(k(x+y)\bigr)
+\f]
+and the applicability of Clenshaw summation is not so clear.  Botnev and
+Ustinov assert that the method can be used in this case (but they give
+no details).  It turns out that Clenshaw summation can be used if we
+simultaneously compute the sum \f$g(x)+g(y)\f$ and perform a matrix
+summation,
+\f[
+\mathsf G(x,y) = \begin{bmatrix}
+(g(x) + g(y)) / 2\\
+(g(x) - g(y)) / (x - y)
+\end{bmatrix} = \sum_{k=1}^N c_k \mathsf F_k(x,y),
+\f]
+where
+\f[
+\mathsf F_k(x,y)=
+\begin{bmatrix}
+     \sin kp \cos kd\\
+(2/d)\sin kd \cos kp
+\end{bmatrix},
+\f]
+and \f$p=x+y\f$ and \f$d=x-y\f$.  The first element of \f$\mathsf
+G(x,y)\f$ is the average value of \f$g\f$ and the second element, the
+divided difference, is the average slope.  \f$\mathsf F_k(x,y)\f$
+satisfies the recurrence relation
+\f[
+  \mathsf F_{k+1}(x,y) =
+  \mathsf A(x,y) \mathsf F_k(x,y) - \mathsf F_{k-1}(x,y),
+\f]
+where
+\f[
+ \mathsf A(x,y) = \begin{bmatrix}
+     2 \cos p \cos d &  -d\sin p \sin d \\
+-(4/d) \sin p \sin d &  2 \cos p \cos d
+\end{bmatrix}.
+\f]
+The standard Clenshaw algorithm can now be applied to yield
+\f[
+\begin{aligned}
+\mathsf B_{N+1} &= \mathsf B_{N+2} = \mathsf 0, \\
+\mathsf B_k &= \mathsf A \mathsf B_{k+1} - \mathsf B_{k+2} +
+\mathsf c_k \mathsf I, \qquad\text{for $N\ge k \ge 1$},\\
+\mathsf G(x,y) &= \mathsf B_1 \mathsf F_1(x,y),
+\end{aligned}
+\f]
+where \f$B_k\f$ are \f$2\times2\f$ matrices.  The divided difference
+\f$\Delta[g](x,y)\f$ is given by the second element of \f$\mathsf
+G(x,y)\f$.
+
+<center>
+Back to \ref triaxial.  Forward to \ref transversemercator.  Up to
 \ref contents.
 </center>
 **********************************************************************/
@@ -4261,11 +4719,11 @@ Back to \ref geodesic.  Forward to \ref transversemercator.  Up to
 \page transversemercator Transverse Mercator projection
 
 <center>
-Back to \ref triaxial.  Forward to \ref geocentric.  Up to \ref contents.
+Back to \ref rhumb.  Forward to \ref geocentric.  Up to \ref contents.
 </center>
 
-GeographicLib::TransverseMercator and
-GeographicLib::TransverseMercatorExact provide accurate implementations
+TransverseMercator and
+TransverseMercatorExact provide accurate implementations
 of the transverse Mercator projection.  The
  <a href="TransverseMercatorProj.1.html">TransverseMercatorProj</a>
 utility provides an interface to these classes.
@@ -4292,15 +4750,17 @@ References
    Projections Based On Jacobian Elliptic Functions</a>.
  - C. F. F. Karney,
    <a href="http://dx.doi.org/10.1007/s00190-011-0445-3">
-   Transverse Mercator with an accuracy of a few nanometers,</a>
+   Transverse Mercator with an accuracy of a few nanometers</a>,
    J. Geodesy 85(8), 475--485 (Aug. 2011);
+   addenda: <a href="http://geographiclib.sourceforge.net/tm-addenda.html">
+   tm-addenda.html</a>;
    preprint:
    <a href="http://arxiv.org/abs/1002.1417"> arXiv:1002.1417</a>;
    resource page:
    <a href="http://geographiclib.sf.net/tm.html"> tm.html</a>.
  .
-The algorithm for GeographicLib::TransverseMercator is based on
-Krüger (1912); that for GeographicLib::TransverseMercatorExact is
+The algorithm for TransverseMercator is based on
+Krüger (1912); that for TransverseMercatorExact is
 based on Lee (1976).
 
 See <a href="http://geographiclib.sourceforge.net/tm-grid.kmz"
@@ -4378,18 +4838,18 @@ implementations following the standard convention.
 Krüger (1912) gives a 4th-order approximation to the transverse
 Mercator projection.  This is accurate to about 200 nm (200
 nanometers) within the UTM domain.  Here we present the series
-extended to 10th order.  By default, GeographicLib::TransverseMercator
+extended to 10th order.  By default, TransverseMercator
 uses the 6th-order approximation. The preprocessor macro
 GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER can be used to select an order
 from 4 thru 8.  The series expanded to order <i>n</i><sup>30</sup> are
 given in <a href="tmseries30.html"> tmseries30.html</a>.
 
-In the formulas below ^ indicates exponentiation (\e n^3 = \e n*\e n*\e
-n) and / indicates real division (3/5 = 0.6).  The equations need to be
-converted to Horner form, but are here left in expanded form so that
-they can be easily truncated to lower order in \e n.  Some of the
-integers here are not representable as 32-bit integers and will need to
-be included as double literals.
+In the formulas below ^ indicates exponentiation (<i>n</i>^3 =
+<i>n</i>*<i>n</i>*<i>n</i>) and / indicates real division (3/5 = 0.6).
+The equations need to be converted to Horner form, but are here left in
+expanded form so that they can be easily truncated to lower order in \e
+n.  Some of the integers here are not representable as 32-bit integers
+and will need to be included as 64-bit integers.
 
 \e A in Krüger, p. 12, eq. (5)
 \verbatim
@@ -4531,8 +4991,10 @@ Further instructions are included at the top of the file.
 This section gives color versions of the figures in
  - C. F. F. Karney,
    <a href="http://dx.doi.org/10.1007/s00190-011-0445-3">
-   Transverse Mercator with an accuracy of a few nanometers,</a>
+   Transverse Mercator with an accuracy of a few nanometers</a>,
    J. Geodesy 85(8), 475--485 (Aug. 2011);
+   addenda: <a href="http://geographiclib.sourceforge.net/tm-addenda.html">
+   tm-addenda.html</a>;
    preprint:
    <a href="http://arxiv.org/abs/1002.1417"> arXiv:1002.1417</a>;
    resource page:
@@ -4628,17 +5090,18 @@ projection (Fig. 3(a)).  The extended Thompson projection figure has
 reflection symmetry on all the four sides of Fig. 3(c).
 
 <center>
-Back to \ref triaxial.  Forward to \ref geocentric.  Up to \ref contents.
+Back to \ref rhumb.  Forward to \ref geocentric.  Up to \ref contents.
 </center>
 **********************************************************************/
 /**
 \page geocentric Geocentric coordinates
 
 <center>
-Back to \ref transversemercator.  Forward to \ref old.  Up to \ref contents.
+Back to \ref transversemercator.  Forward to \ref highprec.  Up to
+\ref contents.
 </center>
 
-The implementation of GeographicLib::Geocentric::Reverse is adapted from
+The implementation of Geocentric::Reverse is adapted from
  - H. Vermeille,
    <a href="http://dx.doi.org/10.1007/s00190-002-0273-6">
    Direct transformation from geocentric coordinates to geodetic
@@ -4654,6 +5117,12 @@ described in Appendix B of
    on an ellipsoid of revolution</a>,
    Feb. 2011; preprint
    <a href="http://arxiv.org/abs/1102.1215v1">arxiv:1102.1215v1</a>.
+ .
+Vermeille similarly updated his method in
+ - H. Vermeille,
+   <a href="http://dx.doi.org/10.1007/s00190-010-0419-x">
+   An analytical method to transform geocentric into
+   geodetic coordinates</a>, J. Geodesy 85, 105--117 (2011).
 
 The problems encountered near the center of the ellipsoid are:
  - There's a potential division by zero in the definition of \e s. The
@@ -4662,10 +5131,10 @@ The problems encountered near the center of the ellipsoid are:
    real root.
  - The solution for \e t may be complex.  However this leads to 3 real roots
    for <i>u</i>/\e r.  It's then just a matter of picking the one that computes
-   the geodetic result which minimizes |\e h| and which avoids large
+   the geodetic result which minimizes |<i>h</i>| and which avoids large
    round-off errors.
  - Some of the equations result in a large loss of accuracy due to
-   subtracting nearly equal quantities.  E.g., \e k= sqrt(\e u + \e v +
+   subtracting nearly equal quantities.  E.g., \e k = sqrt(\e u + \e v +
    <i>w</i><sup>2</sup>) − \e w is inaccurate if \e u + \e v is small;
    we can fix this by writing \e k = (\e u + \e v)/(sqrt(\e u + \e v +
    <i>w</i><sup>2</sup>) + \e w).
@@ -4688,7 +5157,7 @@ Apply the double version of WGS84.Reverse to (\e x0, \e y0, \e z0) to
 compute the approximate geodetic coordinates (\e lat1, \e lon1, \e h1).
 Convert (\e lat1 − \e lat0, \e lon1 − \e lon0) to a
 distance, \e ds, on the surface of the ellipsoid and define \e err =
-hypot(\e ds, \e h1 − \e h0).  For |\e h0| < 5000 km, we have \e
+hypot(\e ds, \e h1 − \e h0).  For |<i>h0</i>| < 5000 km, we have \e
 err < 7 nm (7 nanometers).
 
 This methodology is not very useful very far from the globe, because the
@@ -4706,7 +5175,7 @@ geodetic latitude becomes 7.45", a distance of 229 m from the equator.
 In light of this, Reverse does quite well in this vicinity.
 
 To obtain a practical measure of the error for the general case we define
-- <i>err</i><sub>h</sub> = |\e h1 − \e h0| / max(1, \e h0 / \e a)
+- <i>err</i><sub>h</sub> = |\e h1 − <i>h0</i>| / max(1, \e h0 / \e a)
 - for \e h0 > 0, <i>err</i><sub>out</sub> = \e ds
 - for \e h0 < 0, apply the long double version of WGS84.Forward to (\e
   lat1, \e lon1, \e h1) to give (\e x1, \e y1, \e z1) and compute
@@ -4716,14 +5185,14 @@ To obtain a practical measure of the error for the general case we define
 We then find <i>err</i><sub>h</sub> < 8 nm, <i>err</i><sub>out</sub> < 4 nm,
 and <i>err</i><sub>in</sub> < 7 nm.  (1 nm = 1 nanometer.)
 
-The testing has been confined to the WGS84 ellipsoid.  The method will work
-for all ellipsoids used in terrestrial geodesy.  However, the central region,
-which leads to multiple real roots for the cubic equation in Reverse, pokes
-outside the ellipsoid (at the poles) for ellipsoids with \e e > 1/sqrt(2).
-Reverse has not been analyzed for this case.  Similarly ellipsoids which are
-very nearly spherical near yield inaccurate results due to underflow; in the
-other hand, the case of the sphere, \e f = 0, is treated specially and gives
-accurate results.
+The testing has been confined to the WGS84 ellipsoid.  The method will
+work for all ellipsoids used in terrestrial geodesy.  However, the
+central region, which leads to multiple real roots for the cubic
+equation in Reverse, pokes outside the ellipsoid (at the poles) for
+ellipsoids with \e e > 1/sqrt(2); Reverse has not been analyzed for this
+case.  Similarly ellipsoids which are very nearly spherical may yield
+inaccurate results due to underflow; in the other hand, the case of the
+sphere, \e f = 0, is treated specially and gives accurate results.
 
 Other comparable methods are K. M. Borkowski,
 <a href="http://dx.doi.org/10.1007/BF00643807"> Transformation
@@ -4737,21 +5206,286 @@ However the choice of independent variables in these methods leads
 to a loss of accuracy for points near the equatorial plane.
 
 <center>
-Back to \ref transversemercator.  Forward to \ref old.  Up to \ref contents.
+Back to \ref transversemercator.  Forward to \ref highprec.  Up to
+\ref contents.
 
 </center>
 **********************************************************************/
 /**
-\page old Old versions
+\page highprec Support for high precision arithmetic
 
 <center>
-Back to \ref geocentric.  Up to \ref contents.
+Back to \ref geocentric.  Forward to \ref changes.  Up to \ref contents.
+</center>
+
+One of the goals with the algorithms in GeographicLib is to deliver
+accuracy close to the limits for double precision.  In order to develop
+such algorithms it is very useful to be have accurate test data.  For
+this purpose, I used Maxima's bfloat capability, which support arbitrary
+precision floating point arithmetic.  As of version 1.37, such
+high-precision test data can be generated directly by GeographicLib by
+compiling it with <code>GEOGRAPHICLIB_PRECISION</code> equal to 4 or 5.
+
+Here's what you should know:
+ - This is mainly for use for algorithm developers.  It's not
+   recommended for installation for all users on a system.
+ - Configuring with <code>-D GEOGRAPHICLIB_PRECISION=4</code> gives quad
+   precision (113-bit precision) via boost::multiprecision::float128;
+   this requires <a href="http://www.boost.org"> boost</a> (version 1.54
+   or later) and the quadmath library (which requires the use of g++).
+ - Configuring with <code>-D GEOGRAPHICLIB_PRECISION=5</code> gives
+   arbitrary precision via mpfr::mpreal; this requires
+   <a href="http://www.mpfr.org"> MPFR</a> and
+   <a href="http://www.holoborodko.com/pavel/mpfr"> MPFR C++</a>
+   (version 3.5.9 or later).
+ - MPFR, MPFR C++, and Boost all come with their own licenses.  Be sure
+   to respect these.
+ - The indicated precision is used for <b>all</b> floating point
+   arithmetic.  Thus, you can't compare the results of different
+   precisions within a single invocation of a program.  Instead, you can
+   create a file of accurate test data at a high precision and use this
+   to test the algorithms at double precision.
+ - With MPFR, the precision should be set (using Utility::set_digits)
+   just once before any other GeographicLib routines are called.
+   Calling this function after other GeographicLib routines will lead to
+   inconsistent results (because the precision of some constants like
+   Math::pi() is set when the functions are first called).
+ - All the \ref utilities call Utility::set_digits().  This causes the
+   precision (in bits) to be determined by the
+   <code>GEOGRAPHICLIB_DIGITS</code> environment variable.  If this is
+   not defined the precision is set to 256 bits.
+ - The accuracy of most calculations should increase as the precision
+   increases (and typically only a few bits of accuracy should be lost).
+   We can distinguish 4 sources of error:
+   - Round-off errors; these are reliably reduced when the precision is
+     increased.  For the most part, the algorithms used by GeographicLib
+     are carefully tuned to minimize round-off errors, so that only a
+     few bits of accuracy are lost.
+   - Convergence errors due to not iterating certain algorithms to
+     convergence.  However, all iterative methods used by GeographicLib
+     converge quadratically (the number of correct digits doubles on
+     each iteration) so that full convergence is obtained for
+     "reasonable" precisions (no more than, say, 100 decimal digits or
+     about 340 bits).  An exception is thrown if the convergence
+     criterion is not met when using high precision arithmetic.
+   - Truncation errors.  Some classes (namely, Geodesic and
+     TransverseMercator) use series expansion to approximate the true
+     solution.  Additional terms in the series are used for high
+     precision, however there's always a finite truncation error which
+     varies as some power of the flattening.  On the other hand,
+     GeodesicExact and TransverseMercatorExact are somewhat slower
+     classes offering the same functionality implemented with
+     EllipticFunction.  These classes provide arbitrary accuracy.
+     (However, a caveat is that the evaluation of the area in
+     GeodesicExact still uses a series (albeit of considerably higher
+     order).  So the area calculations are always have a finite
+     truncation error.)
+   - Quantization errors.  Geoid, GravityModel, and MagneticModel all
+     depend on external data files.  The coefficient files for
+     GravityModel and MagneticModel store the coefficients as IEEE
+     doubles (and perhaps these coefficients can be regarded as exact).
+     However, with Geoid, the data files for the geoid heights are
+     quantized at 3mm leading to an irreducible ±1.5mm
+     quantization error.  On the other hand, all the physical constants
+     used by GeographicLib, e.g., the flattening of the WGS84 ellipsoid,
+     are evaluated as exact decimal numbers.
+ - Where might high accuracy be important?
+   - checking the truncation error of series approximations;
+   - checking for excessive round-off errors (typically due to subtraction);
+   - checking the round-off error in computing areas of many-sided polygons;
+   - checking the summation of high order spherical harmonic expansions
+     (where underflow and overflow may also be a problem).
+ - Because only a tiny number of people will be interested in using this
+   facility:
+   - the cmake support for the required libraries is rudimentary;
+   - support for the C++11 mathematical functions and the explicit cast
+     operator is required;
+   - quad precision is only available on Linux;
+   - mpfr has been mostly tested on Linux (but it works on Windows with
+     Visual Studio 12 and MacOS too);
+   - because the boost library (used for quad precision) interprets fixed +
+     setprecision(0) to mean "print all the digits you've got" instead
+     of "print the nearest integer", some of the formatted output is
+     wrong with <code>GEOGRAPHICLIB_PRECISION=4.</code>
+
+The following steps needed to be taken
+
+ - Phase 1, make sure you can switch easily between double, float, and
+   long double.
+   - use <code>\#include <cmath></code> instead of <code>\#include
+     <math.h></code>;
+   - use, e.g., <code>std::sqrt</code> instead of <code>sqrt</code> in
+     header files (similarly for <code>sin</code>, <code>cos</code>,
+     <code>atan2</code>, etc.);
+   - use <code>using namespace std;</code> and plain <code>sqrt</code>,
+     etc., in code files;
+   - express all convergence criteria in terms of\code
+     numeric_limits<double>::epsilon() \endcode
+     etc., instead of using "magic constants", such as 1.0e-15;
+   - use <code>typedef double real;</code> and replace all occurences of
+     <code>double</code> by <code>real</code>;
+   - write all literals by, e.g., <code>real(0.5)</code>.  Some
+     constants might need the L suffix, e.g., <code>real f =
+     1/real(298.257223563L)</code> (but see below);
+   - Change the typedef of <code>real</code> to <code>float</code> or
+     <code>long double</code>, compile, and test.  In this way, the
+     library can be run with any of the three basic floating point
+     types.
+   - If you want to run the library with multiple floating point types
+     within a single executable, then make all your classes take a
+     template parameter specifying the floating-point type and
+     instantiate your classes with the floating-point types that you
+     plan to use.  I did not take this approach with GeographicLib
+     because double precision is suitable for the vast majority of
+     applications and turning all the classes into templates classes
+     would end up needlessly complicating (and bloating) the library.
+
+ - Phase 2, changes to support arbitrary, but fixed, precision
+   - Use, e.g., \code
+     typedef boost::multiprecision::float128 real; \endcode
+   - Change <code>std::sqrt(...)</code>, etc. to \code
+     using std::sqrt;
+     sqrt(...) \endcode
+     (but note that <code>std::max</code> can stay).  It's only necessary
+     to do this in header files (code files already have <code>using
+     namespace std;</code>).
+   - In the case of boost's multiprecision numbers, the C++11
+     mathematical functions need special treatment, see Math.hpp.
+   - If necessary, use series with additional terms to improve the
+     accuracy.
+   - Replace slowly converging root finding methods with rapidly
+     converging methods.  In particular, the simple iterative method to
+     determine the flattening from the dynamical form factor in
+     NormalGravity converged too slowly; this was replaced by Newton's
+     method.
+   - If necessary, increase the maximum allowed iteration count in root
+     finding loops.  Also throw an exception of the maximum iteration
+     count is exceeded.
+   - Write literal constants in a way that works for any precision, e.g.,
+     \code
+     real f = 1/( real(298257223563LL) / 1000000000 ); \endcode
+     [Note that \code
+     real f = 1/( 298 + real(257223563) / 1000000000 ); \endcode
+     and <code>1/real(298.257223563L)</code> are susceptible to
+     double rounding errors.  We normally want to avoid such errors when
+     real is a double.]
+   - For arbitrary constants, you might have to resort to macros \code
+     #if   GEOGRAPHICLIB_PRECISION == 1
+     #define REAL(x) x##F
+     #elif GEOGRAPHICLIB_PRECISION == 2
+     #define REAL(x) x
+     #elif GEOGRAPHICLIB_PRECISION == 3
+     #define REAL(x) x##L
+     #elif GEOGRAPHICLIB_PRECISION == 4
+     #define REAL(x) x##Q
+     #else
+     #define REAL(x) real(#x)
+     #endif \endcode
+     and then use \code
+     real f = 1/REAL(298.257223563); \endcode
+   - Perhaps use local static declarations to avoid the overhead of
+     reevaluating constants, e.g., \code
+     static inline real pi() {
+       using std::atan2;
+       // pi is computed just once
+       static const real pi = atan2(real(0), real(-1));
+       return pi;
+     } \endcode
+     This is <b>not</b> necessary for built-in floating point types,
+     since the atan2 function will be evaluated at compile time.
+   - In Utility::readarray and Utility::writearray, arrays of reals were
+     treated as plain old data.  This assumption now no longer holds and
+     these functions needed special treatment.
+   - volatile declaraions don't apply.
+
+ - Phase 3, changes to support arbitrary precision which can be set at
+   runtime.
+   - The big change now is that the precision is not known at compile
+     time.  All static initializations which involve floating point
+     numbers need to be eliminated.
+     - Some static variables (e.g., tolerances which are expressed in
+       terms of <code>numeric_limits<double>\::epsilon()</code>)
+       were made member variables and so initialized when the
+       constructor was called.
+     - Some simple static real arrays (e.g., the interpolating stencils
+       for Geoid) were changes into integer arrays.
+     - Some static variables where converted to static functions similar
+       to the definition of pi() above.
+     - All the static instances of classes where converted as follows
+       \code
+       // declaration
+       static const Geodesic WGS84;
+       // definition
+       const Geodesic Geodesic::WGS84(Constants::WGS84_a(),
+                                      Constants::WGS84_f());
+       // use
+       const Geodesic& geod = Geodesic::WGS84; \endcode
+       becomes \code
+       // declaration
+       static const Geodesic& WGS84();
+       // definition
+       const Geodesic& Geodesic::WGS84() {
+         static const Geodesic wgs84(Constants::WGS84_a(),
+                                     Constants::WGS84_f());
+         return wgs84;
+         static const Geodesic& WGS84();
+       }
+       // use
+       const Geodesic& geod = Geodesic::WGS84(); \endcode
+       This is the so-called
+       <a href="http://www.parashift.com/c++-faq/static-init-order-on-first-use.html">
+       "construct on first use idiom"</a>.  This is the most disruptive
+       of the changes since it requires a different calling convention
+       in user code.  However the old static initializations were
+       invoked everytime a code linking to GeographicLib was started,
+       even if the objects were not subsequently used.  The new method
+       only initializes the static objects if they are used.
+     .
+   - <code>numeric_limits<double>\::digits</code> is no longer a
+     compile-time constant.  It becomes
+     <code>numeric_limits<double>\::digits()</code>.
+   - Depending on the precision cos(π/2) might be negative.
+     Similarly atan(tan(π/2)) may evaluate to −π/2.
+     GeographicLib already handled this, because this happens with long
+     doubles (64 bits in the fraction).
+   - The precision needs to be set in each thread in a multi-processing
+     applications (for an example, see
+     <code>examples/GeoidToGTX.cpp</code>).
+   - Passing numbers to functions by value incurs a substantially higher
+     overhead than with doubles.  This could be avoided by passing such
+     arguments by reference.  This was <b>not</b> done here because it
+     would junk up the code to benefit a narrow application.
+   - The constants in GeodesicExact, e.g., 831281402884796906843926125,
+     can't be specified as long doubles nor long longs (since they have
+     more than 64 significant bits):
+     - first tried macro which expanded to a string (see the macro REAL
+       above);
+     - now use inline function to combine two long long ints each with at
+       most 52 significant bits;
+     - also needed to simplify one routine in GeodesicExact which took
+       inordinately long (15 minutes) to compile using g++;
+     - but Visual Studio 12 then complained (with an <a
+       href="http://connect.microsoft.com/VisualStudio/feedback/details/920594">
+       internal compiler error</a> presumably due to overly agressive
+       whole-file optimization); fixed by splitting one function into a
+       separate file.
+
+<center>
+Back to \ref geocentric.  Forward to \ref changes.  Up to \ref contents.
+
+</center>
+**********************************************************************/
+/**
+\page changes Change log
+
+<center>
+Back to \ref highprec.  Up to \ref contents.
 </center>
 
 List of versions in reverse chronological order together with a brief
 list of changes.  (Note: Old versions of the library use a year-month
 style of numbering.  Now, the library uses a major and minor version
-number.)  Recent versions of %GeographicLib are available at
+number.)  Recent versions of GeographicLib are available at
 <a href="http://sf.net/projects/geographiclib/files/distrib/">
 http://sourceforge.net/projects/geographiclib/files/distrib/</a>.
 Older versions are in
@@ -4764,11 +5498,126 @@ the links in the documentaion of older versions may be out of date (in
 particular the links for the source code will not work if the code has
 been migrated to the archive subdirectory).  All the releases are
 available as tags “r<i>m.nn</i>” in the the "release" branch
-of the git repository for %GeographicLib.
+of the git repository for GeographicLib.
+
+ - <a href="http://geographiclib.sf.net/1.37">Version 1.37</a>
+   (released 2014-08-08)
+   - Add \ref highprec.
+   - <b>INCOMPATIBLE CHANGE</b>: the static instantiations of various
+     classes for the WGS84 ellipsoid have been changed to a
+     <a href="http://www.parashift.com/c++-faq/static-init-order-on-first-use.html">
+     "construct on first use idiom"</a>.  This avoids a lot of wasteful
+     initialization before the user's code starts.  Unfortunately it
+     means that existing source code that relies on any of the following
+     static variables will need to be changed to a function call:
+     - AlbersEqualArea::AzimuthalEqualAreaNorth
+     - AlbersEqualArea::AzimuthalEqualAreaSouth
+     - AlbersEqualArea::CylindricalEqualArea
+     - Ellipsoid::WGS84
+     - Geocentric::WGS84
+     - Geodesic::WGS84
+     - GeodesicExact::WGS84
+     - LambertConformalConic::Mercator
+     - NormalGravity::GRS80
+     - NormalGravity::WGS84
+     - PolarStereographic::UPS
+     - TransverseMercator::UTM
+     - TransverseMercatorExact::UTM
+     .
+     Thus, occurrences of, for example, \code
+     const Geodesic& geod = Geodesic::WGS84; // version 1.36 and earlier
+     \endcode
+     need to be changed to \code
+     const Geodesic& geod = Geodesic::WGS84(); // version 1.37 and later
+     \endcode
+     (note the parentheses!); alternatively use \code
+     // works with all versions
+     const Geodesic geod(Constants::WGS84_a(), Constants::WGS84_a()); \endcode
+   - Incompatible change: the environment variables
+     <code>{GEOID,GRAVITY,MAGNETIC}_{NAME,PATH}</code> are now prefixed
+     with <code>GEOGRAPHICLIB_</code>.
+   - Incompatible change for Windows XP: retire the Windows XP common
+     data path.  If you're still using Windows XP, then you might have
+     to move the folder <code>C:\\Documents and Settings\\All
+     Users\\Application Data\\GeographicLib</code> to
+     <code>C:\\ProgramData\\GeographicLib</code>.
+   - All macro names affecting the compilation now start with
+     <code>GEOGRAPHICLIB_</code>; this applies to
+     <code>GEOID_DEFAULT_NAME</code>, <code>GRAVITY_DEFAULT_NAME</code>,
+     <code>MAGNETIC_DEFAULT_NAME</code>, <code>PGM_PIXEL_WIDTH</code>,
+     <code>HAVE_LONG_DOUBLE</code>, <code>STATIC_ASSERT</code>,
+     <code>WORDS_BIGENDIAN</code>.
+   - Changes to PolygonArea:
+     - introduce PolygonAreaT which takes a geodesic class as a parameter;
+     - PolygonArea and PolygonAreaExact are typedef'ed to
+       PolygonAreaT<Geodesic> and PolygonAreaT<GeodesicExact>;
+     - add -E option to <a href="Planimeter.1.html">Planimeter</a> to use
+       PolygonAreaExact;
+     - add -Q option to <a href="Planimeter.1.html">Planimeter</a> to
+       calculate the area on the authalic sphere.
+   - Add -p option to <a href="Planimeter.1.html">Planimeter</a>,
+     <a href="ConicProj.1.html">ConicProj</a>,
+     <a href="GeodesicProj.1.html">GeodesicProj</a>,
+     <a href="TransverseMercatorProj.1.html">TransverseMercatorProj</a>.
+   - Add Rhumb and RhumbLine classes and the
+     <a href="RhumbSolve.1.html">RhumbSolve</a> utility; see \ref rhumb
+     for more information.
+   - Minor changes to NormalGravity:
+     - add NormalGravity::J2ToFlattening and NormalGravity::FlatteningToJ2;
+     - use Newton's method to determine \e f from \e J2;
+     - in constructor, allow \e omega = 0 (i.e., treat the spherical case).
+   - Add grs80 GravityModel, see \ref gravity.
+   - Make geographiclib-get-{geoids,gravity,magnetic} scripts work on MacOS.
+   - Minor changes:
+     - simplify cross-platform support for C++11 mathematical functions;
+     - change way area coefficients are given in GeodesicExact to improve
+       compile times;
+     - enable searching the online documentation;
+     - add macros <code>GEOGRAPHICLIB_VERSION</code> and
+       <code>GEOGRAPHICLIB_VERSION_NUM</code>;
+     - add solution and project files for Visual Studio Express 2010.
+
+ - <a href="http://geographiclib.sf.net/1.36">Version 1.36</a>
+   (released 2014-05-13)
+   - Changes to comply with NGA's prohibition of the use of the
+     upper-case letters N/S to designate the hemisphere when displaying
+     UTM/UPS coordinates:
+     - UTMUPS::DecodeZone allows north/south as hemisphere
+       designators (in addition to n/s);
+     - UTMUPS::EncodeZone now encodes the hemisphere in
+       <i>lower case</i> (to distinguish this use from a grid zone
+       designator);
+     - UTMUPS::EncodeZone takes an optional parameter \e
+       abbrev to indicate whether to use n/s or north/south as the
+       hemisphere designator;
+     - GeoCoords::UTMUPSRepresentation and
+       GeoCoords::AltUTMUPSRepresentation similarly accept
+       the \e abbrev parameter;
+     - <a href="GeoConvert.1.html">GeoConvert</a> uses the
+       flags -a and -l to govern whether UTM/UPS output uses n/s
+       (the -a flag) or north/south (the -l flag) to denote the
+       hemisphere;
+     - Fixed a bug what allowed +3N to be accepted as an alternative UTM
+       zone designation (instead of 3N).
+     .
+     <b>WARNING:</b> The use of lower case n/s for the hemisphere might
+     cause compatibility problems.  However DecodeZone has always
+     accepted either case; so the issue will only arise with other
+     software reading the zone information.  To avoid possible
+     misinterpretation of the zone designator, consider calling
+     EncodeZone with \e abbrev = false and GeoConvert with -l, so that
+     north/south are used to denote the hemisphere.
+   - MGRS::Forward with \e prec = -1 will produce a grid
+     zone designation.  Similarly MGRS::Reverse will
+     decode a grid zone designation (and return \e prec = -1).
+   - Stop using the throw() declaration specification which is
+     deprecated in C++11.
+   - Add missing std:: qualifications to copy in LocalCartesion and
+     Geocentric headers (bug found by Clemens).
 
  - <a href="http://geographiclib.sf.net/1.35">Version 1.35</a>
    (released 2014-03-13)
-   - Fix blunder in GeographicLib::UTMUPS::EncodeEPSG (found by Ben
+   - Fix blunder in UTMUPS::EncodeEPSG (found by Ben
      Adler).
    - Matlab wrapper routines geodesic{direct,inverse,line} switch to
      "exact" routes if |<i>f</i>| > 0.02.
@@ -4791,7 +5640,7 @@ of the git repository for %GeographicLib.
    - Many changes in cmake support:
      - minimum version of cmake needed increased to 2.8.4 (which was
        released in 2011-02);
-     - allow building both shared and static librarys with <code>-D
+     - allow building both shared and static libraries with <code>-D
        GEOGRAPHICLIB_LIB_TYPE=BOTH</code>;
      - both shared and static libraries (Release plus Debug) included in
        binary installer;
@@ -4799,7 +5648,7 @@ of the git repository for %GeographicLib.
        select the library to use;
      - find_package version checking allows nmake and Visual Studio
        generators to interoperate on Windows;
-     - find_package (%GeographicLib ...) requires that %GeographicLib be
+     - find_package (GeographicLib ...) requires that GeographicLib be
        capitalized correctly;
      - on Unix/Linux, don't include the version number in directory for
        the cmake configuration files;
@@ -4814,7 +5663,7 @@ of the git repository for %GeographicLib.
        now deprecated (use CMAKE_INSTALL_PREFIX instead);
      - on Linux, the installed package is relocatable;
      - on MacOSX, the installed utilities can find the shared library.
-   - Use a more precise value for GeographicLib::OSGB::CentralScale().
+   - Use a more precise value for OSGB::CentralScale().
    - Add Arc routines to python interface.
    - The Geod utility has been removed; the same functionality lives on
      with <a href="GeodSolve.1.html">GeodSolve</a> (introduced in
@@ -4824,9 +5673,9 @@ of the git repository for %GeographicLib.
    (released 2013-10-08)
    - Add <a href="NET/index.html">NETGeographic .NET wrapper library</a>
      (courtesy of Scott Heiman).
-   - Make inspector functions in GeographicLib::Ellipsoid const.
-   - Add Accumulator.cpp to instantiate GeographicLib::Accumulator.
-   - Defer some of the initialization of GeographicLib::OSGB to when it
+   - Make inspector functions in Ellipsoid const.
+   - Add Accumulator.cpp to instantiate Accumulator.
+   - Defer some of the initialization of OSGB to when it
      is first called.
    - Fix bug in autoconf builds under MacOS.
 
@@ -4840,13 +5689,13 @@ of the git repository for %GeographicLib.
    (released 2013-07-01)
    - Changes breaking binary compatibility (source compatibility is
      maintained):
-     - overloaded versions of GeographicLib::DMS::Encode,
-       GeographicLib::EllipticFunction::EllipticFunction, and
-       GeographicLib::GeoCoords::DMSRepresentation, have been eliminated
+     - overloaded versions of DMS::Encode,
+       EllipticFunction::EllipticFunction, and
+       GeoCoords::DMSRepresentation, have been eliminated
        by the use of optional arguments;
      - correct the declaration of first arg to
-       GeographicLib::UTMUPS::DecodeEPSG.
-   - FIX BUG in GeographicLib::GravityCircle constructor (found by
+       UTMUPS::DecodeEPSG.
+   - FIX BUG in GravityCircle constructor (found by
      Mathieu Peyréga) which caused bogus results for the gravity
      disturbance and gravity anomaly vectors.  (This only affected
      calculations using GravityCircle.  GravityModel calculations did
@@ -4871,16 +5720,16 @@ of the git repository for %GeographicLib.
      - accumulate the perimeter and area of polygons via a double-wide
        accumulator in Fortran, C, and Matlab implementations (this is
        already included in the other implementations);
-     - port GeographicLib::PolygonArea::AddEdge and
-       GeographicLib::PolygonArea::TestEdge to JavaScript and python
+     - port PolygonArea::AddEdge and
+       PolygonArea::TestEdge to JavaScript and python
        interfaces;
      - include documentation on \ref geodshort.
    - Unix scripts for downloading datasets,
      geographiclib-get-{geoids,gravity,magnetic}, skip already download
      models by default, unless the -f flag is given.
    - FIX BUGS: meridian convergence and scale returned by
-     GeographicLib::TransverseMercatorExact was wrong at a pole.
-   - Improve efficiency of GeographicLib::MGRS::Forward by avoiding the
+     TransverseMercatorExact was wrong at a pole.
+   - Improve efficiency of MGRS::Forward by avoiding the
      calculation of the latitude if possible (adapting an idea of Craig
      Rollins).
    - Fixes to the way the Matlab interface routines are built (thanks to
@@ -4889,10 +5738,10 @@ of the git repository for %GeographicLib.
  - <a href="http://geographiclib.sf.net/1.30">Version 1.30</a>
    (released 2013-02-27)
    - Changes to geodesic routines:
-     - FIX BUG in fail-safe mechanisms in GeographicLib::Geodesic::Inverse;
+     - FIX BUG in fail-safe mechanisms in Geodesic::Inverse;
      - the command line utility Geod is now called
        <a href="GeodSolve.1.html">GeodSolve</a>;
-     - allow addition of polygon edges in GeographicLib::PolygonArea;
+     - allow addition of polygon edges in PolygonArea;
      - add full Maxima implementation of geodesic algorithms.
 
  - <a href="http://geographiclib.sf.net/1.29">Version 1.29</a>
@@ -4926,7 +5775,7 @@ of the git repository for %GeographicLib.
        problem;
      - no longer signal failures of convergence with NaNs (a slightly
        less accurate answer is returned instead).
-   - Fix GeographicLib::DMS::Decode double rounding BUG.
+   - Fix DMS::Decode double rounding BUG.
    - On MacOSX platforms with the cmake configuration, universal
      binaries are built.
 
@@ -4941,19 +5790,19 @@ of the git repository for %GeographicLib.
    - Changes to geodesic calculations:
      - restart Newton's method in Geodesic::Inverse when it goes awry;
      - back up Newton's method with the bisection method;
-     - GeographicLib::Geodesic::Inverse now converges for any value of \e f;
-     - add GeographicLib::GeodesicExact and
-       GeographicLib::GeodesicLineExact which are formulated in terms
+     - Geodesic::Inverse now converges for any value of \e f;
+     - add GeodesicExact and
+       GeodesicLineExact which are formulated in terms
        of elliptic integrals and thus yield accurate results even for
        very eccentric ellipsoids.
      - the -E option to <a href="GeodSolve.1.html">Geod</a> invokes these
        exact classes.
-   - Add functionality to GeographicLib::EllipticFunction:
+   - Add functionality to EllipticFunction:
      - add all the traditional elliptic integrals;
      - remove restrictions on argument range for incomplete elliptic integrals;
      - allow imaginary modulus for elliptic integrals and elliptic functions;
      - make interface to the symmetric elliptic integrals public.
-   - Allow GeographicLib::Ellipsoid to be copied.
+   - Allow Ellipsoid to be copied.
    - Changes to the build tools:
      - cmake uses folders in Visual Studio to reduce clutter;
      - allow precision of reals to be set in cmake;
@@ -4964,13 +5813,13 @@ of the git repository for %GeographicLib.
    (released 2012-09-22)
    - Allow the specification of the hemisphere in UTM coordinates in
      order to provide continuity across the equator:
-     - add GeographicLib::UTMUPS::Transfer;
-     - add GeographicLib::GeoCoords::UTMUPSRepresentation(bool, int) and
-       GeographicLib::GeoCoords::AltUTMUPSRepresentation(bool, int);
+     - add UTMUPS::Transfer;
+     - add GeoCoords::UTMUPSRepresentation(bool, int) and
+       GeoCoords::AltUTMUPSRepresentation(bool, int);
      - use the hemisphere letter in, e.g.,
-       <a href="GeoConvert.1.html">GeoConvert</a> -u -z 31N.
-   - Add GeographicLib::UTMUPS::DecodeEPSG and
-     GeographicLib::UTMUPS::EncodeEPSG.
+       <a href="GeoConvert.1.html">GeoConvert</a> -u -z 31n.
+   - Add UTMUPS::DecodeEPSG and
+     UTMUPS::EncodeEPSG.
    - cmake changes:
      - restore support for cmake 2.4.x;
      - explicitly check version of doxygen.
@@ -4980,475 +5829,475 @@ of the git repository for %GeographicLib.
 
  - <a href="http://geographiclib.sf.net/1.23">Version 1.23</a>
    (released 2012-07-17)
-  - Documentation changes:
-    - remove html documentation from distribution and use web links if
-      doxygen is not available;
-    - use doxygen tags to document exceptions;
-    - begin migrating the documentation to using Greek letters where
-      appropriate (requires doxygen 1.8.1.2 or later).
-  - Add GeographicLib::Math::AngNormalize and
-    GeographicLib::Math::AngNormalize2; the allowed range for longitudes
-    and azimuths widened to [−540°, 540°).
-  - GeographicLib::DMS::Decode understands more unicode symbols.
-  - GeographicLib::Geohash uses geohash code "nan" to stand for not a
-    number.
-  - Add GeographicLib::Ellipsoid::NormalCurvatureRadius.
-  - Various fixes in GeographicLib::LambertConformalConic,
-    GeographicLib::TransverseMercator,
-    GeographicLib::PolarStereographic, and GeographicLib::Ellipsoid to
-    handle reverse projections of points near infinity.
-  - Fix programming blunder in GeographicLib::LambertConformalConic::Forward
-    (incorrect results were returned if the tangent latitude was
-    negative).
+   - Documentation changes:
+     - remove html documentation from distribution and use web links if
+       doxygen is not available;
+     - use doxygen tags to document exceptions;
+     - begin migrating the documentation to using Greek letters where
+       appropriate (requires doxygen 1.8.1.2 or later).
+   - Add Math::AngNormalize and
+     Math::AngNormalize2; the allowed range for longitudes
+     and azimuths widened to [−540°, 540°).
+   - DMS::Decode understands more unicode symbols.
+   - Geohash uses geohash code "nan" to stand for not a
+     number.
+   - Add Ellipsoid::NormalCurvatureRadius.
+   - Various fixes in LambertConformalConic,
+     TransverseMercator,
+     PolarStereographic, and Ellipsoid to
+     handle reverse projections of points near infinity.
+   - Fix programming blunder in LambertConformalConic::Forward
+     (incorrect results were returned if the tangent latitude was
+     negative).
 
  - <a href="http://geographiclib.sf.net/1.22">Version 1.22</a>
    (released 2012-05-27)
-  - Add GeographicLib::Geohash and GeographicLib::Ellipsoid classes.
-  - FIX BUG in GeographicLib::AlbersEqualArea for very prolate
-    ellipsoids (<i>b</i><sup>2</sup> > 2 <i>a</i><sup>2</sup>).
-  - cmake changes:
-    - optionally use PACKAGE_PATH and INSTALL_PATH to determine
-      CMAKE_INSTALL_PREFIX;
-    - use COMMON_INSTALL_PATH to determine layout of installation
-      directories;
-    - as a consequence, the installation paths for the documentation,
-      and python and matlab interfaces are shortened for Windows;
-    - zip source distribution now uses DOS line endings;
-    - the tests work in debug mode for Windows;
-    - default setting of GEOGRAPHICLIB_DATA does not depend on
-      CMAKE_INSTALL_PREFIX;
-    - add a cmake configuration for build tree.
+   - Add Geohash and Ellipsoid classes.
+   - FIX BUG in AlbersEqualArea for very prolate
+     ellipsoids (<i>b</i><sup>2</sup> > 2 <i>a</i><sup>2</sup>).
+   - cmake changes:
+     - optionally use PACKAGE_PATH and INSTALL_PATH to determine
+       CMAKE_INSTALL_PREFIX;
+     - use COMMON_INSTALL_PATH to determine layout of installation
+       directories;
+     - as a consequence, the installation paths for the documentation,
+       and python and matlab interfaces are shortened for Windows;
+     - zip source distribution now uses DOS line endings;
+     - the tests work in debug mode for Windows;
+     - default setting of GEOGRAPHICLIB_DATA does not depend on
+       CMAKE_INSTALL_PREFIX;
+     - add a cmake configuration for build tree.
 
  - <a href="http://geographiclib.sf.net/1.21">Version 1.21</a>
    (released 2012-04-25)
-  - Support colon-separated DMS output:
-    - GeographicLib::DMS::Encode and
-      GeographicLib::GeoCoords::DMSRepresentation generalized;
-    - <a href="GeoConvert.1.html">GeoConvert</a> and
-      <a href="GeodSolve.1.html">Geod</a> now accept a -: option.
-  - <a href="GeoidEval.1.html">GeoidEval</a> does not print the gradient
-    of the geoid height by default (because it's subject to large
-    errors); give the -g option to get the gradient printed.
-  - Work around optimization BUG in GeographicLib::Geodesic::Inverse
-    with tdm mingw g++ version 4.6.1.
-  - autoconf fixed to ensure that that out-of-sources builds work;
-    document this as the preferred method of using autoconf.
-  - cmake tweaks:
-    - simplify the configuration of doxygen;
-    - allow the Matlab compiler to be specified with the
-      MATLAB_COMPILER option.
+   - Support colon-separated DMS output:
+     - DMS::Encode and
+       GeoCoords::DMSRepresentation generalized;
+     - <a href="GeoConvert.1.html">GeoConvert</a> and
+       <a href="GeodSolve.1.html">Geod</a> now accept a -: option.
+   - <a href="GeoidEval.1.html">GeoidEval</a> does not print the gradient
+     of the geoid height by default (because it's subject to large
+     errors); give the -g option to get the gradient printed.
+   - Work around optimization BUG in Geodesic::Inverse
+     with tdm mingw g++ version 4.6.1.
+   - autoconf fixed to ensure that that out-of-sources builds work;
+     document this as the preferred method of using autoconf.
+   - cmake tweaks:
+     - simplify the configuration of doxygen;
+     - allow the Matlab compiler to be specified with the
+       MATLAB_COMPILER option.
 
  - <a href="http://geographiclib.sf.net/1.20">Version 1.20</a>
    (released 2012-03-23)
-  - cmake tweaks:
-    - improve find_package's matching of compiler versions;
-    - CMAKE_INSTALL_PREFIX set from CMAKE_PREFIX_PATH if available;
-    - add "x64" to the package name for the 64-bit binary installer;
-    - fix cmake warning with Visual Studio Express.
-  - Fix GeographicLib::SphericalEngine to deal with aggessive iterator
-    checking by Visual Studio.
-  - Fix transcription BUG is Geodesic.js.
+   - cmake tweaks:
+     - improve find_package's matching of compiler versions;
+     - CMAKE_INSTALL_PREFIX set from CMAKE_PREFIX_PATH if available;
+     - add "x64" to the package name for the 64-bit binary installer;
+     - fix cmake warning with Visual Studio Express.
+   - Fix SphericalEngine to deal with aggessive iterator
+     checking by Visual Studio.
+   - Fix transcription BUG is Geodesic.js.
 
  - <a href="http://geographiclib.sf.net/1.19">Version 1.19</a>
    (released 2012-03-13)
-  - Slight improvement in GeographicLib::Geodesic::Inverse for very
-    short lines.
-  - Fix argument checking tests in GeographicLib::MGRS::Forward.
-  - Add --comment-delimiter and --line-separator options to the \ref
-    utilities.
-  - Add installer for 64-bit Windows; the compiled Matlab interface is
-    supplied with the Windows 64-bit installer only.
+   - Slight improvement in Geodesic::Inverse for very
+     short lines.
+   - Fix argument checking tests in MGRS::Forward.
+   - Add --comment-delimiter and --line-separator options to the \ref
+     utilities.
+   - Add installer for 64-bit Windows; the compiled Matlab interface is
+     supplied with the Windows 64-bit installer only.
 
  - <a href="http://geographiclib.sf.net/1.18">Version 1.18</a>
    (released 2012-02-18)
-  - Improve documentation on configuration with cmake.
-  - cmake's find_package ensures that the compiler versions match on Windows.
-  - Improve documentation on compiling Matlab interface.
-  - Binary installer for Windows installs under C:/pkg-vc10 by default.
+   - Improve documentation on configuration with cmake.
+   - cmake's find_package ensures that the compiler versions match on Windows.
+   - Improve documentation on compiling Matlab interface.
+   - Binary installer for Windows installs under C:/pkg-vc10 by default.
 
  - <a href="http://geographiclib.sf.net/1.17">Version 1.17</a>
    (released 2012-01-21)
-  - Work around optimization BUG in GeographicLib::Geodesic::Inverse
-    with g++ version 4.4.0 (mingw).
-  - Fix BUG in argument checking with GeographicLib::OSGB::GridReference.
-  - Fix missing include file in GeographicLib::SphericalHarmonic2.
-  - Add simple examples of usage for each class.
-  - Add internal documentation to the cmake configuration files.
+   - Work around optimization BUG in Geodesic::Inverse
+     with g++ version 4.4.0 (mingw).
+   - Fix BUG in argument checking with OSGB::GridReference.
+   - Fix missing include file in SphericalHarmonic2.
+   - Add simple examples of usage for each class.
+   - Add internal documentation to the cmake configuration files.
 
  - <a href="http://geographiclib.sf.net/1.16">Version 1.16</a>
    (released 2011-12-07)
-  - Add calculation of the earth's gravitational field:
-    - add GeographicLib::NormalGravity GeographicLib::GravityModel and
-      GeographicLib::GravityCircle classes;
-    - add command line utility
-      <a href="Gravity.1.html">Gravity</a>;
-    - add \ref gravity;
-    - add GeographicLib::Constants::WGS84_GM(),
-      GeographicLib::Constants::WGS84_omega(), and similarly for GRS80.
-  - Build uses GEOGRAPHICLIB_DATA to specify a common parent directory
-     for geoid, gravity, and magnetic data (instead of
-     GEOGRAPHICLIB_GEOID_PATH, etc.); similarly,
-     <a href="GeoidEval.1.html">GeoidEval</a>,
-     <a href="Gravity.1.html">Gravity</a>, and
-     <a href="MagneticField.1.html">MagneticField</a>, look at the
-     environment variable GEOGRAPHICLIB_DATA to locate the data.
-  - Spherical harmonic software changes:
-    - capitalize enums GeographicLib::SphericalHarmonic::FULL and
-      GeographicLib::SphericalHarmonic::SCHMIDT (the lower case names
-      are retained but deprecated);
-    - optimize the sum by using a static table of square roots which is
-      updated by GeographicLib::SphericalEngine::RootTable;
-    - avoid overflow for high degree models.
-  - Magnetic software fixes:
-    - fix documentation BUG in GeographicLib::MagneticModel::Circle;
-    - make GeographicLib::MagneticModel constructor explicit;
-    - provide default GeographicLib::MagneticCircle constructor;
-    - add additional inspector functions to
-      GeographicLib::MagneticCircle;
-    - add -c option to <a href="MagneticField.1.html">MagneticField</a>;
-    - default height to zero in
-      <a href="MagneticField.1.html">MagneticField</a>.
+   - Add calculation of the earth's gravitational field:
+     - add NormalGravity GravityModel and
+       GravityCircle classes;
+     - add command line utility
+       <a href="Gravity.1.html">Gravity</a>;
+     - add \ref gravity;
+     - add Constants::WGS84_GM(), Constants::WGS84_omega(), and
+       similarly for GRS80.
+   - Build uses GEOGRAPHICLIB_DATA to specify a common parent directory
+      for geoid, gravity, and magnetic data (instead of
+      GEOGRAPHICLIB_GEOID_PATH, etc.); similarly,
+      <a href="GeoidEval.1.html">GeoidEval</a>,
+      <a href="Gravity.1.html">Gravity</a>, and
+      <a href="MagneticField.1.html">MagneticField</a>, look at the
+      environment variable GEOGRAPHICLIB_DATA to locate the data.
+   - Spherical harmonic software changes:
+     - capitalize enums SphericalHarmonic::FULL and
+       SphericalHarmonic::SCHMIDT (the lower case names
+       are retained but deprecated);
+     - optimize the sum by using a static table of square roots which is
+       updated by SphericalEngine::RootTable;
+     - avoid overflow for high degree models.
+   - Magnetic software fixes:
+     - fix documentation BUG in MagneticModel::Circle;
+     - make MagneticModel constructor explicit;
+     - provide default MagneticCircle constructor;
+     - add additional inspector functions to
+       MagneticCircle;
+     - add -c option to <a href="MagneticField.1.html">MagneticField</a>;
+     - default height to zero in
+       <a href="MagneticField.1.html">MagneticField</a>.
 
  - <a href="http://geographiclib.sf.net/1.15">Version 1.15</a>
    (released 2011-11-08)
-  - Add calculation of the earth's magnetic field:
-    - add GeographicLib::MagneticModel and GeographicLib::MagneticCircle
-      classes;
-    - add command line utility
-      <a href="MagneticField.1.html">MagneticField</a>;
-    - add \ref magnetic;
-    - add \ref magneticinst;
-    - add \ref magneticformat;
-    - add classes GeographicLib::SphericalEngine,
-      GeographicLib::CircularEngine, GeographicLib::SphericalHarmonic,
-      GeographicLib::SphericalHarmonic1, and
-      GeographicLib::SphericalHarmonic2. which sum spherical harmonic
-      series.
-  - Add GeographicLib::Utility class to support I/O and date
-    manipulation.
-  - Cmake configuration includes a _d suffix on the library built in
-    debug mode.
-  - For the Python package, include manifest and readme files; don't
-    install setup.py for non-Windows systems.
-  - Include Doxygen tag file in distribution as doc/html/Geographic.tag.
+   - Add calculation of the earth's magnetic field:
+     - add MagneticModel and MagneticCircle
+       classes;
+     - add command line utility
+       <a href="MagneticField.1.html">MagneticField</a>;
+     - add \ref magnetic;
+     - add \ref magneticinst;
+     - add \ref magneticformat;
+     - add classes SphericalEngine,
+       CircularEngine, SphericalHarmonic,
+       SphericalHarmonic1, and
+       SphericalHarmonic2. which sum spherical harmonic
+       series.
+   - Add Utility class to support I/O and date
+     manipulation.
+   - Cmake configuration includes a _d suffix on the library built in
+     debug mode.
+   - For the Python package, include manifest and readme files; don't
+     install setup.py for non-Windows systems.
+   - Include Doxygen tag file in distribution as doc/html/Geographic.tag.
 
  - <a href="http://geographiclib.sf.net/1.14">Version 1.14</a>
    (released 2011-09-30)
-  - Ensure that geographiclib-config.cmake is relocatable.
-  - Allow more unicode symbols to be used in GeographicLib::DMS::Decode.
-  - Modify <a href="GeoidEval.1.html">GeoidEval</a> so that it can be
-    used to convert the height datum for LIDAR data.
-  - Modest speed-up of Geodesic::Inverse.
-  - Changes in python interface:
-    - FIX BUG in transcription of Geodesic::Inverse;
-    - include setup.py for easy installation;
-    - python only distribution is available at
-      http://pypi.python.org/pypi/geographiclib
-  - Supply a minimal Qt qmake project file for library
-    src/Geographic.pro.
+   - Ensure that geographiclib-config.cmake is relocatable.
+   - Allow more unicode symbols to be used in DMS::Decode.
+   - Modify <a href="GeoidEval.1.html">GeoidEval</a> so that it can be
+     used to convert the height datum for LIDAR data.
+   - Modest speed-up of Geodesic::Inverse.
+   - Changes in python interface:
+     - FIX BUG in transcription of Geodesic::Inverse;
+     - include setup.py for easy installation;
+     - python only distribution is available at
+       http://pypi.python.org/pypi/geographiclib
+   - Supply a minimal Qt qmake project file for library
+     src/Geographic.pro.
 
  - <a href="http://geographiclib.sf.net/1.13">Version 1.13</a>
    (released 2011-08-13)
-  - Changes to I/O:
-    - allow : (colon) to be used as a DMS separator in
-      GeographicLib::DMS::Decode(const std::string&, flag&);
-    - also accept Unicode symbols for degrees, minutes, and seconds
-      (coded as UTF-8);
-    - provide optional \e swaplatlong argument to various
-      GeographicLib::DMS and GeographicLib::GeoCoords functions to make
-      longitude precede latitude;
-    - <a href="GeoConvert.1.html">GeoConvert</a> now has a -w option to
-      make longitude precede latitude on input and output;
-    - include a JavaScript version of GeographicLib::DMS.
-  - Slight improvement in starting guess for solution of geographic
-    latitude in terms of conformal latitude in TransverseMercator,
-    TransverseMercatorExact, and LambertConformalConic.
-  - For most classes, get rid of const member variables so that the
-    default copy assignment works.
-  - Put GeographicLib::Math and GeographicLib::Accumulator in their own
-    header files.
-  - Remove unused "fast" GeographicLib::Accumulator method.
-  - Reorganize the \ref python.
-  - Withdraw some deprecated routines.
-  - cmake changes:
-    - include FindGeographic.cmake in distribution;
-    - building with cmake creates and installs
-      geographiclib-config.cmake;
-    - better support for building a shared library under Windows.
+   - Changes to I/O:
+     - allow : (colon) to be used as a DMS separator in
+       DMS::Decode(const std::string&, flag&);
+     - also accept Unicode symbols for degrees, minutes, and seconds
+       (coded as UTF-8);
+     - provide optional \e swaplatlong argument to various
+       DMS and GeoCoords functions to make
+       longitude precede latitude;
+     - <a href="GeoConvert.1.html">GeoConvert</a> now has a -w option to
+       make longitude precede latitude on input and output;
+     - include a JavaScript version of DMS.
+   - Slight improvement in starting guess for solution of geographic
+     latitude in terms of conformal latitude in TransverseMercator,
+     TransverseMercatorExact, and LambertConformalConic.
+   - For most classes, get rid of const member variables so that the
+     default copy assignment works.
+   - Put Math and Accumulator in their own
+     header files.
+   - Remove unused "fast" Accumulator method.
+   - Reorganize the \ref python.
+   - Withdraw some deprecated routines.
+   - cmake changes:
+     - include FindGeographic.cmake in distribution;
+     - building with cmake creates and installs
+       geographiclib-config.cmake;
+     - better support for building a shared library under Windows.
 
  - <a href="http://geographiclib.sf.net/1.12">Version 1.12</a>
    (released 2011-07-21)
-  - Change license to MIT/X11.
-  - Add GeographicLib::PolygonArea class and equivalent Matlab function.
-  - Provide JavaScript and Python implementations of geodesic routines.
-  - Fix Windows installer to include runtime dlls for Matlab.
-  - Fix (innocuous) unassigned variable in Geodesic::GenInverse.
-  - Geodesic routines in Matlab return a12 as first column of aux return
-    value (incompatible change).
-  - A couple of code changes to enable compilation with Visual
-    Studio 2003.
+   - Change license to MIT/X11.
+   - Add PolygonArea class and equivalent Matlab function.
+   - Provide JavaScript and Python implementations of geodesic routines.
+   - Fix Windows installer to include runtime dlls for Matlab.
+   - Fix (innocuous) unassigned variable in Geodesic::GenInverse.
+   - Geodesic routines in Matlab return a12 as first column of aux return
+     value (incompatible change).
+   - A couple of code changes to enable compilation with Visual
+     Studio 2003.
 
  - <a href="http://geographiclib.sf.net/1.11">Version 1.11</a>
    (released 2011-06-27)
-  - Changes to <a href="Planimeter.1.html">Planimeter</a>:
-    - add -l flag to <a href="Planimeter.1.html">Planimeter</a> for polyline
-      calculations;
-    - trim precision of area to 3 decimal places;
-    - FIX BUG with pole crossing edges (due to compiler optimization).
-  - <a href="GeodSolve.1.html">Geod</a> no longer reports the reduced
-    length by default; however the -f flag still reports this and in
-    addition gives the geodesic scales and the geodesic area.
-  - FIX BUGS (compiler-specific) in inverse geodesic calculations.
-  - FIX BUG: accommodate tellg() returning −1 at end of string.
-  - Change way flattening of the ellipsoid is specified:
-    - constructors take \e f argument which is taken to be the
-      flattening if \e f < 1 and the inverse flattening otherwise
-      (this is a compatible change for spheres and oblate ellipsoids, but it
-      is an INCOMPATIBLE change for prolate ellipsoids);
-    - the -e arguments to the \ref utilities are handled similarly; in
-      addition, simple fractions, e.g., 1/297, can be used for the
-      flattening;
-    - introduce GeographicLib::Constants::WGS84_f() for the WGS84
-      flattening (and deprecate Constants::WGS84_r() for the inverse
-      flattening);
-    - most classes have a Flattening() member function;
-    - InverseFlattening() has been deprecated (and now returns inf for a
-      sphere, instead of 0).
+   - Changes to <a href="Planimeter.1.html">Planimeter</a>:
+     - add -l flag to <a href="Planimeter.1.html">Planimeter</a> for polyline
+       calculations;
+     - trim precision of area to 3 decimal places;
+     - FIX BUG with pole crossing edges (due to compiler optimization).
+   - <a href="GeodSolve.1.html">Geod</a> no longer reports the reduced
+     length by default; however the -f flag still reports this and in
+     addition gives the geodesic scales and the geodesic area.
+   - FIX BUGS (compiler-specific) in inverse geodesic calculations.
+   - FIX BUG: accommodate tellg() returning −1 at end of string.
+   - Change way flattening of the ellipsoid is specified:
+     - constructors take \e f argument which is taken to be the
+       flattening if \e f < 1 and the inverse flattening otherwise
+       (this is a compatible change for spheres and oblate ellipsoids, but it
+       is an INCOMPATIBLE change for prolate ellipsoids);
+     - the -e arguments to the \ref utilities are handled similarly; in
+       addition, simple fractions, e.g., 1/297, can be used for the
+       flattening;
+     - introduce Constants::WGS84_f() for the WGS84
+       flattening (and deprecate Constants::WGS84_r() for the inverse
+       flattening);
+     - most classes have a Flattening() member function;
+     - InverseFlattening() has been deprecated (and now returns inf for a
+       sphere, instead of 0).
 
  - <a href="http://geographiclib.sf.net/1.10">Version 1.10</a>
    (released 2011-06-11)
-  - Improvements to Matlab/Octave interface:
-    - add {geocentric,localcartesian}{forward,reverse};
-    - make geographiclibinterface more general;
-    - install the source for the interface;
-    - cmake compiles the interface if ENABLE_MATLAB=ON;
-    - include compiled interface with Windows binary installer.
-  - Fix various configuration issues
-    - autoconf did not install Config.h;
-    - cmake installed in man/man1 instead of share/man/man1;
-    - cmake did not set the rpath on the tools.
+   - Improvements to Matlab/Octave interface:
+     - add {geocentric,localcartesian}{forward,reverse};
+     - make geographiclibinterface more general;
+     - install the source for the interface;
+     - cmake compiles the interface if ENABLE_MATLAB=ON;
+     - include compiled interface with Windows binary installer.
+   - Fix various configuration issues
+     - autoconf did not install Config.h;
+     - cmake installed in man/man1 instead of share/man/man1;
+     - cmake did not set the rpath on the tools.
 
  - <a href="http://geographiclib.sf.net/1.9">Version 1.9</a>
    (released 2011-05-28)
-  - FIX BUG in area returned by
-    <a href="Planimeter.1.html">Planimeter</a> for pole encircling polygons.
-  - FIX BUG in error message reported when DMS::Decode reads the string
-    "5d.".
-  - FIX BUG in AlbersEqualArea::Reverse (lon0 not being used).
-  - Ensure that all exceptions thrown in the \ref utilities are caught.
-  - Avoid using catch within GeographicLib::DMS.
-  - Move GeographicLib::Accumulator class from Planimeter.cpp to
-    Constants.hpp.
-  - Add GeographicLib::Math::sq<T>.
-  - Simplify \ref geoidinst
-    - add geographiclib-get-geoids for Unix-like systems;
-    - add installers for Windows.
-  - Provide cmake support:
-    - build binary installer for Windows;
-    - include regression tests;
-    - add --input-string, --input-file, --output-file options to the
-      \ref utilities to support tests.
-  - Rename utility EquidistantTest as <a href="GeodesicProj.1.html">
-    GeodesicProj</a> and TransverseMercatorTest as
-    <a href="TransverseMercatorProj.1.html"> TransverseMercatorProj</a>.
-  - Add <a href="ConicProj.1.html"> ConicProj</a>.
-  - Reverse the initial sense of the -s option for
-    <a href="Planimeter.1.html"> Planimeter</a>.
-  - Migrate source from subversion to
-    <a href="http://geographiclib.git.sf.net/git/gitweb-index.cgi">
-    git</a>.
+   - FIX BUG in area returned by
+     <a href="Planimeter.1.html">Planimeter</a> for pole encircling polygons.
+   - FIX BUG in error message reported when DMS::Decode reads the string
+     "5d.".
+   - FIX BUG in AlbersEqualArea::Reverse (lon0 not being used).
+   - Ensure that all exceptions thrown in the \ref utilities are caught.
+   - Avoid using catch within DMS.
+   - Move Accumulator class from Planimeter.cpp to
+     Constants.hpp.
+   - Add Math::sq<T>.
+   - Simplify \ref geoidinst
+     - add geographiclib-get-geoids for Unix-like systems;
+     - add installers for Windows.
+   - Provide cmake support:
+     - build binary installer for Windows;
+     - include regression tests;
+     - add --input-string, --input-file, --output-file options to the
+       \ref utilities to support tests.
+   - Rename utility EquidistantTest as <a href="GeodesicProj.1.html">
+     GeodesicProj</a> and TransverseMercatorTest as
+     <a href="TransverseMercatorProj.1.html"> TransverseMercatorProj</a>.
+   - Add <a href="ConicProj.1.html"> ConicProj</a>.
+   - Reverse the initial sense of the -s option for
+     <a href="Planimeter.1.html"> Planimeter</a>.
+   - Migrate source from subversion to
+     <a href="http://geographiclib.git.sf.net/git/gitweb-index.cgi">
+     git</a>.
 
  - <a href="http://geographiclib.sf.net/1.8">Version 1.8</a>
    (released 2011-02-22)
-  - Optionally return rotation matrix from GeographicLib::Geocentric and
-    GeographicLib::LocalCartesian.
-  - For the \ref utilities, supply man pages, -h prints the synopsis,
-    --help prints the man page, --version prints the version.
-  - Use accurate summation in <a href="Planimeter.1.html">Planimeter</a>.
-  - Add 64-bit targets for Visual Studio 2010.
-  - Use templates for defining math functions and some constants.
-  - GeographicLib::Geoid updates
-    - Add GeographicLib::Geoid::DefaultGeoidPath and
-      GeographicLib::Geoid::DefaultGeoidName;
-    - <a href="GeoidEval.1.html">GeoidEval</a> uses environment variable
-      GEOID_NAME as the default geoid;
-    - Add --msltohae and --haetomsl as
-      <a href="GeoidEval.1.html">GeoidEval</a> options (and don't
-      document the single hyphen versions).
-  - Remove documentation that duplicates papers on transverse Mercator
-    and geodesics.
+   - Optionally return rotation matrix from Geocentric and
+     LocalCartesian.
+   - For the \ref utilities, supply man pages, -h prints the synopsis,
+     --help prints the man page, --version prints the version.
+   - Use accurate summation in <a href="Planimeter.1.html">Planimeter</a>.
+   - Add 64-bit targets for Visual Studio 2010.
+   - Use templates for defining math functions and some constants.
+   - Geoid updates
+     - Add Geoid::DefaultGeoidPath and
+       Geoid::DefaultGeoidName;
+     - <a href="GeoidEval.1.html">GeoidEval</a> uses environment variable
+       GEOGRAPHICLIB_GEOID_NAME as the default geoid;
+     - Add --msltohae and --haetomsl as
+       <a href="GeoidEval.1.html">GeoidEval</a> options (and don't
+       document the single hyphen versions).
+   - Remove documentation that duplicates papers on transverse Mercator
+     and geodesics.
 
  - <a href="http://geographiclib.sf.net/1.7">Version 1.7</a>
    (released 2010-12-21)
-  - FIX BUG in scale returned by GeographicLib::LambertConformalConic::Reverse.
-  - Add GeographicLib::AlbersEqualArea projection.
-  - Library created by Visual Studio is Geographic.lib instead of
-    GeographicLib.lib (compatible with makefiles).
-  - Make classes NaN aware.
-  - Use cell arrays for MGRS strings in Matlab.
-  - Add solution/project files for Visual Studio 2010 (32-bit only).
-  - Use C++11 static_assert and math functions, if available.
+   - FIX BUG in scale returned by LambertConformalConic::Reverse.
+   - Add AlbersEqualArea projection.
+   - Library created by Visual Studio is Geographic.lib instead of
+     GeographicLib.lib (compatible with makefiles).
+   - Make classes NaN aware.
+   - Use cell arrays for MGRS strings in Matlab.
+   - Add solution/project files for Visual Studio 2010 (32-bit only).
+   - Use C++11 static_assert and math functions, if available.
 
  - <a href="http://geographiclib.sf.net/1.6">Version 1.6</a>
    (released 2010-11-23)
-  - FIX BUG introduced in GeographicLib::Geoid in version 1.5 (found by
-    Dave Edwards).
+   - FIX BUG introduced in Geoid in version 1.5 (found by
+     Dave Edwards).
 
  - <a href="http://geographiclib.sf.net/1.5">Version 1.5</a>
    (released 2010-11-19)
-  - Improve area calculations for small polygons.
-  - Add -s and -r flags to <a href="Planimeter.1.html">Planimeter</a>.
-  - Improve the accuracy of GeographicLib::LambertConformalConic using
-    divided differences.
-  - FIX BUG in meridian convergence returned by
-    LambertConformalConic::Forward.
-  - Add optional threadsafe parameter to GeographicLib::Geoid
-    constructor.  WARNING: This changes may break binary compatibility
-    with previous versions of %GeographicLib.  However, the library is
-    source compatible.
-  - Add GeographicLib::OSGB.
-  - Matlab and Octave interfaces to GeographicLib::UTMUPS,
-    GeographicLib::MGRS, GeographicLib::Geoid, GeographicLib::Geodesic
-    provided.
-  - Minor changes
-    - explicitly turn on optimization in Visual Studio 2008 projects;
-    - add missing dependencies in some Makefiles;
-    - move pi() and degree() from GeographicLib::Constants to
-      GeographicLib::Math;
-    - introduce GeographicLib::Math::extended type to aid testing;
-    - add GeographicLib::Math::epi() and GeographicLib::Math::edegree().
-    - fixes to compile under cygwin;
-    - tweak expression used to find latitude from conformal latitude.
+   - Improve area calculations for small polygons.
+   - Add -s and -r flags to <a href="Planimeter.1.html">Planimeter</a>.
+   - Improve the accuracy of LambertConformalConic using
+     divided differences.
+   - FIX BUG in meridian convergence returned by
+     LambertConformalConic::Forward.
+   - Add optional threadsafe parameter to Geoid
+     constructor.  WARNING: This changes may break binary compatibility
+     with previous versions of GeographicLib.  However, the library is
+     source compatible.
+   - Add OSGB.
+   - Matlab and Octave interfaces to UTMUPS,
+     MGRS, Geoid, Geodesic
+     provided.
+   - Minor changes
+     - explicitly turn on optimization in Visual Studio 2008 projects;
+     - add missing dependencies in some Makefiles;
+     - move pi() and degree() from Constants to
+       Math;
+     - introduce Math::extended type to aid testing;
+     - add Math::epi() and Math::edegree().
+     - fixes to compile under cygwin;
+     - tweak expression used to find latitude from conformal latitude.
 
  - <a href="http://geographiclib.sf.net/1.4">Version 1.4</a>
    (released 2010-09-12)
-  - Changes to GeographicLib::Geodesic and GeographicLib::GeodesicLine:
-    - FIX BUG in Geodesic::Inverse with prolate ellipsoids;
-    - add area computations to Geodesic::Direct and Geodesic::Inverse;
-    - add geodesic areas to geodesic test set;
-    - make GeodesicLine constructor public;
-    - change longitude series in Geodesic into Helmert-like form;
-    - ensure that equatorial geodesics have cos(alpha0) = 0 identically;
-    - generalize interface for Geodesic and GeodesicLine;
-    - split GeodesicLine and Geodesic into different files;
-    - signal convergence failure in Geodesic::Inverse with NaNs;
-    - deprecate one function in Geodesic and two functions in
-      GeodesicLine;
-    - deprecate -n option for <a href="GeodSolve.1.html">Geod</a>.
-    .
-    WARNING: These changes may break binary compatibility with previous
-    versions of %GeographicLib.  However, the library is source
-    compatible (with the proviso that GeographicLib/GeodesicLine.hpp may
-    now need to be included).
-  - Add the <a href="Planimeter.1.html">Planimeter</a> utility for
-    computing the areas of geodesic polygons.
-  - Improve iterative solution of GeographicLib::Gnomonic::Reverse.
-  - Add GeographicLib::Geoid::ConvertHeight.
-  - Add -msltohae, -haetomsl, and -z options to
-    <a href="GeoidEval.1.html">GeoidEval</a>.
-  - Constructors check that minor radius is positive.
-  - Add overloaded Forward and Reverse functions to the projection
-    classes which don't return the convergence (or azimuth) and scale.
-  - Document function parameters and return values consistently.
+   - Changes to Geodesic and GeodesicLine:
+     - FIX BUG in Geodesic::Inverse with prolate ellipsoids;
+     - add area computations to Geodesic::Direct and Geodesic::Inverse;
+     - add geodesic areas to geodesic test set;
+     - make GeodesicLine constructor public;
+     - change longitude series in Geodesic into Helmert-like form;
+     - ensure that equatorial geodesics have cos(alpha0) = 0 identically;
+     - generalize interface for Geodesic and GeodesicLine;
+     - split GeodesicLine and Geodesic into different files;
+     - signal convergence failure in Geodesic::Inverse with NaNs;
+     - deprecate one function in Geodesic and two functions in
+       GeodesicLine;
+     - deprecate -n option for <a href="GeodSolve.1.html">Geod</a>.
+     .
+     <b>WARNING</b>: These changes may break binary compatibility with
+     previous versions of GeographicLib.  However, the library is
+     source compatible (with the proviso that
+     GeographicLib/GeodesicLine.hpp may now need to be included).
+   - Add the <a href="Planimeter.1.html">Planimeter</a> utility for
+     computing the areas of geodesic polygons.
+   - Improve iterative solution of Gnomonic::Reverse.
+   - Add Geoid::ConvertHeight.
+   - Add -msltohae, -haetomsl, and -z options to
+     <a href="GeoidEval.1.html">GeoidEval</a>.
+   - Constructors check that minor radius is positive.
+   - Add overloaded Forward and Reverse functions to the projection
+     classes which don't return the convergence (or azimuth) and scale.
+   - Document function parameters and return values consistently.
 
  - <a href="http://geographiclib.sf.net/1.3">Version 1.3</a>
    (released 2010-07-21)
-  - Add GeographicLib::Gnomonic, the ellipsoid generalization of the
-    gnomonic projection.
-  - Add -g and -e options to
-    <a href="GeodesicProj.1.html">EquidistantTest</a>.
-  - Use fixed-point notation for output from
-    <a href="CartConvert.1.html">CartConvert</a>,
-    <a href="GeodesicProj.1.html">EquidistantTest</a>,
-    <a href="TransverseMercatorProj.1.html">TransverseMercatorTest</a>.
-  - PolarStereographic:
-    - Improved conversion to conformal coordinates;
-    - Fix bug with scale at opposite pole;
-    - Complain if latitude out of range in SetScale.
-  - Add GeographicLib::Math::NaN().
-  - Add long double version of hypot for Windows.
-  - Add EllipticFunction::E(real).
-  - Update references to Geotrans in MGRS documentation.
-  - Speed up tmseries.mac.
+   - Add Gnomonic, the ellipsoid generalization of the
+     gnomonic projection.
+   - Add -g and -e options to
+     <a href="GeodesicProj.1.html">EquidistantTest</a>.
+   - Use fixed-point notation for output from
+     <a href="CartConvert.1.html">CartConvert</a>,
+     <a href="GeodesicProj.1.html">EquidistantTest</a>,
+     <a href="TransverseMercatorProj.1.html">TransverseMercatorTest</a>.
+   - PolarStereographic:
+     - Improved conversion to conformal coordinates;
+     - Fix bug with scale at opposite pole;
+     - Complain if latitude out of range in SetScale.
+   - Add Math::NaN().
+   - Add long double version of hypot for Windows.
+   - Add EllipticFunction::E(real).
+   - Update references to Geotrans in MGRS documentation.
+   - Speed up tmseries.mac.
 
  - <a href="http://geographiclib.sf.net/1.2">Version 1.2</a>
    (released 2010-05-21)
-  - FIX BUGS in GeographicLib::Geodesic,
-    - wrong azimuth returned by Direct if point 2 is on a pole;
-    - Inverse sometimes fails with very close points.
-  - Improve calculation of scale in GeographicLib::CassiniSoldner,
-    - add GeographicLib::GeodesicLine::Scale,
-      GeographicLib::GeodesicLine::EquatorialAzimuth, and
-      GeographicLib::GeodesicLine::EquatorialArc;
-    - break friend connection between CassiniSoldner and Geodesic.
-  - Add GeographicLib::DMS::DecodeAngle and
-    GeographicLib::DMS::DecodeAzimuth.  Extend
-    GeographicLib::DMS::Decode and GeographicLib::DMS::Encode to deal
-    with distances.
-  - Code and documentation changes in GeographicLib::Geodesic and
-    GeographicLib::Geocentric for consistency with
-    the forthcoming paper on geodesics.
-  - Increase order of series using in GeographicLib::Geodesic to 6 (full
-    accuracy maintained for ellipsoid flattening < 0.01).
-  - Macro __NO_LONG_DOUBLE_MATH to disable use of long double.
-  - Correct declaration of GeographicLib::Math::isfinite to return a bool.
-  - Changes in the \ref utilities,
-    - improve error reporting when parsing command line arguments;
-    - accept latitudes and longitudes in decimal degrees or degrees,
-      minutes, and seconds, with optional hemisphere designators;
-    - <a href="GeoConvert.1.html">GeoConvert</a> -z accepts zone or
-      zone+hemisphere;
-    - <a href="GeoidEval.1.html">GeoidEval</a> accepts any of the input
-      formats used by <a href="GeoConvert.1.html">GeoConvert</a>;
-    - <a href="CartConvert.1.html">CartConvert</a> allows the ellipsoid
-      to be specified with -e.
+   - FIX BUGS in Geodesic,
+     - wrong azimuth returned by Direct if point 2 is on a pole;
+     - Inverse sometimes fails with very close points.
+   - Improve calculation of scale in CassiniSoldner,
+     - add GeodesicLine::Scale,
+       GeodesicLine::EquatorialAzimuth, and
+       GeodesicLine::EquatorialArc;
+     - break friend connection between CassiniSoldner and Geodesic.
+   - Add DMS::DecodeAngle and
+     DMS::DecodeAzimuth.  Extend
+     DMS::Decode and DMS::Encode to deal
+     with distances.
+   - Code and documentation changes in Geodesic and
+     Geocentric for consistency with
+     the forthcoming paper on geodesics.
+   - Increase order of series using in Geodesic to 6 (full
+     accuracy maintained for ellipsoid flattening < 0.01).
+   - Macro __NO_LONG_DOUBLE_MATH to disable use of long double.
+   - Correct declaration of Math::isfinite to return a bool.
+   - Changes in the \ref utilities,
+     - improve error reporting when parsing command line arguments;
+     - accept latitudes and longitudes in decimal degrees or degrees,
+       minutes, and seconds, with optional hemisphere designators;
+     - <a href="GeoConvert.1.html">GeoConvert</a> -z accepts zone or
+       zone+hemisphere;
+     - <a href="GeoidEval.1.html">GeoidEval</a> accepts any of the input
+       formats used by <a href="GeoConvert.1.html">GeoConvert</a>;
+     - <a href="CartConvert.1.html">CartConvert</a> allows the ellipsoid
+       to be specified with -e.
 
  - <a href="http://geographiclib.sf.net/1.1">Version 1.1</a>
    (released 2010-02-09)
-  - FIX BUG (introduced in 2009-03) in EllipticFunction::E(sn,cn,dn).
-  - Increase accuracy of scale calculation in TransverseMercator and
-    TransverseMercatorExact.
-  - Code and documentation changes for consistency with
-    <a  href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a>
+   - FIX BUG (introduced in 2009-03) in EllipticFunction::E(sn,cn,dn).
+   - Increase accuracy of scale calculation in TransverseMercator and
+     TransverseMercatorExact.
+   - Code and documentation changes for consistency with
+     <a  href="http://arxiv.org/abs/1002.1417">arXiv:1002.1417</a>
 
  - <a href="http://geographiclib.sf.net/1.0">Version 1.0</a>
    (released 2010-01-07)
-  - Add autoconf configuration files.
-  - BUG FIX: Improve initial guess for Newton's method in
-    PolarStereographic::Reverse.  (Previously this failed to converge
-    when the co-latitude exceeded about 130 deg.)
-  - Constructors for TransverseMercator, TransverseMercatorExact,
-    PolarStereographic, Geocentric, and Geodesic now check for obvious
-    problems with their arguments and throw an exception if necessary.
-  - Most classes now include inspector functions such as MajorRadius()
-    so that you can determine how instances were constructed.
-  - Add GeographicLib::LambertConformalConic class.
-  - Add GeographicLib::PolarStereographic::SetScale to allow the
-    latitude of true scale to be specified.
-  - Add solution and project files for Visual Studio 2008.
-  - Add GeographicLib::GeographicErr for exceptions.
-  - GeographicLib::Geoid changes:
-    - BUG FIX: fix typo in GeographicLib::Geoid::Cache which could cause
-      a segmentation fault in some cases when the cached area spanned
-      the prime meridian.
-    - Include sufficient edge data to allow heights to be returned for
-      cached area without disk reads;
-    - Add inspector functions to query the extent of the cache.
+   - Add autoconf configuration files.
+   - BUG FIX: Improve initial guess for Newton's method in
+     PolarStereographic::Reverse.  (Previously this failed to converge
+     when the co-latitude exceeded about 130 deg.)
+   - Constructors for TransverseMercator, TransverseMercatorExact,
+     PolarStereographic, Geocentric, and Geodesic now check for obvious
+     problems with their arguments and throw an exception if necessary.
+   - Most classes now include inspector functions such as MajorRadius()
+     so that you can determine how instances were constructed.
+   - Add LambertConformalConic class.
+   - Add PolarStereographic::SetScale to allow the
+     latitude of true scale to be specified.
+   - Add solution and project files for Visual Studio 2008.
+   - Add GeographicErr for exceptions.
+   - Geoid changes:
+     - BUG FIX: fix typo in Geoid::Cache which could cause
+       a segmentation fault in some cases when the cached area spanned
+       the prime meridian.
+     - Include sufficient edge data to allow heights to be returned for
+       cached area without disk reads;
+     - Add inspector functions to query the extent of the cache.
 
  - <a href="http://geographiclib.sf.net/2009-11">Version 2009-11</a>
    (released 2009-11-03)
-  - Allow specification of "closest UTM zone" in GeographicLib::UTMUPS
-    and <a href="GeoConvert.1.html">GeoConvert</a> (via -t option).
-  - Utilities now complain is there are too many tokens on input lines.
-  - Include real-to-real versions of GeographicLib::DMS::Decode and
-    GeographicLib::DMS::Encode.
-  - More house-cleaning changes:
-    - Ensure that functions which return results through reference
-      arguments do not alter the arguments when an exception is thrown.
-    - Improve accuracy of GeographicLib::MGRS::Forward.
-    - Include more information in some error messages.
-    - Improve accuracy of inverse hyperbolic functions.
-    - Fix the way GeographicLib::Math functions handle different precisions.
+   - Allow specification of "closest UTM zone" in UTMUPS
+     and <a href="GeoConvert.1.html">GeoConvert</a> (via -t option).
+   - Utilities now complain is there are too many tokens on input lines.
+   - Include real-to-real versions of DMS::Decode and
+     DMS::Encode.
+   - More house-cleaning changes:
+     - Ensure that functions which return results through reference
+       arguments do not alter the arguments when an exception is thrown.
+     - Improve accuracy of MGRS::Forward.
+     - Include more information in some error messages.
+     - Improve accuracy of inverse hyperbolic functions.
+     - Fix the way Math functions handle different precisions.
 
  - <a href="http://geographiclib.sf.net/2009-10">Version 2009-10</a>
    (released 2009-10-18)
@@ -5474,101 +6323,102 @@ of the git repository for %GeographicLib.
 
  - <a href="http://geographiclib.sf.net/2009-09">Version 2009-09</a>
    (released 2009-09-01)
-  - Add GeographicLib::Geoid and
-    <a href="GeoidEval.1.html">GeoidEval</a> utility.
+   - Add Geoid and
+     <a href="GeoidEval.1.html">GeoidEval</a> utility.
 
  - <a href="http://geographiclib.sf.net/2009-08">Version 2009-08</a>
    (released 2009-08-14)
-  - Add GeographicLib::CassiniSoldner class and
-    <a href="GeodesicProj.1.html">EquidistantTest</a> utility.
-  - Fix bug in GeographicLib::Geodesic::Inverse where NaNs were
-    sometimes returned.
-  - INCOMPATIBLE CHANGE: AzimuthalEquidistant now returns the reciprocal
-    of the azimuthal scale instead of the reduced length.
-  - Add -n option to <a href="GeoConvert.1.html">GeoConvert</a>.
+   - Add CassiniSoldner class and
+     <a href="GeodesicProj.1.html">EquidistantTest</a> utility.
+   - Fix bug in Geodesic::Inverse where NaNs were
+     sometimes returned.
+   - INCOMPATIBLE CHANGE: AzimuthalEquidistant now returns the reciprocal
+     of the azimuthal scale instead of the reduced length.
+   - Add -n option to <a href="GeoConvert.1.html">GeoConvert</a>.
 
  - <a href="http://geographiclib.sf.net/2009-07">Version 2009-07</a>
    (released 2009-07-16)
-  - Speed up the series inversion code in tmseries.mac and geod.mac.
-  - Reference Borkowski in section on \ref geocentric.
+   - Speed up the series inversion code in tmseries.mac and geod.mac.
+   - Reference Borkowski in section on \ref geocentric.
 
  - <a href="http://geographiclib.sf.net/2009-06">Version 2009-06</a>
    (released 2009-06-01)
-  - Add routines to decode and encode zone+hemisphere to GeographicLib::UTMUPS.
-  - Clean up code in GeographicLib::Geodesic.
+   - Add routines to decode and encode zone+hemisphere to UTMUPS.
+   - Clean up code in Geodesic.
 
  - <a href="http://geographiclib.sf.net/2009-05">Version 2009-05</a>
    (released 2009-05-01)
-  - Improvements to GeographicLib::Geodesic:
-    - more economical series expansions,
-    - return reduced length (as does the
-      <a href="GeodSolve.1.html">Geod</a> utility),
-    - improved calculation of starting point for inverse method,
-    - use reduced length to give derivative for Newton's method.
-  - Add GeographicLib::AzimuthalEquidistant class.
-  - Make GeographicLib::Geocentric, GeographicLib::TransverseMercator,
-    and GeographicLib::PolarStereographic classes work with prolate
-    ellipsoids.
-  - <a href="CartConvert.1.html">CartConvert</a> checks its inputs more
-    carefully.
-  - Remove reference to defunct Constants.cpp from GeographicLib.vcproj.
+   - Improvements to Geodesic:
+     - more economical series expansions,
+     - return reduced length (as does the
+       <a href="GeodSolve.1.html">Geod</a> utility),
+     - improved calculation of starting point for inverse method,
+     - use reduced length to give derivative for Newton's method.
+   - Add AzimuthalEquidistant class.
+   - Make Geocentric, TransverseMercator,
+     and PolarStereographic classes work with prolate
+     ellipsoids.
+   - <a href="CartConvert.1.html">CartConvert</a> checks its inputs more
+     carefully.
+   - Remove reference to defunct Constants.cpp from GeographicLib.vcproj.
 
  - <a href="http://geographiclib.sf.net/2009-04">Version 2009-04</a>
    (released 2009-04-01)
-  - Use compile-time constants to select the order of series in
-    GeographicLib::TransverseMercator.
-  - 2x unroll of Clenshaw summation to avoid data shuffling.
-  - Simplification of GeographicLib::EllipticFunction::E.
-  - Use STATIC_ASSERT for compile-time checking of constants.
-  - Improvements to GeographicLib::Geodesic:
-    - compile-time option to change order of series used,
-    - post Maxima code for generating the series,
-    - tune the order of series for double,
-    - improvements in the selection of starting points for Newton's
-      method,
-    - accept and return spherical arc lengths,
-    - works with both oblate and prolate ellipsoids,
-    - add -a, -e, -b options to the <a href="GeodSolve.1.html">Geod</a>
-      utility.
+   - Use compile-time constants to select the order of series in
+     TransverseMercator.
+   - 2x unroll of Clenshaw summation to avoid data shuffling.
+   - Simplification of EllipticFunction::E.
+   - Use STATIC_ASSERT for compile-time checking of constants.
+   - Improvements to Geodesic:
+     - compile-time option to change order of series used,
+     - post Maxima code for generating the series,
+     - tune the order of series for double,
+     - improvements in the selection of starting points for Newton's
+       method,
+     - accept and return spherical arc lengths,
+     - works with both oblate and prolate ellipsoids,
+     - add -a, -e, -b options to the <a href="GeodSolve.1.html">Geod</a>
+       utility.
 
  - <a href="http://geographiclib.sf.net/2009-03">Version 2009-03</a>
    (released 2009-03-01)
-  - Add GeographicLib::Geodesic and the
-    <a href="GeodSolve.1.html">Geod</a> utility.
-  - Declare when no exceptions are thrown by functions.
-  - Minor changes to GeographicLib::DMS class.
-  - Use invf = 0 to mean a sphere in constructors to some classes.
-  - The makefile creates a library and includes an install target.
-  - Rename GeographicLib::ECEF to GeographicLib::Geocentric, ECEFConvert
-    to <a href="CartConvert.1.html">CartConvert</a>.
-  - Use inline functions to define constant doubles in Constants.hpp.
+   - Add Geodesic and the
+     <a href="GeodSolve.1.html">Geod</a> utility.
+   - Declare when no exceptions are thrown by functions.
+   - Minor changes to DMS class.
+   - Use invf = 0 to mean a sphere in constructors to some classes.
+   - The makefile creates a library and includes an install target.
+   - Rename ECEF to Geocentric, ECEFConvert
+     to <a href="CartConvert.1.html">CartConvert</a>.
+   - Use inline functions to define constant doubles in Constants.hpp.
 
  - <a href="http://geographiclib.sf.net/2009-02">Version 2009-02</a>
    (released 2009-01-30)
-  - Fix documentation of constructors (flattening -> inverse
-    flattening).
-  - Use std versions of math functions.
-  - Add GeographicLib::ECEF and GeographicLib::LocalCartesian classes
-    and the ECEFConvert utility.
-  - Gather the documentation on the \ref utilities onto one page.
+   - Fix documentation of constructors (flattening → inverse
+     flattening).
+   - Use std versions of math functions.
+   - Add ECEF and LocalCartesian classes
+     and the ECEFConvert utility.
+   - Gather the documentation on the \ref utilities onto one page.
 
  - <a href="http://geographiclib.sf.net/2009-01">Version 2009-01</a>
    (released 2009-01-12)
-  - First proper release of library.
-  - More robust GeographicLib::TransverseMercatorExact:
-    - Introduce \e extendp version of constructor,
-    - Test against extended test data,
-    - Optimize starting positions for Newton's method,
-    - Fix behavior near all singularities,
-    - Fix order dependence in C++ start-up code,
-    - Improved method of computing scale and convergence.
-  - Documentation on transverse Mercator projection.
-  - Add GeographicLib::MGRS, GeographicLib::UTMUPS, etc.
+   - First proper release of library.
+   - More robust TransverseMercatorExact:
+     - Introduce \e extendp version of constructor,
+     - Test against extended test data,
+     - Optimize starting positions for Newton's method,
+     - Fix behavior near all singularities,
+     - Fix order dependence in C++ start-up code,
+     - Improved method of computing scale and convergence.
+   - Documentation on transverse Mercator projection.
+   - Add MGRS, UTMUPS, etc.
 
  - Version 2008-09
-  - Ad hoc posting of information on the transverse Mercator projection.
+   - Ad hoc posting of information on the transverse Mercator projection.
 
 <center>
-Back to \ref geocentric.  Up to \ref contents.
+Back to \ref highprec.  Up to \ref contents.
 </center>
 **********************************************************************/
+}
diff --git a/doc/Makefile.in b/doc/Makefile.in
index 8596626..50e0bdd 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.12.2 from Makefile.am.
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -14,23 +14,51 @@
 
 @SET_MAKE@
 VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
+        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; \
-    test $$am__dry = yes; \
-  }
+  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@
@@ -51,7 +79,7 @@ build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
 subdir = doc
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
 	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
@@ -63,6 +91,18 @@ mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/include/GeographicLib/Config-ac.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 = \
@@ -70,9 +110,11 @@ am__can_run_installinfo = \
     n|no|NO) false;; \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -141,7 +183,6 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POD2HTML = @POD2HTML@
 POD2MAN = @POD2MAN@
-POW_LIB = @POW_LIB@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
@@ -353,11 +394,9 @@ mostlyclean-libtool:
 
 clean-libtool:
 	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
+tags TAGS:
 
-ctags: CTAGS
-CTAGS:
+ctags CTAGS:
 
 cscope cscopelist:
 
@@ -496,16 +535,17 @@ uninstall-am:
 .MAKE: install-am install-strip
 
 .PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	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 maintainer-clean-local mostlyclean \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	uninstall uninstall-am
+	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 \
+	maintainer-clean-local mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
+	uninstall-am
 
 
 doc: html/index.html
diff --git a/doc/NETGeographicLib.dox b/doc/NETGeographicLib.dox
index fd8f5e0..9ebab98 100644
--- a/doc/NETGeographicLib.dox
+++ b/doc/NETGeographicLib.dox
@@ -11,8 +11,8 @@
 /**
 \mainpage NETGeographicLib library
 \author Scott Heiman (mrmtdew2 at outlook.com)
-\version 1.35
-\date 2014-03-13
+\version 1.37
+\date 2014-08-08
 
 \section abstract Abstract
 
@@ -26,14 +26,14 @@ to the GeographicLib classes.  GeographicLib and NETGeographicLib is an
 integrated product.
 
 The NETGeographic project in the GeographicLib-vc10.sln file located in
-\<install folder\>/GeographicLib-1.35/windows will create the NETGeographicLib
+\<install folder\>/GeographicLib-1.37/windows will create the NETGeographicLib
 DLL.  The source code for NETGeographicLib is located in
-\<install folder\>/GeographicLib-1.35/dotnet/NETGeographicLib.  NETGeographicLib
+\<install folder\>/GeographicLib-1.37/dotnet/NETGeographicLib.  NETGeographicLib
 is not available for older versions of Microsoft Visual Studio.
 
 NETGeographicLib has been tested with C#, Managed C++, and Visual Basic.
 Sample code snippets can be found in
-\<install folder\>/GeographicLib-1.35/dotnet/examples.
+\<install folder\>/GeographicLib-1.37/dotnet/examples.
 
 \section differences Differences between NETGeographicLib and GeographicLib
 
@@ -135,7 +135,7 @@ to any Visual Basic source that uses NETGeographicLib classes.
 
 A C# sample application is provided that demonstrates NETGeographicLib classes.
 The source code for the sample application is located in
-\<install folder\>/GeographicLib-1.35/dotnet/Projections.  The sample
+\<install folder\>/GeographicLib-1.37/dotnet/Projections.  The sample
 application creates a tabbed dialog.  Each tab provides data entry fields that
 allow the user to exercise one or more NETGeographicLib classes.
 
@@ -159,6 +159,7 @@ The following table lists the source code that demonstrates specific classes.
 <TR><TD>ProjectionsPanel.cs</TD><TD>AzimuthalEquidistant, CassiniSoldner, Gnomonic</TD></TR>
 <TR><TD>SphericalHarmonicsPanel.cs</TD><TD>SphericalHarmonic, SphericalHarmonic1, SphericalHarmonic2, CircularEngine, SphericalCoefficients</TD></TR>
 <TR><TD>TypeIIIProjPanel.cs</TD><TD>UTMUPS, MGRS, OSGB</TD></TR>
+<TR><TD>RhumbPanel.cs</TD><TD>Rhumb, RhumbLine</TD></TR>
 </TABLE>
 </center>
 
diff --git a/doc/doxyfile-c.in b/doc/doxyfile-c.in
index f77a0b3..f0eef2b 100644
--- a/doc/doxyfile-c.in
+++ b/doc/doxyfile-c.in
@@ -324,30 +324,16 @@ INLINE_SIMPLE_STRUCTS  = NO
 
 TYPEDEF_HIDES_STRUCT   = NO
 
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
-# determine which symbols to keep in memory and which to flush to disk.
-# When the cache is full, less often used symbols will be written to disk.
-# For small to medium size projects (<1000 input files) the default value is
-# probably good enough. For larger projects a too small cache size can cause
-# doxygen to be busy swapping symbols to and from disk most of the time
-# causing a significant performance penalty.
-# If the system has enough physical memory increasing the cache will improve the
-# performance by keeping more symbols in memory. Note that the value works on
-# a logarithmic scale so increasing the size by one will roughly double the
-# memory usage. The cache size is given by this formula:
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
-# corresponding to a cache size of 2^16 = 65536 symbols.
-
-SYMBOL_CACHE_SIZE      = 0
-
-# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
-# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
-# their name and scope. Since this can be an expensive process and often the
-# same symbol appear multiple times in the code, doxygen keeps a cache of
-# pre-resolved symbols. If the cache is too small doxygen will become slower.
-# If the cache is too large, memory is wasted. The cache size is given by this
-# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
-# corresponding to a cache size of 2^16 = 65536 symbols.
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
 
 LOOKUP_CACHE_SIZE      = 0
 
@@ -1215,7 +1201,7 @@ MATHJAX_EXTENSIONS     =
 # typically be disabled. For large projects the javascript based search engine
 # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
 
-SEARCHENGINE           = NO
+SEARCHENGINE           = YES
 
 # When the SERVER_BASED_SEARCH tag is enabled the search engine will be
 # implemented using a PHP enabled web server instead of at the web client
diff --git a/doc/doxyfile-for.in b/doc/doxyfile-for.in
index 47ef530..79ff746 100644
--- a/doc/doxyfile-for.in
+++ b/doc/doxyfile-for.in
@@ -324,30 +324,16 @@ INLINE_SIMPLE_STRUCTS  = NO
 
 TYPEDEF_HIDES_STRUCT   = NO
 
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
-# determine which symbols to keep in memory and which to flush to disk.
-# When the cache is full, less often used symbols will be written to disk.
-# For small to medium size projects (<1000 input files) the default value is
-# probably good enough. For larger projects a too small cache size can cause
-# doxygen to be busy swapping symbols to and from disk most of the time
-# causing a significant performance penalty.
-# If the system has enough physical memory increasing the cache will improve the
-# performance by keeping more symbols in memory. Note that the value works on
-# a logarithmic scale so increasing the size by one will roughly double the
-# memory usage. The cache size is given by this formula:
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
-# corresponding to a cache size of 2^16 = 65536 symbols.
-
-SYMBOL_CACHE_SIZE      = 0
-
-# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
-# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
-# their name and scope. Since this can be an expensive process and often the
-# same symbol appear multiple times in the code, doxygen keeps a cache of
-# pre-resolved symbols. If the cache is too small doxygen will become slower.
-# If the cache is too large, memory is wasted. The cache size is given by this
-# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
-# corresponding to a cache size of 2^16 = 65536 symbols.
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
 
 LOOKUP_CACHE_SIZE      = 0
 
@@ -1215,7 +1201,7 @@ MATHJAX_EXTENSIONS     =
 # typically be disabled. For large projects the javascript based search engine
 # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
 
-SEARCHENGINE           = NO
+SEARCHENGINE           = YES
 
 # When the SERVER_BASED_SEARCH tag is enabled the search engine will be
 # implemented using a PHP enabled web server instead of at the web client
diff --git a/doc/doxyfile-net.in b/doc/doxyfile-net.in
index b9fedb5..500d66b 100644
--- a/doc/doxyfile-net.in
+++ b/doc/doxyfile-net.in
@@ -324,30 +324,16 @@ INLINE_SIMPLE_STRUCTS  = NO
 
 TYPEDEF_HIDES_STRUCT   = NO
 
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
-# determine which symbols to keep in memory and which to flush to disk.
-# When the cache is full, less often used symbols will be written to disk.
-# For small to medium size projects (<1000 input files) the default value is
-# probably good enough. For larger projects a too small cache size can cause
-# doxygen to be busy swapping symbols to and from disk most of the time
-# causing a significant performance penalty.
-# If the system has enough physical memory increasing the cache will improve the
-# performance by keeping more symbols in memory. Note that the value works on
-# a logarithmic scale so increasing the size by one will roughly double the
-# memory usage. The cache size is given by this formula:
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
-# corresponding to a cache size of 2^16 = 65536 symbols.
-
-SYMBOL_CACHE_SIZE      = 0
-
-# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
-# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
-# their name and scope. Since this can be an expensive process and often the
-# same symbol appear multiple times in the code, doxygen keeps a cache of
-# pre-resolved symbols. If the cache is too small doxygen will become slower.
-# If the cache is too large, memory is wasted. The cache size is given by this
-# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
-# corresponding to a cache size of 2^16 = 65536 symbols.
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
 
 LOOKUP_CACHE_SIZE      = 0
 
@@ -1216,7 +1202,7 @@ MATHJAX_EXTENSIONS     =
 # typically be disabled. For large projects the javascript based search engine
 # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
 
-SEARCHENGINE           = NO
+SEARCHENGINE           = YES
 
 # When the SERVER_BASED_SEARCH tag is enabled the search engine will be
 # implemented using a PHP enabled web server instead of at the web client
diff --git a/doc/doxyfile.in b/doc/doxyfile.in
index 448affa..38e4666 100644
--- a/doc/doxyfile.in
+++ b/doc/doxyfile.in
@@ -324,30 +324,16 @@ INLINE_SIMPLE_STRUCTS  = NO
 
 TYPEDEF_HIDES_STRUCT   = NO
 
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
-# determine which symbols to keep in memory and which to flush to disk.
-# When the cache is full, less often used symbols will be written to disk.
-# For small to medium size projects (<1000 input files) the default value is
-# probably good enough. For larger projects a too small cache size can cause
-# doxygen to be busy swapping symbols to and from disk most of the time
-# causing a significant performance penalty.
-# If the system has enough physical memory increasing the cache will improve the
-# performance by keeping more symbols in memory. Note that the value works on
-# a logarithmic scale so increasing the size by one will roughly double the
-# memory usage. The cache size is given by this formula:
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
-# corresponding to a cache size of 2^16 = 65536 symbols.
-
-SYMBOL_CACHE_SIZE      = 0
-
-# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
-# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
-# their name and scope. Since this can be an expensive process and often the
-# same symbol appear multiple times in the code, doxygen keeps a cache of
-# pre-resolved symbols. If the cache is too small doxygen will become slower.
-# If the cache is too large, memory is wasted. The cache size is given by this
-# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
-# corresponding to a cache size of 2^16 = 65536 symbols.
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
 
 LOOKUP_CACHE_SIZE      = 0
 
@@ -1217,7 +1203,7 @@ MATHJAX_EXTENSIONS     =
 # typically be disabled. For large projects the javascript based search engine
 # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
 
-SEARCHENGINE           = NO
+SEARCHENGINE           = YES
 
 # When the SERVER_BASED_SEARCH tag is enabled the search engine will be
 # implemented using a PHP enabled web server instead of at the web client
diff --git a/dotnet/NETGeographicLib/AlbersEqualArea.cpp b/dotnet/NETGeographicLib/AlbersEqualArea.cpp
index 87a3160..d25546a 100644
--- a/dotnet/NETGeographicLib/AlbersEqualArea.cpp
+++ b/dotnet/NETGeographicLib/AlbersEqualArea.cpp
@@ -33,13 +33,13 @@ AlbersEqualArea::AlbersEqualArea( StandardTypes type )
         switch ( type )
         {
         case StandardTypes::CylindricalEqualArea:
-            m_pAlbersEqualArea = new GeographicLib::AlbersEqualArea( GeographicLib::AlbersEqualArea::CylindricalEqualArea );
+            m_pAlbersEqualArea = new GeographicLib::AlbersEqualArea( GeographicLib::AlbersEqualArea::CylindricalEqualArea() );
             break;
         case StandardTypes::AzimuthalEqualAreaNorth:
-            m_pAlbersEqualArea = new GeographicLib::AlbersEqualArea( GeographicLib::AlbersEqualArea::AzimuthalEqualAreaNorth );
+            m_pAlbersEqualArea = new GeographicLib::AlbersEqualArea( GeographicLib::AlbersEqualArea::AzimuthalEqualAreaNorth() );
             break;
         case StandardTypes::AzimuthalEqualAreaSouth:
-            m_pAlbersEqualArea = new GeographicLib::AlbersEqualArea( GeographicLib::AlbersEqualArea::AzimuthalEqualAreaSouth );
+            m_pAlbersEqualArea = new GeographicLib::AlbersEqualArea( GeographicLib::AlbersEqualArea::AzimuthalEqualAreaSouth() );
             break;
         }
     }
diff --git a/dotnet/NETGeographicLib/AzimuthalEquidistant.cpp b/dotnet/NETGeographicLib/AzimuthalEquidistant.cpp
index 5279ee9..35b6f2d 100644
--- a/dotnet/NETGeographicLib/AzimuthalEquidistant.cpp
+++ b/dotnet/NETGeographicLib/AzimuthalEquidistant.cpp
@@ -32,7 +32,7 @@ AzimuthalEquidistant::AzimuthalEquidistant(void)
 {
     try
     {
-        m_pAzimuthalEquidistant = new GeographicLib::AzimuthalEquidistant( GeographicLib::Geodesic::WGS84 );
+        m_pAzimuthalEquidistant = new GeographicLib::AzimuthalEquidistant( GeographicLib::Geodesic::WGS84() );
     }
     catch ( std::bad_alloc )
     {
diff --git a/dotnet/NETGeographicLib/CassiniSoldner.cpp b/dotnet/NETGeographicLib/CassiniSoldner.cpp
index cfaa96a..82652a7 100644
--- a/dotnet/NETGeographicLib/CassiniSoldner.cpp
+++ b/dotnet/NETGeographicLib/CassiniSoldner.cpp
@@ -33,7 +33,7 @@ CassiniSoldner::CassiniSoldner(double lat0, double lon0)
 {
     try
     {
-        m_pCassiniSoldner = new GeographicLib::CassiniSoldner( GeographicLib::Geodesic::WGS84 );
+        m_pCassiniSoldner = new GeographicLib::CassiniSoldner( GeographicLib::Geodesic::WGS84() );
         m_pCassiniSoldner->Reset(lat0, lon0);
     }
     catch ( std::bad_alloc )
diff --git a/dotnet/NETGeographicLib/Ellipsoid.cpp b/dotnet/NETGeographicLib/Ellipsoid.cpp
index 8f5acd6..63d61f9 100644
--- a/dotnet/NETGeographicLib/Ellipsoid.cpp
+++ b/dotnet/NETGeographicLib/Ellipsoid.cpp
@@ -32,7 +32,7 @@ Ellipsoid::Ellipsoid()
 {
     try
     {
-        m_pEllipsoid = new GeographicLib::Ellipsoid( GeographicLib::Ellipsoid::WGS84 );
+        m_pEllipsoid = new GeographicLib::Ellipsoid( GeographicLib::Ellipsoid::WGS84() );
     }
     catch ( std::bad_alloc )
     {
diff --git a/dotnet/NETGeographicLib/Ellipsoid.h b/dotnet/NETGeographicLib/Ellipsoid.h
index 751bf6c..29048ca 100644
--- a/dotnet/NETGeographicLib/Ellipsoid.h
+++ b/dotnet/NETGeographicLib/Ellipsoid.h
@@ -50,7 +50,7 @@ namespace NETGeographicLib
         // A pointer to the unmanaged GeographicLib::Ellipsoid
         GeographicLib::Ellipsoid* m_pEllipsoid;
 
-        // Th efinalizer frees the unmanaged memory when the object is destroyed.
+        // The finalizer frees the unmanaged memory when the object is destroyed.
         !Ellipsoid();
     public:
         /** \name Constructor
diff --git a/dotnet/NETGeographicLib/GeoCoords.cpp b/dotnet/NETGeographicLib/GeoCoords.cpp
index a060068..2786f86 100644
--- a/dotnet/NETGeographicLib/GeoCoords.cpp
+++ b/dotnet/NETGeographicLib/GeoCoords.cpp
@@ -213,15 +213,15 @@ System::String^ GeoCoords::MGRSRepresentation(int prec)
 }
 
 //*****************************************************************************
-System::String^ GeoCoords::UTMUPSRepresentation(int prec)
+System::String^ GeoCoords::UTMUPSRepresentation(int prec, bool abbrev)
 {
-    return gcnew System::String( m_pGeoCoords->UTMUPSRepresentation(prec).c_str() );
+    return gcnew System::String( m_pGeoCoords->UTMUPSRepresentation(prec, abbrev).c_str() );
 }
 
 //*****************************************************************************
-System::String^ GeoCoords::UTMUPSRepresentation(bool northp, int prec)
+System::String^ GeoCoords::UTMUPSRepresentation(bool northp, int prec, bool abbrev)
 {
-    return gcnew System::String( m_pGeoCoords->UTMUPSRepresentation(northp, prec).c_str() );
+    return gcnew System::String( m_pGeoCoords->UTMUPSRepresentation(northp, prec, abbrev).c_str() );
 }
 
 //*****************************************************************************
@@ -231,13 +231,13 @@ System::String^ GeoCoords::AltMGRSRepresentation(int prec)
 }
 
 //*****************************************************************************
-System::String^ GeoCoords::AltUTMUPSRepresentation(int prec)
+System::String^ GeoCoords::AltUTMUPSRepresentation(int prec, bool abbrev)
 {
-    return gcnew System::String( m_pGeoCoords->AltUTMUPSRepresentation(prec).c_str() );
+    return gcnew System::String( m_pGeoCoords->AltUTMUPSRepresentation(prec, abbrev).c_str() );
 }
 
 //*****************************************************************************
-System::String^ GeoCoords::AltUTMUPSRepresentation(bool northp, int prec)
+System::String^ GeoCoords::AltUTMUPSRepresentation(bool northp, int prec, bool abbrev)
 {
-    return gcnew System::String( m_pGeoCoords->AltUTMUPSRepresentation(northp, prec).c_str() );
+    return gcnew System::String( m_pGeoCoords->AltUTMUPSRepresentation(northp, prec, abbrev).c_str() );
 }
diff --git a/dotnet/NETGeographicLib/GeoCoords.h b/dotnet/NETGeographicLib/GeoCoords.h
index bbc012a..1ce789a 100644
--- a/dotnet/NETGeographicLib/GeoCoords.h
+++ b/dotnet/NETGeographicLib/GeoCoords.h
@@ -95,7 +95,7 @@ namespace NETGeographicLib
          *   -  43d16'12"E 33d26'24"N
          *   -  43:16:12E  33:26:24
          * - MGRS
-         *   -  38SLC301
+         *   -  38SLC30
          *   -  38SLC391014
          *   -  38SLC3918701405
          *   -  37SHT9708
@@ -390,6 +390,8 @@ namespace NETGeographicLib
          * UTM/UPS string.
          *
          * @param[in] prec precision (relative to about 1m)
+         * @param[in] abbrev if true (the default) use abbreviated (n/s) notation
+         *   for hemisphere; otherwise spell out the hemisphere (north/south)
          * @exception std::bad_alloc if memory for the string can't be allocated.
          * @return UTM/UPS string representation: zone designator, easting, and
          *   northing.
@@ -402,20 +404,22 @@ namespace NETGeographicLib
          * - prec = 6, 1μm
          * - prec = 9 (max), 1nm
          **********************************************************************/
-        System::String^ UTMUPSRepresentation(int prec);
+        System::String^ UTMUPSRepresentation(int prec, bool abbrev);
 
         /**
          * UTM/UPS string with hemisphere override.
          *
-         * @param[in] prec precision (relative to about 1m)
          * @param[in] northp hemisphere override
+         * @param[in] prec precision (relative to about 1m)
+         * @param[in] abbrev if true (the default) use abbreviated (n/s) notation
+         *   for hemisphere; otherwise spell out the hemisphere (north/south)
          * @exception GeographicErr if the hemisphere override attempts to change
-         *   UPS N to UPS S or vice verse.
+         *   UPS N to UPS S or vice versa.
          * @exception std::bad_alloc if memory for the string can't be allocated.
          * @return UTM/UPS string representation: zone designator, easting, and
          *   northing.
          **********************************************************************/
-        System::String^ UTMUPSRepresentation(bool northp, int prec);
+        System::String^ UTMUPSRepresentation(bool northp, int prec, bool abbrev);
 
         /**
          * MGRS string for the alternate zone.  See GeoCoords::MGRSRepresentation.
@@ -431,24 +435,28 @@ namespace NETGeographicLib
          * GeoCoords::UTMUPSRepresentation.
          *
          * @param[in] prec precision (relative to about 1m)
+         * @param[in] abbrev if true (the default) use abbreviated (n/s) notation
+         *   for hemisphere; otherwise spell out the hemisphere (north/south)
          * @exception std::bad_alloc if memory for the string can't be allocated.
          * @return UTM/UPS string representation: zone designator, easting, and
          *   northing.
          **********************************************************************/
-        System::String^ AltUTMUPSRepresentation(int prec);
+        System::String^ AltUTMUPSRepresentation(int prec, bool abbrev);
 
         /**
          * UTM/UPS string for the alternate zone, with hemisphere override.
          *
-         * @param[in] prec precision (relative to about 1m)
          * @param[in] northp hemisphere override
+         * @param[in] prec precision (relative to about 1m)
+         * @param[in] abbrev if true (the default) use abbreviated (n/s) notation
+         *   for hemisphere; otherwise spell out the hemisphere (north/south)
          * @exception GeographicErr if the hemisphere override attempts to change
-         *   UPS N to UPS S or vice verse.
+         *   UPS n to UPS s or vice verse.
          * @exception std::bad_alloc if memory for the string can't be allocated.
          * @return UTM/UPS string representation: zone designator, easting, and
          *   northing.
          **********************************************************************/
-        System::String^ AltUTMUPSRepresentation(bool northp, int prec);
+        System::String^ AltUTMUPSRepresentation(bool northp, int prec, bool abbrev);
         ///@}
 
         /** \name Inspector functions
diff --git a/dotnet/NETGeographicLib/Geocentric.cpp b/dotnet/NETGeographicLib/Geocentric.cpp
index 2bbfade..902059b 100644
--- a/dotnet/NETGeographicLib/Geocentric.cpp
+++ b/dotnet/NETGeographicLib/Geocentric.cpp
@@ -33,7 +33,7 @@ Geocentric::Geocentric(void)
     try
     {
         m_pGeocentric = new GeographicLib::Geocentric(
-            GeographicLib::Geocentric::WGS84 );
+            GeographicLib::Geocentric::WGS84() );
     }
     catch (std::bad_alloc)
     {
diff --git a/dotnet/NETGeographicLib/Geodesic.cpp b/dotnet/NETGeographicLib/Geodesic.cpp
index dadd022..e78fdce 100644
--- a/dotnet/NETGeographicLib/Geodesic.cpp
+++ b/dotnet/NETGeographicLib/Geodesic.cpp
@@ -50,7 +50,7 @@ Geodesic::Geodesic()
 {
     try
     {
-        m_pGeodesic = new GeographicLib::Geodesic( GeographicLib::Geodesic::WGS84 );
+        m_pGeodesic = new GeographicLib::Geodesic( GeographicLib::Geodesic::WGS84() );
     }
     catch ( std::bad_alloc )
     {
diff --git a/dotnet/NETGeographicLib/GeodesicExact.cpp b/dotnet/NETGeographicLib/GeodesicExact.cpp
index aa45347..2824191 100644
--- a/dotnet/NETGeographicLib/GeodesicExact.cpp
+++ b/dotnet/NETGeographicLib/GeodesicExact.cpp
@@ -32,7 +32,7 @@ GeodesicExact::GeodesicExact()
 {
     try
     {
-        m_pGeodesicExact = new GeographicLib::GeodesicExact( GeographicLib::GeodesicExact::WGS84 );
+        m_pGeodesicExact = new GeographicLib::GeodesicExact( GeographicLib::GeodesicExact::WGS84() );
     }
     catch ( std::bad_alloc err )
     {
diff --git a/dotnet/NETGeographicLib/GeodesicLine.cpp b/dotnet/NETGeographicLib/GeodesicLine.cpp
index 2c6d683..6b59ed5 100644
--- a/dotnet/NETGeographicLib/GeodesicLine.cpp
+++ b/dotnet/NETGeographicLib/GeodesicLine.cpp
@@ -52,7 +52,7 @@ GeodesicLine::GeodesicLine(double lat1, double lon1, double azi1,
     try
     {
         m_pGeodesicLine = new GeographicLib::GeodesicLine(
-            GeographicLib::Geodesic::WGS84, lat1, lon1, azi1,
+            GeographicLib::Geodesic::WGS84(), lat1, lon1, azi1,
             static_cast<unsigned>(caps) );
     }
     catch ( std::bad_alloc )
diff --git a/dotnet/NETGeographicLib/GeodesicLineExact.cpp b/dotnet/NETGeographicLib/GeodesicLineExact.cpp
index fb8ab72..e3f1518 100644
--- a/dotnet/NETGeographicLib/GeodesicLineExact.cpp
+++ b/dotnet/NETGeographicLib/GeodesicLineExact.cpp
@@ -52,7 +52,7 @@ GeodesicLineExact::GeodesicLineExact(double lat1, double lon1, double azi1,
     try
     {
         m_pGeodesicLineExact = new GeographicLib::GeodesicLineExact(
-            GeographicLib::GeodesicExact::WGS84, lat1, lon1, azi1,
+            GeographicLib::GeodesicExact::WGS84(), lat1, lon1, azi1,
             static_cast<unsigned>(caps) );
     }
     catch ( std::bad_alloc )
diff --git a/dotnet/NETGeographicLib/Geoid.h b/dotnet/NETGeographicLib/Geoid.h
index a3b9b81..eb45f35 100644
--- a/dotnet/NETGeographicLib/Geoid.h
+++ b/dotnet/NETGeographicLib/Geoid.h
@@ -357,22 +357,22 @@ namespace NETGeographicLib
         /**
          * @return the default path for geoid data files.
          *
-         * This is the value of the environment variable GEOID_PATH, if set;
-         * otherwise, it is $GEOGRAPHICLIB_DATA/geoids if the environment variable
+         * This is the value of the environment variable
+         * GEOGRAPHICLIB_GEOID_PATH, if set; otherwise, it is
+         * $GEOGRAPHICLIB_DATA/geoids if the environment variable
          * GEOGRAPHICLIB_DATA is set; otherwise, it is a compile-time default
          * (/usr/local/share/GeographicLib/geoids on non-Windows systems and
-         * C:/Documents and Settings/All Users/Application
-         * Data/GeographicLib/geoids on Windows systems).
+         * C:/ProgramData/GeographicLib/geoids on Windows systems).
          **********************************************************************/
         static System::String^ DefaultGeoidPath();
 
         /**
          * @return the default name for the geoid.
          *
-         * This is the value of the environment variable GEOID_NAME, if set,
-         * otherwise, it is "egm96-5".  The Geoid class does not use this function;
-         * it is just provided as a convenience for a calling program when
-         * constructing a Geoid object.
+         * This is the value of the environment variable
+         * GEOGRAPHICLIB_GEOID_NAME, if set, otherwise, it is "egm96-5".  The
+         * Geoid class does not use this function; it is just provided as a
+         * convenience for a calling program when constructing a Geoid object.
          **********************************************************************/
         static System::String^ DefaultGeoidName();
     };
diff --git a/dotnet/NETGeographicLib/Gnomonic.cpp b/dotnet/NETGeographicLib/Gnomonic.cpp
index 5cfee28..2a78c52 100644
--- a/dotnet/NETGeographicLib/Gnomonic.cpp
+++ b/dotnet/NETGeographicLib/Gnomonic.cpp
@@ -49,7 +49,7 @@ Gnomonic::Gnomonic()
 {
     try
     {
-        m_pGnomonic = new GeographicLib::Gnomonic( GeographicLib::Geodesic::WGS84 );
+        m_pGnomonic = new GeographicLib::Gnomonic( GeographicLib::Geodesic::WGS84() );
     }
     catch ( std::bad_alloc )
     {
diff --git a/dotnet/NETGeographicLib/GravityModel.h b/dotnet/NETGeographicLib/GravityModel.h
index b56d5f0..7ea8e2d 100644
--- a/dotnet/NETGeographicLib/GravityModel.h
+++ b/dotnet/NETGeographicLib/GravityModel.h
@@ -491,19 +491,18 @@ namespace NETGeographicLib
         /**
          * @return the default path for gravity model data files.
          *
-         * This is the value of the environment variable GRAVITY_PATH, if set;
+         * This is the value of the environment variable GEOGRAPHICLIB_GRAVITY_PATH, if set;
          * otherwise, it is $GEOGRAPHICLIB_DATA/gravity if the environment variable
          * GEOGRAPHICLIB_DATA is set; otherwise, it is a compile-time default
          * (/usr/local/share/GeographicLib/gravity on non-Windows systems and
-         * C:/Documents and Settings/All Users/Application
-         * Data/GeographicLib/gravity on Windows systems).
+         * C:/ProgramData/GeographicLib/gravity on Windows systems).
          **********************************************************************/
         static System::String^ DefaultGravityPath();
 
         /**
          * @return the default name for the gravity model.
          *
-         * This is the value of the environment variable GRAVITY_NAME, if set,
+         * This is the value of the environment variable GEOGRAPHICLIB_GRAVITY_NAME, if set,
          * otherwise, it is "egm96".  The GravityModel class does not use
          * this function; it is just provided as a convenience for a calling
          * program when constructing a GravityModel object.
diff --git a/dotnet/NETGeographicLib/LambertConformalConic.cpp b/dotnet/NETGeographicLib/LambertConformalConic.cpp
index 42fd4cb..37cafac 100644
--- a/dotnet/NETGeographicLib/LambertConformalConic.cpp
+++ b/dotnet/NETGeographicLib/LambertConformalConic.cpp
@@ -93,7 +93,7 @@ LambertConformalConic::LambertConformalConic()
     try
     {
         m_pLambertConformalConic = new GeographicLib::LambertConformalConic(
-            GeographicLib::LambertConformalConic::Mercator );
+            GeographicLib::LambertConformalConic::Mercator() );
     }
     catch ( std::bad_alloc )
     {
diff --git a/dotnet/NETGeographicLib/LocalCartesian.cpp b/dotnet/NETGeographicLib/LocalCartesian.cpp
index 0bcb37b..8e4f772 100644
--- a/dotnet/NETGeographicLib/LocalCartesian.cpp
+++ b/dotnet/NETGeographicLib/LocalCartesian.cpp
@@ -51,7 +51,7 @@ LocalCartesian::LocalCartesian(double lat0, double lon0, double h0 )
     try
     {
         m_pLocalCartesian = new GeographicLib::LocalCartesian( lat0, lon0, h0,
-            GeographicLib::Geocentric::WGS84 );
+            GeographicLib::Geocentric::WGS84() );
     }
     catch ( std::bad_alloc )
     {
@@ -81,7 +81,7 @@ LocalCartesian::LocalCartesian()
     try
     {
         m_pLocalCartesian = new GeographicLib::LocalCartesian(
-            GeographicLib::Geocentric::WGS84 );
+            GeographicLib::Geocentric::WGS84() );
     }
     catch ( std::bad_alloc )
     {
diff --git a/dotnet/NETGeographicLib/MGRS.h b/dotnet/NETGeographicLib/MGRS.h
index e3c0a61..c3ae100 100644
--- a/dotnet/NETGeographicLib/MGRS.h
+++ b/dotnet/NETGeographicLib/MGRS.h
@@ -79,6 +79,7 @@ namespace NETGeographicLib
          *   allocated.
          *
          * \e prec specifies the precision of the MGRS string as follows:
+         * - prec = −1 (min), only the grid zone is returned
          * - prec = 0 (min), 100 km
          * - prec = 1, 10 km
          * - prec = 2, 1 km
@@ -114,7 +115,7 @@ namespace NETGeographicLib
          * them \e within the allowed range.  (This includes reducing a southern
          * hemisphere northing of 10000 km by 4 nm so that it is placed in latitude
          * band M.)  The UTM or UPS coordinates are truncated to requested
-         * precision to determine the MGRS coordinate.  Thus in UTM zone 38N, the
+         * precision to determine the MGRS coordinate.  Thus in UTM zone 38n, the
          * square area with easting in [444 km, 445 km) and northing in [3688 km,
          * 3689 km) maps to MGRS coordinate 38SMB4488 (at \e prec = 2, 1 km),
          * Khulani Sq., Baghdad.
@@ -131,6 +132,11 @@ namespace NETGeographicLib
          * of a band boundary.  For prec in [6, 11], the conversion is accurate to
          * roundoff.
          *
+         * If \e prec = -1, then the "grid zone designation", e.g., 18T, is
+         * returned.  This consists of the UTM zone number (absent for UPS) and the
+         * first letter of the MGRS string which labels the latitude band for UTM
+         * and the hemisphere for UPS.
+         *
          * If \e x or \e y is NaN or if \e zone is UTMUPS::INVALID, the returned
          * MGRS string is "INVALID".
          *
@@ -157,6 +163,7 @@ namespace NETGeographicLib
          *   allowed range.
          * @exception GeographicErr if \e lat is inconsistent with the given UTM
          *   coordinates.
+         * @exception std::bad_alloc if the memory for \e mgrs can't be allocated.
          *
          * The latitude is ignored for \e zone = 0 (UPS); otherwise the latitude is
          * used to determine the latitude band and this is checked for consistency
@@ -199,6 +206,12 @@ namespace NETGeographicLib
          * centerp = true the conversion from MGRS to geographic and back is
          * stable.  This is not assured if \e centerp = false.
          *
+         * If a "grid zone designation" (for example, 18T or A) is given, then some
+         * suitable (but essentially arbitrary) point within that grid zone is
+         * returned.  The main utility of the conversion is to allow \e zone and \e
+         * northp to be determined.  In this case, the \e centerp parameter is
+         * ignored.
+         *
          * If the first 3 characters of \e mgrs are "INV", then \e x and \e y are
          * set to NaN and \e zone is set to UTMUPS::INVALID.
          *
diff --git a/dotnet/NETGeographicLib/MagneticModel.cpp b/dotnet/NETGeographicLib/MagneticModel.cpp
index cfa1cb9..7fbb242 100644
--- a/dotnet/NETGeographicLib/MagneticModel.cpp
+++ b/dotnet/NETGeographicLib/MagneticModel.cpp
@@ -72,7 +72,7 @@ MagneticModel::MagneticModel(System::String^ name,
         m_pMagneticModel = new GeographicLib::MagneticModel(
             StringConvert::ManagedToUnmanaged( name ),
             StringConvert::ManagedToUnmanaged( path ),
-            GeographicLib::Geocentric::WGS84 );
+            GeographicLib::Geocentric::WGS84() );
     }
     catch ( std::bad_alloc )
     {
diff --git a/dotnet/NETGeographicLib/MagneticModel.h b/dotnet/NETGeographicLib/MagneticModel.h
index ff2d74e..71804af 100644
--- a/dotnet/NETGeographicLib/MagneticModel.h
+++ b/dotnet/NETGeographicLib/MagneticModel.h
@@ -343,22 +343,23 @@ namespace NETGeographicLib
         /**
          * @return the default path for magnetic model data files.
          *
-         * This is the value of the environment variable MAGNETIC_PATH, if set;
-         * otherwise, it is $GEOGRAPHICLIB_DATA/magnetic if the environment
-         * variable GEOGRAPHICLIB_DATA is set; otherwise, it is a compile-time
-         * default (/usr/local/share/GeographicLib/magnetic on non-Windows systems
-         * and C:/Documents and Settings/All Users/Application
-         * Data/GeographicLib/magnetic on Windows systems).
+         * This is the value of the environment variable
+         * GEOGRAPHICLIB_MAGNETIC_PATH, if set; otherwise, it is
+         * $GEOGRAPHICLIB_DATA/magnetic if the environment variable
+         * GEOGRAPHICLIB_DATA is set; otherwise, it is a compile-time default
+         * (/usr/local/share/GeographicLib/magnetic on non-Windows systems and
+         * C:/ProgramData/GeographicLib/magnetic on Windows systems).
          **********************************************************************/
         static System::String^ DefaultMagneticPath();
 
         /**
          * @return the default name for the magnetic model.
          *
-         * This is the value of the environment variable MAGNETIC_NAME, if set,
-         * otherwise, it is "wmm2010".  The MagneticModel class does not use this
-         * function; it is just provided as a convenience for a calling program
-         * when constructing a MagneticModel object.
+         * This is the value of the environment variable
+         * GEOGRAPHICLIB_MAGNETIC_NAME, if set, otherwise, it is "wmm2010".
+         * The MagneticModel class does not use this function; it is just
+         * provided as a convenience for a calling program when constructing a
+         * MagneticModel object.
          **********************************************************************/
         static System::String^ DefaultMagneticName();
     };
diff --git a/dotnet/NETGeographicLib/NormalGravity.cpp b/dotnet/NETGeographicLib/NormalGravity.cpp
index b693eea..b394ca8 100644
--- a/dotnet/NETGeographicLib/NormalGravity.cpp
+++ b/dotnet/NETGeographicLib/NormalGravity.cpp
@@ -51,8 +51,8 @@ NormalGravity::NormalGravity(StandardModels model)
     try
     {
         m_pNormalGravity = model == StandardModels::WGS84 ?
-            new GeographicLib::NormalGravity( GeographicLib::NormalGravity::WGS84 ) :
-            new GeographicLib::NormalGravity( GeographicLib::NormalGravity::GRS80 );
+            new GeographicLib::NormalGravity( GeographicLib::NormalGravity::WGS84() ) :
+            new GeographicLib::NormalGravity( GeographicLib::NormalGravity::GRS80() );
     }
     catch ( std::bad_alloc )
     {
@@ -172,3 +172,29 @@ double NormalGravity::GravityFlattening::get()
 //*****************************************************************************
 double NormalGravity::SurfacePotential::get()
 { return m_pNormalGravity->SurfacePotential(); }
+
+//*****************************************************************************
+NormalGravity^ NormalGravity::WGS84()
+{
+    return gcnew NormalGravity( StandardModels::WGS84 );
+}
+
+//*****************************************************************************
+NormalGravity^ NormalGravity::GRS80()
+{
+    return gcnew NormalGravity( StandardModels::GRS80 );
+}
+
+//*****************************************************************************
+double NormalGravity::J2ToFlattening(double a, double GM, double omega,
+                                     double J2)
+{
+    return GeographicLib::NormalGravity::J2ToFlattening( a, GM, omega, J2);
+}
+
+//*****************************************************************************
+double NormalGravity::FlatteningToJ2(double a, double GM, double omega,
+                                     double f)
+{
+    return GeographicLib::NormalGravity::FlatteningToJ2( a, GM, omega, f);
+}
diff --git a/dotnet/NETGeographicLib/NormalGravity.h b/dotnet/NETGeographicLib/NormalGravity.h
index 2deeecb..34cd6a6 100644
--- a/dotnet/NETGeographicLib/NormalGravity.h
+++ b/dotnet/NETGeographicLib/NormalGravity.h
@@ -77,12 +77,14 @@ namespace NETGeographicLib
         // the finalizer frees the unmanaged memory when the object is destroyed.
         !NormalGravity(void);
     public:
+        /// \cond SKIP
         //! The enumerated standard gravity models.
         enum class StandardModels
         {
             WGS84,  //!< WGS84 gravity model.
             GRS80   //!< GRS80 gravity model.
         };
+        /// \endcond
 
         /** \name Setting up the normal gravity
          **********************************************************************/
@@ -315,5 +317,45 @@ namespace NETGeographicLib
          **********************************************************************/
         Geocentric^ Earth();
         ///@}
+
+        /**
+         * A global instantiation of NormalGravity for the WGS84 ellipsoid.
+        **********************************************************************/
+        static NormalGravity^ WGS84();
+
+        /**
+         * A global instantiation of NormalGravity for the GRS80 ellipsoid.
+        **********************************************************************/
+        static NormalGravity^ GRS80();
+
+        /**
+         * Compute the flattening from the dynamical form factor.
+         *
+         * @param[in] a equatorial radius (meters).
+         * @param[in] GM mass constant of the ellipsoid
+         *   (meters<sup>3</sup>/seconds<sup>2</sup>); this is the product of \e G
+         *   the gravitational constant and \e M the mass of the earth (usually
+         *   including the mass of the earth's atmosphere).
+         * @param[in] omega the angular velocity (rad s<sup>−1</sup>).
+         * @param[in] J2 the dynamical form factor.
+         * @return \e f the flattening of the ellipsoid.
+         **********************************************************************/
+        static double J2ToFlattening(double a, double GM, double omega,
+                                     double J2);
+
+        /**
+         * Compute the dynamical form factor from the flattening.
+         *
+         * @param[in] a equatorial radius (meters).
+         * @param[in] GM mass constant of the ellipsoid
+         *   (meters<sup>3</sup>/seconds<sup>2</sup>); this is the product of \e G
+         *   the gravitational constant and \e M the mass of the earth (usually
+         *   including the mass of the earth's atmosphere).
+         * @param[in] omega the angular velocity (rad s<sup>−1</sup>).
+         * @param[in] f the flattening of the ellipsoid.
+         * @return \e J2 the dynamical form factor.
+         **********************************************************************/
+        static double FlatteningToJ2(double a, double GM, double omega,
+                                     double f);
     };
 } //namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/PolarStereographic.cpp b/dotnet/NETGeographicLib/PolarStereographic.cpp
index f81b6ec..cb36407 100644
--- a/dotnet/NETGeographicLib/PolarStereographic.cpp
+++ b/dotnet/NETGeographicLib/PolarStereographic.cpp
@@ -50,7 +50,7 @@ PolarStereographic::PolarStereographic()
     try
     {
         m_pPolarStereographic = new GeographicLib::PolarStereographic(
-            GeographicLib::PolarStereographic::UPS );
+            GeographicLib::PolarStereographic::UPS() );
     }
     catch (std::bad_alloc)
     {
diff --git a/dotnet/NETGeographicLib/PolygonArea.cpp b/dotnet/NETGeographicLib/PolygonArea.cpp
index 2a824c9..1211c69 100644
--- a/dotnet/NETGeographicLib/PolygonArea.cpp
+++ b/dotnet/NETGeographicLib/PolygonArea.cpp
@@ -12,6 +12,7 @@
 #include "GeographicLib/PolygonArea.hpp"
 #include "PolygonArea.h"
 #include "Geodesic.h"
+#include "GeodesicExact.h"
 #include "NETGeographicLib.h"
 
 using namespace NETGeographicLib;
@@ -50,7 +51,7 @@ PolygonArea::PolygonArea(const bool polyline )
     try
     {
         m_pPolygonArea = new GeographicLib::PolygonArea(
-            GeographicLib::Geodesic::WGS84, polyline );
+            GeographicLib::Geodesic::WGS84(), polyline );
     }
     catch (std::bad_alloc)
     {
@@ -126,3 +127,115 @@ double PolygonArea::MajorRadius::get()
 
 //*****************************************************************************
 double PolygonArea::Flattening::get() { return m_pPolygonArea->Flattening(); }
+
+//*****************************************************************************
+// PolygonAreaExact
+//*****************************************************************************
+PolygonAreaExact::!PolygonAreaExact(void)
+{
+    if ( m_pPolygonArea != NULL )
+    {
+        delete m_pPolygonArea;
+        m_pPolygonArea = NULL;
+    }
+}
+
+//*****************************************************************************
+PolygonAreaExact::PolygonAreaExact(GeodesicExact^ earth, bool polyline )
+{
+    try
+    {
+        const GeographicLib::GeodesicExact* pGeodesic =
+            reinterpret_cast<const GeographicLib::GeodesicExact*>(
+                earth->GetUnmanaged()->ToPointer() );
+        m_pPolygonArea = new GeographicLib::PolygonAreaExact( *pGeodesic, polyline );
+    }
+    catch (std::bad_alloc)
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+PolygonAreaExact::PolygonAreaExact(const bool polyline )
+{
+    try
+    {
+        m_pPolygonArea = new GeographicLib::PolygonAreaExact(
+            GeographicLib::GeodesicExact::WGS84(), polyline );
+    }
+    catch (std::bad_alloc)
+    {
+        throw gcnew GeographicErr( BADALLOC );
+    }
+}
+
+//*****************************************************************************
+void PolygonAreaExact::Clear() { m_pPolygonArea->Clear(); }
+
+//*****************************************************************************
+void PolygonAreaExact::AddPoint(double lat, double lon)
+{
+    m_pPolygonArea->AddPoint( lat, lon );
+}
+
+//*****************************************************************************
+void PolygonAreaExact::AddEdge(double azi, double s)
+{
+    m_pPolygonArea->AddEdge( azi, s );
+}
+
+//*****************************************************************************
+unsigned PolygonAreaExact::Compute(bool reverse, bool sign,
+                    [System::Runtime::InteropServices::Out] double% perimeter,
+                    [System::Runtime::InteropServices::Out] double% area)
+{
+    double lperimeter, larea;
+    unsigned out = m_pPolygonArea->Compute( reverse, sign, lperimeter, larea );
+    perimeter = lperimeter;
+    area = larea;
+    return out;
+}
+
+//*****************************************************************************
+unsigned PolygonAreaExact::TestPoint(double lat, double lon, bool reverse, bool sign,
+                    [System::Runtime::InteropServices::Out] double% perimeter,
+                    [System::Runtime::InteropServices::Out] double% area)
+{
+    double lperimeter, larea;
+    unsigned out = m_pPolygonArea->TestPoint( lat, lon, reverse, sign, lperimeter, larea );
+    perimeter = lperimeter;
+    area = larea;
+    return out;
+}
+
+//*****************************************************************************
+unsigned PolygonAreaExact::TestEdge(double azi, double s, bool reverse, bool sign,
+                    [System::Runtime::InteropServices::Out] double% perimeter,
+                    [System::Runtime::InteropServices::Out] double% area)
+{
+    double lperimeter, larea;
+    unsigned out = m_pPolygonArea->TestEdge( azi, s, reverse, sign, lperimeter, larea );
+    perimeter = lperimeter;
+    area = larea;
+    return out;
+}
+
+//*****************************************************************************
+void PolygonAreaExact::CurrentPoint(
+    [System::Runtime::InteropServices::Out] double% lat,
+    [System::Runtime::InteropServices::Out] double% lon)
+{
+    double llat, llon;
+    m_pPolygonArea->CurrentPoint( llat, llon );
+    lat = llat;
+    lon = llon;
+}
+
+//*****************************************************************************
+double PolygonAreaExact::MajorRadius::get()
+{ return m_pPolygonArea->MajorRadius(); }
+
+//*****************************************************************************
+double PolygonAreaExact::Flattening::get()
+{ return m_pPolygonArea->Flattening(); }
diff --git a/dotnet/NETGeographicLib/PolygonArea.h b/dotnet/NETGeographicLib/PolygonArea.h
index febad88..7e8faef 100644
--- a/dotnet/NETGeographicLib/PolygonArea.h
+++ b/dotnet/NETGeographicLib/PolygonArea.h
@@ -14,7 +14,7 @@ namespace NETGeographicLib
 {
     ref class Geodesic;
   /**
-   * \brief .NET wrapper for GeographicLib::PolygonArea.
+   * \brief .NET wrapper for GeographicLib::PolygonArea and PolygonAreaExact.
    *
    * This class allows .NET applications to access GeographicLib::PolygonArea.
    *
@@ -212,4 +212,176 @@ namespace NETGeographicLib
                           [System::Runtime::InteropServices::Out] double% lon);
         ///@}
     };
+
+    //*************************************************************************
+    // PolygonAreaExact
+    //*************************************************************************
+    ref class GeodesicExact;
+
+    public ref class PolygonAreaExact
+    {
+        private:
+        // a pointer to the unmanaged GeographicLib::PolygonArea
+        GeographicLib::PolygonAreaExact* m_pPolygonArea;
+
+        // the finalize frees the unmanaged memory when the object is destroyed.
+        !PolygonAreaExact(void);
+    public:
+
+        /**
+         * Constructor for PolygonArea.
+         *
+         * @param[in] earth the Geodesic object to use for geodesic calculations.
+         * @param[in] polyline if true that treat the points as defining a polyline
+         *   instead of a polygon.
+         **********************************************************************/
+        PolygonAreaExact(GeodesicExact^ earth, bool polyline );
+
+        /**
+         * Constructor for PolygonArea that assumes a WGS84 ellipsoid.
+         *
+         * @param[in] polyline if true that treat the points as defining a polyline
+         *   instead of a polygon.
+         **********************************************************************/
+        PolygonAreaExact(const bool polyline );
+
+        /**
+         * The destructor calls the finalizer.
+         **********************************************************************/
+        ~PolygonAreaExact()
+        { this->!PolygonAreaExact(); }
+
+        /**
+         * Clear PolygonArea, allowing a new polygon to be started.
+         **********************************************************************/
+        void Clear();
+
+        /**
+         * Add a point to the polygon or polyline.
+         *
+         * @param[in] lat the latitude of the point (degrees).
+         * @param[in] lon the longitude of the point (degrees).
+         *
+         * \e lat should be in the range [−90°, 90°] and \e
+         * lon should be in the range [−540°, 540°).
+         **********************************************************************/
+        void AddPoint(double lat, double lon);
+
+        /**
+         * Add an edge to the polygon or polyline.
+         *
+         * @param[in] azi azimuth at current point (degrees).
+         * @param[in] s distance from current point to next point (meters).
+         *
+         * \e azi should be in the range [−540°, 540°).  This does
+         * nothing if no points have been added yet.  Use PolygonArea::CurrentPoint
+         * to determine the position of the new vertex.
+         **********************************************************************/
+        void AddEdge(double azi, double s);
+
+        /**
+         * Return the results so far.
+         *
+         * @param[in] reverse if true then clockwise (instead of counter-clockwise)
+         *   traversal counts as a positive area.
+         * @param[in] sign if true then return a signed result for the area if
+         *   the polygon is traversed in the "wrong" direction instead of returning
+         *   the area for the rest of the earth.
+         * @param[out] perimeter the perimeter of the polygon or length of the
+         *   polyline (meters).
+         * @param[out] area the area of the polygon (meters<sup>2</sup>); only set
+         *   if \e polyline is false in the constructor.
+         * @return the number of points.
+         **********************************************************************/
+        unsigned Compute(bool reverse, bool sign,
+                [System::Runtime::InteropServices::Out] double% perimeter,
+                [System::Runtime::InteropServices::Out] double% area);
+
+        /**
+         * Return the results assuming a tentative final test point is added;
+         * however, the data for the test point is not saved.  This lets you report
+         * a running result for the perimeter and area as the user moves the mouse
+         * cursor.  Ordinary floating point arithmetic is used to accumulate the
+         * data for the test point; thus the area and perimeter returned are less
+         * accurate than if PolygonArea::AddPoint and PolygonArea::Compute are
+         * used.
+         *
+         * @param[in] lat the latitude of the test point (degrees).
+         * @param[in] lon the longitude of the test point (degrees).
+         * @param[in] reverse if true then clockwise (instead of counter-clockwise)
+         *   traversal counts as a positive area.
+         * @param[in] sign if true then return a signed result for the area if
+         *   the polygon is traversed in the "wrong" direction instead of returning
+         *   the area for the rest of the earth.
+         * @param[out] perimeter the approximate perimeter of the polygon or length
+         *   of the polyline (meters).
+         * @param[out] area the approximate area of the polygon
+         *   (meters<sup>2</sup>); only set if polyline is false in the
+         *   constructor.
+         * @return the number of points.
+         *
+         * \e lat should be in the range [−90°, 90°] and \e
+         * lon should be in the range [−540°, 540°).
+         **********************************************************************/
+        unsigned TestPoint(double lat, double lon, bool reverse, bool sign,
+                [System::Runtime::InteropServices::Out] double% perimeter,
+                [System::Runtime::InteropServices::Out] double% area);
+
+        /**
+         * Return the results assuming a tentative final test point is added via an
+         * azimuth and distance; however, the data for the test point is not saved.
+         * This lets you report a running result for the perimeter and area as the
+         * user moves the mouse cursor.  Ordinary floating point arithmetic is used
+         * to accumulate the data for the test point; thus the area and perimeter
+         * returned are less accurate than if PolygonArea::AddEdge and
+         * PolygonArea::Compute are used.
+         *
+         * @param[in] azi azimuth at current point (degrees).
+         * @param[in] s distance from current point to final test point (meters).
+         * @param[in] reverse if true then clockwise (instead of counter-clockwise)
+         *   traversal counts as a positive area.
+         * @param[in] sign if true then return a signed result for the area if
+         *   the polygon is traversed in the "wrong" direction instead of returning
+         *   the area for the rest of the earth.
+         * @param[out] perimeter the approximate perimeter of the polygon or length
+         *   of the polyline (meters).
+         * @param[out] area the approximate area of the polygon
+         *   (meters<sup>2</sup>); only set if polyline is false in the
+         *   constructor.
+         * @return the number of points.
+         *
+         * \e azi should be in the range [−540°, 540°).
+         **********************************************************************/
+        unsigned TestEdge(double azi, double s, bool reverse, bool sign,
+                [System::Runtime::InteropServices::Out] double% perimeter,
+                [System::Runtime::InteropServices::Out] double% area);
+
+        /** \name Inspector functions
+         **********************************************************************/
+        ///@{
+        /**
+         * @return \e a the equatorial radius of the ellipsoid (meters).  This is
+         *   the value inherited from the Geodesic object used in the constructor.
+         **********************************************************************/
+        property double MajorRadius { double get(); }
+
+        /**
+         * @return \e f the flattening of the ellipsoid.  This is the value
+         *   inherited from the Geodesic object used in the constructor.
+         **********************************************************************/
+        property double Flattening { double get(); }
+
+        /**
+         * Report the previous vertex added to the polygon or polyline.
+         *
+         * @param[out] lat the latitude of the point (degrees).
+         * @param[out] lon the longitude of the point (degrees).
+         *
+         * If no points have been added, then NaNs are returned.  Otherwise, \e lon
+         * will be in the range [−180°, 180°).
+         **********************************************************************/
+        void CurrentPoint([System::Runtime::InteropServices::Out] double% lat,
+                          [System::Runtime::InteropServices::Out] double% lon);
+        ///@}
+    };
 } // namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/Rhumb.cpp b/dotnet/NETGeographicLib/Rhumb.cpp
new file mode 100644
index 0000000..61e36aa
--- /dev/null
+++ b/dotnet/NETGeographicLib/Rhumb.cpp
@@ -0,0 +1,145 @@
+/**
+ * \file NETGeographicLib/Rhumb.cpp
+ * \brief Implementation for NETGeographicLib::Rhumb and NETGeographicLib::RhumbLine class
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+#include "stdafx.h"
+#include "GeographicLib/Rhumb.hpp"
+#include "Rhumb.h"
+#include "NETGeographicLib.h"
+
+using namespace NETGeographicLib;
+
+//*****************************************************************************
+Rhumb::!Rhumb(void)
+{
+    if ( m_pRhumb != NULL )
+    {
+        delete m_pRhumb;
+        m_pRhumb = NULL;
+    }
+}
+
+//*****************************************************************************
+Rhumb::Rhumb(double a, double f, bool exact)
+{
+    try
+    {
+        m_pRhumb = new GeographicLib::Rhumb( a, f, exact );
+    }
+    catch ( GeographicLib::GeographicErr& err )
+    {
+        throw gcnew GeographicErr( err.what() );
+    }
+    catch ( std::bad_alloc )
+    {
+        throw gcnew System::Exception("Failed to allocate memory for a Rhumb.");
+    }
+}
+
+//*****************************************************************************
+void Rhumb::Direct(double lat1, double lon1, double azi12, double s12,
+            [System::Runtime::InteropServices::Out] double% lat2,
+            [System::Runtime::InteropServices::Out] double% lon2)
+{
+    double ilat2, ilon2;
+    m_pRhumb->Direct( lat1, lon1, azi12, s12, ilat2, ilon2 );
+    lat2 = ilat2;
+    lon2 = ilon2;
+}
+
+//*****************************************************************************
+void Rhumb::Inverse(double lat1, double lon1, double lat2, double lon2,
+                [System::Runtime::InteropServices::Out] double% s12,
+                [System::Runtime::InteropServices::Out] double% azi12)
+{
+    double is12, iazi12;
+    m_pRhumb->Inverse( lat1, lon1, lat2, lon2, is12, iazi12 );
+    s12 = is12;
+    azi12 = iazi12;
+}
+
+//*****************************************************************************
+RhumbLine^ Rhumb::Line(double lat1, double lon1, double azi12)
+{
+    return gcnew RhumbLine( new GeographicLib::RhumbLine(m_pRhumb->Line( lat1, lon1, azi12 )) );
+}
+
+//*****************************************************************************
+double Rhumb::MajorRadius::get() { return m_pRhumb->MajorRadius(); }
+
+//*****************************************************************************
+double Rhumb::Flattening::get() { return m_pRhumb->Flattening(); }
+
+//*****************************************************************************
+Rhumb^ Rhumb::WGS84()
+{
+    return gcnew Rhumb( GeographicLib::Constants::WGS84_a(),
+                        GeographicLib::Constants::WGS84_f(), false );
+}
+
+//*****************************************************************************
+// RhumbLine functions
+//*****************************************************************************
+RhumbLine::!RhumbLine(void)
+{
+    if ( m_pRhumbLine != NULL )
+    {
+        delete m_pRhumbLine;
+        m_pRhumbLine = NULL;
+    }
+}
+
+//*****************************************************************************
+RhumbLine::RhumbLine( GeographicLib::RhumbLine* pRhumbLine )
+{
+    if ( pRhumbLine == NULL )
+        throw gcnew System::Exception("Invalid pointer in RhumbLine constructor.");
+    m_pRhumbLine = pRhumbLine;
+}
+
+//*****************************************************************************
+void RhumbLine::Position(double s12,
+        [System::Runtime::InteropServices::Out] double% lat2,
+        [System::Runtime::InteropServices::Out] double% lon2)
+{
+    double ilat2, ilon2;
+    m_pRhumbLine->Position( s12, ilat2, ilon2 );
+    lat2 = ilat2;
+    lon2 = ilon2;
+}
+
+//*****************************************************************************
+double RhumbLine::Latitude::get()
+{
+    return m_pRhumbLine->Latitude();
+}
+
+//*****************************************************************************
+double RhumbLine::Longitude::get()
+{
+    return m_pRhumbLine->Longitude();
+}
+
+//*****************************************************************************
+double RhumbLine::Azimuth::get()
+{
+    return m_pRhumbLine->Azimuth();
+}
+
+//*****************************************************************************
+double RhumbLine::MajorRadius::get()
+{
+    return m_pRhumbLine->MajorRadius();
+}
+
+//*****************************************************************************
+double RhumbLine::Flattening::get()
+{
+    return m_pRhumbLine->Flattening();
+}
diff --git a/dotnet/NETGeographicLib/Rhumb.h b/dotnet/NETGeographicLib/Rhumb.h
new file mode 100644
index 0000000..33135c5
--- /dev/null
+++ b/dotnet/NETGeographicLib/Rhumb.h
@@ -0,0 +1,270 @@
+#pragma once
+/**
+ * \file NETGeographicLib/Rhumb.h
+ * \brief Header for NETGeographicLib::Rhumb and NETGeographicLib::RhumbLine classes
+ *
+ * NETGeographicLib is copyright (c) Scott Heiman (2013)
+ * GeographicLib is Copyright (c) Charles Karney (2010-2012)
+ * <charles at karney.com> and licensed under the MIT/X11 License.
+ * For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+namespace NETGeographicLib {
+
+  ref class RhumbLine;
+
+  /**
+   * \brief .NET wrapper for GeographicLib::Rhumb.
+   *
+   * This class allows .NET applications to access GeographicLib::Rhumb.
+   *
+   * Solve of the direct and inverse rhumb problems.
+   *
+   * The path of constant azimuth between two points on a ellipsoid at (\e
+   * lat1, \e lon1) and (\e lat2, \e lon2) is called the rhumb line (also
+   * called the loxodrome).  Its length is \e s12 and its azimuth is \e azi12
+   * and \e azi2.  (The azimuth is the heading measured clockwise from north.)
+   *
+   * Given \e lat1, \e lon1, \e azi12, and \e s12, we can determine \e lat2,
+   * and \e lon2.  This is the \e direct rhumb problem and its solution is
+   * given by the function Rhumb::Direct.
+   *
+   * Given \e lat1, \e lon1, \e lat2, and \e lon2, we can determine \e azi12
+   * and \e s12.  This is the \e inverse rhumb problem, whose solution is
+   * given by Rhumb::Inverse.  This finds the shortest such rhumb line, i.e.,
+   * the one that wraps no more than half way around the earth .
+   *
+   * Note that rhumb lines may be appreciably longer (up to 50%) than the
+   * corresponding Geodesic.  For example the distance between London Heathrow
+   * and Tokyo Narita via the rhumb line is 11400 km which is 18% longer than
+   * the geodesic distance 9600 km.
+   *
+   * For more information on rhumb lines see \ref rhumb.
+   *
+   * C# Example:
+   * \include example-Rhumb.cs
+   * Managed C++ Example:
+   * \include example-Rhumb.cpp
+   * Visual Basic Example:
+   * \include example-Rhumb.vb
+   *
+   * <B>INTERFACE DIFFERENCES:</B><BR>
+   * The MajorRadius and Flattening functions are implemented as properties.
+   **********************************************************************/
+
+  public ref class Rhumb {
+  private:
+    // pointer to the unmanaged Rhumb object
+    GeographicLib::Rhumb* m_pRhumb;
+
+    // The finalizer destroys m_pRhumb when this object is destroyed.
+    !Rhumb(void);
+  public:
+
+    /**
+     * Constructor for a ellipsoid with
+     *
+     * @param[in] a equatorial radius (meters).
+     * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
+     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set
+     *   flattening to 1/\e f.
+     * @param[in] exact if true (the default) use an addition theorem for
+     *   elliptic integrals to compute divided differences; otherwise use
+     *   series expansion (accurate for |<i>f</i>| < 0.01).
+     * @exception GeographicErr if \e a or (1 − \e f) \e a is not
+     *   positive.
+     *
+     * See \ref rhumb, for a detailed description of the \e exact parameter.
+     **********************************************************************/
+    Rhumb(double a, double f, bool exact);
+
+    /**
+    * \brief The destructor calls the finalizer.
+    **********************************************************************/
+    ~Rhumb() { this->!Rhumb(); }
+
+    /**
+     * Solve the direct rhumb problem.
+     *
+     * @param[in] lat1 latitude of point 1 (degrees).
+     * @param[in] lon1 longitude of point 1 (degrees).
+     * @param[in] azi12 azimuth of the rhumb line (degrees).
+     * @param[in] s12 distance between point 1 and point 2 (meters); it can be
+     *   negative.
+     * @param[out] lat2 latitude of point 2 (degrees).
+     * @param[out] lon2 longitude of point 2 (degrees).
+     *
+     * \e lat1 should be in the range [−90°, 90°]; \e lon1 and \e
+     * azi1 should be in the range [−540°, 540°).  The values of
+     * \e lon2 and \e azi2 returned are in the range [−180°,
+     * 180°).
+     *
+     * If point 1 is a pole, the cosine of its latitude is taken to be
+     * 1/ε<sup>2</sup> (where ε is 2<sup>-52</sup>).  This
+     * position, which is extremely close to the actual pole, allows the
+     * calculation to be carried out in finite terms.  If \e s12 is large
+     * enough that the rhumb line crosses a pole, the longitude of point 2
+     * is indeterminate (a NaN is returned for \e lon2).
+     **********************************************************************/
+    void Direct(double lat1, double lon1, double azi12, double s12,
+                [System::Runtime::InteropServices::Out] double% lat2,
+                [System::Runtime::InteropServices::Out] double% lon2);
+
+    /**
+     * Solve the inverse rhumb problem.
+     *
+     * @param[in] lat1 latitude of point 1 (degrees).
+     * @param[in] lon1 longitude of point 1 (degrees).
+     * @param[in] lat2 latitude of point 2 (degrees).
+     * @param[in] lon2 longitude of point 2 (degrees).
+     * @param[out] s12 rhumb distance between point 1 and point 2 (meters).
+     * @param[out] azi12 azimuth of the rhumb line (degrees).
+     *
+     * The shortest rhumb line is found.  \e lat1 and \e lat2 should be in the
+     * range [−90°, 90°]; \e lon1 and \e lon2 should be in the
+     * range [−540°, 540°).  The value of \e azi12 returned is in
+     * the range [−180°, 180°).
+     *
+     * If either point is a pole, the cosine of its latitude is taken to be
+     * 1/ε<sup>2</sup> (where ε is 2<sup>-52</sup>).  This
+     * position, which is extremely close to the actual pole, allows the
+     * calculation to be carried out in finite terms.
+     **********************************************************************/
+    void Inverse(double lat1, double lon1, double lat2, double lon2,
+                 [System::Runtime::InteropServices::Out] double% s12,
+                 [System::Runtime::InteropServices::Out] double% azi12);
+
+    /**
+     * Set up to compute several points on a single rhumb line.
+     *
+     * @param[in] lat1 latitude of point 1 (degrees).
+     * @param[in] lon1 longitude of point 1 (degrees).
+     * @param[in] azi12 azimuth of the rhumb line (degrees).
+     * @return a RhumbLine object.
+     *
+     * \e lat1 should be in the range [−90°, 90°]; \e lon1 and \e
+     * azi12 should be in the range [−540°, 540°).
+     *
+     * If point 1 is a pole, the cosine of its latitude is taken to be
+     * 1/ε<sup>2</sup> (where ε is 2<sup>-52</sup>).  This
+     * position, which is extremely close to the actual pole, allows the
+     * calculation to be carried out in finite terms.
+     **********************************************************************/
+    RhumbLine^ Line(double lat1, double lon1, double azi12);
+
+    /** \name Inspector functions.
+     **********************************************************************/
+    ///@{
+
+    /**
+     * @return the equatorial radius of the ellipsoid (meters).  This is
+     *   the value used in the constructor.
+     **********************************************************************/
+    property double MajorRadius { double get(); }
+
+    /**
+     * @return f the  flattening of the ellipsoid.  This is the
+     *   value used in the constructor.
+     **********************************************************************/
+    property double Flattening { double get(); }
+
+    /**
+     * A global instantiation of Rhumb with the parameters for the WGS84
+     * ellipsoid.
+     **********************************************************************/
+    static Rhumb^ WGS84();
+  };
+
+  /**
+   * \brief .NET wrapper for GeographicLib::RhumbLine.
+   *
+   * This class allows .NET applications to access GeographicLib::RhumbLine.
+   *
+   * Find a sequence of points on a single rhumb line.
+   *
+   * RhumbLine facilitates the determination of a series of points on a single
+   * rhumb line.  The starting point (\e lat1, \e lon1) and the azimuth \e
+   * azi12 are specified in the call to Rhumb::Line which returns a RhumbLine
+   * object.  RhumbLine.Position returns the location of point 2 a distance \e
+   * s12 along the rhumb line.
+
+   * There is no public constructor for this class.  (Use Rhumb::Line to create
+   * an instance.)  The Rhumb object used to create a RhumbLine must stay in
+   * scope as long as the RhumbLine.
+   *
+   **********************************************************************/
+
+  public ref class RhumbLine {
+  private:
+    // pointer to the unmanaged RhumbLine object.
+    GeographicLib::RhumbLine* m_pRhumbLine;
+
+    // The finalizer destroys m_pRhumbLine when this object is destroyed.
+    !RhumbLine(void);
+  public:
+    /**
+     * \brief Constructor.
+     *
+     * For internal use only.  Developers should not call this constructor
+     * directly.  Use the Rhumb::Line function to create RhumbLine objects.
+     **********************************************************************/
+    RhumbLine( GeographicLib::RhumbLine* pRhumbLine );
+
+    /**
+     * \brief The destructor calls the finalizer.
+     **********************************************************************/
+    ~RhumbLine() { this->!RhumbLine(); }
+
+    /**
+     * Compute the position of point 2 which is a distance \e s12 (meters) from
+     * point 1.
+     *
+     * @param[in] s12 distance between point 1 and point 2 (meters); it can be
+     *   negative.
+     * @param[out] lat2 latitude of point 2 (degrees).
+     * @param[out] lon2 longitude of point 2 (degrees).
+     *
+     * The values of \e lon2 and \e azi2 returned are in the range
+     * [−180°, 180°).
+     *
+     * If \e s12 is large enough that the rhumb line crosses a pole, the
+     * longitude of point 2 is indeterminate (a NaN is returned for \e lon2).
+     **********************************************************************/
+    void Position(double s12,
+                  [System::Runtime::InteropServices::Out] double% lat2,
+                  [System::Runtime::InteropServices::Out] double% lon2);
+
+    /** \name Inspector functions
+     **********************************************************************/
+    ///@{
+
+    /**
+     * @return the latitude of point 1 (degrees).
+     **********************************************************************/
+    property double Latitude { double get(); }
+
+    /**
+     * @return the longitude of point 1 (degrees).
+     **********************************************************************/
+    property double Longitude { double get(); }
+
+    /**
+     * @return the azimuth of the rhumb line (degrees).
+     **********************************************************************/
+    property double Azimuth { double get(); }
+
+    /**
+     * @return the equatorial radius of the ellipsoid (meters).  This is
+     *   the value inherited from the Rhumb object used in the constructor.
+     **********************************************************************/
+    property double MajorRadius { double get(); }
+
+    /**
+     * @return the flattening of the ellipsoid.  This is the value
+     *   inherited from the Rhumb object used in the constructor.
+     **********************************************************************/
+    property double Flattening { double get(); }
+  };
+
+} // namespace NETGeographicLib
diff --git a/dotnet/NETGeographicLib/TransverseMercator.cpp b/dotnet/NETGeographicLib/TransverseMercator.cpp
index ea559bc..11962b7 100644
--- a/dotnet/NETGeographicLib/TransverseMercator.cpp
+++ b/dotnet/NETGeographicLib/TransverseMercator.cpp
@@ -50,7 +50,7 @@ TransverseMercator::TransverseMercator()
     try
     {
         m_pTransverseMercator = new GeographicLib::TransverseMercator(
-            GeographicLib::TransverseMercator::UTM );
+            GeographicLib::TransverseMercator::UTM() );
     }
     catch (std::bad_alloc )
     {
diff --git a/dotnet/NETGeographicLib/TransverseMercatorExact.cpp b/dotnet/NETGeographicLib/TransverseMercatorExact.cpp
index 733c6d1..af2e49e 100644
--- a/dotnet/NETGeographicLib/TransverseMercatorExact.cpp
+++ b/dotnet/NETGeographicLib/TransverseMercatorExact.cpp
@@ -53,7 +53,7 @@ TransverseMercatorExact::TransverseMercatorExact()
     {
         m_pTransverseMercatorExact =
             new GeographicLib::TransverseMercatorExact(
-                GeographicLib::TransverseMercatorExact::UTM );
+                GeographicLib::TransverseMercatorExact::UTM() );
     }
     catch (std::bad_alloc)
     {
diff --git a/dotnet/NETGeographicLib/UTMUPS.cpp b/dotnet/NETGeographicLib/UTMUPS.cpp
index 307610c..8e02529 100644
--- a/dotnet/NETGeographicLib/UTMUPS.cpp
+++ b/dotnet/NETGeographicLib/UTMUPS.cpp
@@ -175,11 +175,11 @@ void UTMUPS::DecodeZone(System::String^ zonestr,
 }
 
 //*****************************************************************************
-System::String^ UTMUPS::EncodeZone(int zone, bool northp)
+System::String^ UTMUPS::EncodeZone(int zone, bool northp, bool abbrev)
 {
     try
     {
-        return StringConvert::UnmanagedToManaged( GeographicLib::UTMUPS::EncodeZone( zone, northp ) );
+        return StringConvert::UnmanagedToManaged( GeographicLib::UTMUPS::EncodeZone( zone, northp, abbrev ) );
     }
     catch ( const std::exception& err )
     {
diff --git a/dotnet/NETGeographicLib/UTMUPS.h b/dotnet/NETGeographicLib/UTMUPS.h
index 4b9c7d2..8a0f6fa 100644
--- a/dotnet/NETGeographicLib/UTMUPS.h
+++ b/dotnet/NETGeographicLib/UTMUPS.h
@@ -311,12 +311,13 @@ namespace NETGeographicLib
          *
          * For UTM, \e zonestr has the form of a zone number in the range
          * [UTMUPS::MINUTMZONE, UTMUPS::MAXUTMZONE] = [1, 60] followed by a
-         * hemisphere letter, N or S.  For UPS, it consists just of the hemisphere
-         * letter.  The returned value of \e zone is UTMUPS::UPS = 0 for UPS.  Note
-         * well that "38S" indicates the southern hemisphere of zone 38 and not
-         * latitude band S, [32, 40].  N, 01S, 2N, 38S are legal.  0N, 001S, 61N,
-         * 38P are illegal.  INV is a special value for which the returned value of
-         * \e is UTMUPS::INVALID.
+         * hemisphere letter, n or s (or "north" or "south" spelled out).  For UPS,
+         * it consists just of the hemisphere letter (or the spelled out
+         * hemisphere).  The returned value of \e zone is UTMUPS::UPS = 0 for UPS.
+         * Note well that "38s" indicates the southern hemisphere of zone 38 and
+         * not latitude band S, 32° ≤ \e lat < 40°.  n, 01s, 2n, 38s,
+         * south, 3north are legal.  0n, 001s, +3n, 61n, 38P are illegal.  INV is a
+         * special value for which the returned value of \e is UTMUPS::INVALID.
          **********************************************************************/
         static void DecodeZone(System::String^ zonestr,
             [System::Runtime::InteropServices::Out] int% zone,
@@ -327,6 +328,8 @@ namespace NETGeographicLib
          *
          * @param[in] zone the UTM zone (zero means UPS).
          * @param[in] northp hemisphere (true means north, false means south).
+         * @param[in] abbrev if true (the default) use abbreviated (n/s) notation
+         *   for hemisphere; otherwise spell out the hemisphere (north/south)
          * @exception GeographicErr if \e zone is out of range (see below).
          * @exception std::bad_alloc if memoy for the string can't be allocated.
          * @return string representation of zone and hemisphere.
@@ -334,10 +337,10 @@ namespace NETGeographicLib
          * \e zone must be in the range [UTMUPS::MINZONE, UTMUPS::MAXZONE] = [0,
          * 60] with \e zone = UTMUPS::UPS, 0, indicating UPS (but the resulting
          * string does not contain "0").  \e zone may also be UTMUPS::INVALID, in
-         * which case the returned string is "INV".  This reverses
+         * which case the returned string is "inv".  This reverses
          * UTMUPS::DecodeZone.
          **********************************************************************/
-        static System::String^ EncodeZone(int zone, bool northp);
+        static System::String^ EncodeZone(int zone, bool northp, bool abbrev);
 
         /**
          * Decode EPSG.
diff --git a/dotnet/Projections/Form1.Designer.cs b/dotnet/Projections/Form1.Designer.cs
index 8f51980..fac84e9 100644
--- a/dotnet/Projections/Form1.Designer.cs
+++ b/dotnet/Projections/Form1.Designer.cs
@@ -45,6 +45,7 @@ namespace Projections
             this.m_magneticPage = new System.Windows.Forms.TabPage();
             this.m_polyPage = new System.Windows.Forms.TabPage();
             this.m_accumPage = new System.Windows.Forms.TabPage();
+            this.m_rhumbTabPage = new System.Windows.Forms.TabPage();
             this.m_tabControl.SuspendLayout();
             this.SuspendLayout();
             //
@@ -66,6 +67,7 @@ namespace Projections
             this.m_tabControl.Controls.Add(this.m_magneticPage);
             this.m_tabControl.Controls.Add(this.m_polyPage);
             this.m_tabControl.Controls.Add(this.m_accumPage);
+            this.m_tabControl.Controls.Add(this.m_rhumbTabPage);
             this.m_tabControl.Dock = System.Windows.Forms.DockStyle.Fill;
             this.m_tabControl.Location = new System.Drawing.Point(0, 0);
             this.m_tabControl.Name = "m_tabControl";
@@ -228,6 +230,16 @@ namespace Projections
             this.m_accumPage.Text = "Accumulator";
             this.m_accumPage.UseVisualStyleBackColor = true;
             //
+            // m_rhumbTabPage
+            //
+            this.m_rhumbTabPage.Location = new System.Drawing.Point(4, 22);
+            this.m_rhumbTabPage.Name = "m_rhumbTabPage";
+            this.m_rhumbTabPage.Padding = new System.Windows.Forms.Padding(3);
+            this.m_rhumbTabPage.Size = new System.Drawing.Size(936, 236);
+            this.m_rhumbTabPage.TabIndex = 16;
+            this.m_rhumbTabPage.Text = "Rhumb";
+            this.m_rhumbTabPage.UseVisualStyleBackColor = true;
+            //
             // Form1
             //
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -260,6 +272,7 @@ namespace Projections
         private System.Windows.Forms.TabPage m_magneticPage;
         private System.Windows.Forms.TabPage m_polyPage;
         private System.Windows.Forms.TabPage m_accumPage;
+        private System.Windows.Forms.TabPage m_rhumbTabPage;
 
     }
 }
diff --git a/dotnet/Projections/Form1.cs b/dotnet/Projections/Form1.cs
index d93f46e..a4f6caa 100644
--- a/dotnet/Projections/Form1.cs
+++ b/dotnet/Projections/Form1.cs
@@ -44,6 +44,7 @@ namespace Projections
             m_magneticPage.Controls.Add(new MagneticPanel());
             m_polyPage.Controls.Add(new PolyPanel());
             m_accumPage.Controls.Add(new AccumPanel());
+            m_rhumbTabPage.Controls.Add(new RhumbPanel());
         }
     }
 }
diff --git a/dotnet/Projections/PolyPanel.cs b/dotnet/Projections/PolyPanel.cs
index e50673c..6450648 100644
--- a/dotnet/Projections/PolyPanel.cs
+++ b/dotnet/Projections/PolyPanel.cs
@@ -118,6 +118,16 @@ namespace Projections
                 pa.Compute(false, false, out perim, out area);
                 pa.TestEdge(-70.0, 5000.0, false, false, out perim, out area);
                 pa.TestPoint(31.0, -86.5, false, false, out perim, out area);
+
+                PolygonAreaExact p2 = new PolygonAreaExact(new GeodesicExact(), false);
+                p2.AddPoint(32.0, -86.0);
+                p2.AddEdge(20.0, 10000.0);
+                p2.AddEdge(-45.0, 10000.0);
+                p2.CurrentPoint(out lat, out lon);
+                p2.Compute(false, false, out perim, out area);
+                p2.TestEdge(-70.0, 5000.0, false, false, out perim, out area);
+                p2.TestPoint(31.0, -86.5, false, false, out perim, out area);
+
                 MessageBox.Show("No errors detected", "OK", MessageBoxButtons.OK, MessageBoxIcon.Information);
             }
             catch (Exception xcpt)
diff --git a/dotnet/Projections/Projections.csproj b/dotnet/Projections/Projections.csproj
index 9dfe2a1..8bfdc73 100644
--- a/dotnet/Projections/Projections.csproj
+++ b/dotnet/Projections/Projections.csproj
@@ -157,6 +157,12 @@
       <DependentUpon>ProjectionsPanel.cs</DependentUpon>
     </Compile>
     <Compile Include="Properties/AssemblyInfo.cs" />
+    <Compile Include="RhumbPanel.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="RhumbPanel.Designer.cs">
+      <DependentUpon>RhumbPanel.cs</DependentUpon>
+    </Compile>
     <Compile Include="SphericalHarmonicsPanel.cs">
       <SubType>UserControl</SubType>
     </Compile>
@@ -223,6 +229,9 @@
       <AutoGen>True</AutoGen>
       <DependentUpon>Resources.resx</DependentUpon>
     </Compile>
+    <EmbeddedResource Include="RhumbPanel.resx">
+      <DependentUpon>RhumbPanel.cs</DependentUpon>
+    </EmbeddedResource>
     <EmbeddedResource Include="SphericalHarmonicsPanel.resx">
       <DependentUpon>SphericalHarmonicsPanel.cs</DependentUpon>
     </EmbeddedResource>
diff --git a/dotnet/Projections/RhumbPanel.Designer.cs b/dotnet/Projections/RhumbPanel.Designer.cs
new file mode 100644
index 0000000..66b56c6
--- /dev/null
+++ b/dotnet/Projections/RhumbPanel.Designer.cs
@@ -0,0 +1,247 @@
+namespace Projections
+{
+    partial class RhumbPanel
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.label1 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.label4 = new System.Windows.Forms.Label();
+            this.label5 = new System.Windows.Forms.Label();
+            this.label6 = new System.Windows.Forms.Label();
+            this.m_Lat1TextBox = new System.Windows.Forms.TextBox();
+            this.m_lon1TextBox = new System.Windows.Forms.TextBox();
+            this.m_lat2TextBox = new System.Windows.Forms.TextBox();
+            this.m_lon2TextBox = new System.Windows.Forms.TextBox();
+            this.m_s12TextBox = new System.Windows.Forms.TextBox();
+            this.m_azimuthTextBox = new System.Windows.Forms.TextBox();
+            this.button1 = new System.Windows.Forms.Button();
+            this.button2 = new System.Windows.Forms.Button();
+            this.label7 = new System.Windows.Forms.Label();
+            this.m_pointsView = new System.Windows.Forms.ListView();
+            this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+            this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+            this.SuspendLayout();
+            //
+            // label1
+            //
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(16, 15);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(101, 13);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "Latitude 1 (degrees)";
+            //
+            // label2
+            //
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(16, 42);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(110, 13);
+            this.label2.TabIndex = 1;
+            this.label2.Text = "Longitude 1 (degrees)";
+            //
+            // label3
+            //
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(16, 69);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(101, 13);
+            this.label3.TabIndex = 2;
+            this.label3.Text = "Latitude 2 (degrees)";
+            //
+            // label4
+            //
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(16, 96);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(110, 13);
+            this.label4.TabIndex = 3;
+            this.label4.Text = "Longitude 2 (degrees)";
+            //
+            // label5
+            //
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(16, 123);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(66, 13);
+            this.label5.TabIndex = 4;
+            this.label5.Text = "S12 (meters)";
+            //
+            // label6
+            //
+            this.label6.AutoSize = true;
+            this.label6.Location = new System.Drawing.Point(16, 150);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(91, 13);
+            this.label6.TabIndex = 5;
+            this.label6.Text = "Azimuth (degrees)";
+            //
+            // m_Lat1TextBox
+            //
+            this.m_Lat1TextBox.Location = new System.Drawing.Point(131, 11);
+            this.m_Lat1TextBox.Name = "m_Lat1TextBox";
+            this.m_Lat1TextBox.Size = new System.Drawing.Size(129, 20);
+            this.m_Lat1TextBox.TabIndex = 6;
+            //
+            // m_lon1TextBox
+            //
+            this.m_lon1TextBox.Location = new System.Drawing.Point(131, 38);
+            this.m_lon1TextBox.Name = "m_lon1TextBox";
+            this.m_lon1TextBox.Size = new System.Drawing.Size(129, 20);
+            this.m_lon1TextBox.TabIndex = 7;
+            //
+            // m_lat2TextBox
+            //
+            this.m_lat2TextBox.Location = new System.Drawing.Point(131, 65);
+            this.m_lat2TextBox.Name = "m_lat2TextBox";
+            this.m_lat2TextBox.Size = new System.Drawing.Size(129, 20);
+            this.m_lat2TextBox.TabIndex = 8;
+            //
+            // m_lon2TextBox
+            //
+            this.m_lon2TextBox.Location = new System.Drawing.Point(131, 92);
+            this.m_lon2TextBox.Name = "m_lon2TextBox";
+            this.m_lon2TextBox.Size = new System.Drawing.Size(129, 20);
+            this.m_lon2TextBox.TabIndex = 9;
+            //
+            // m_s12TextBox
+            //
+            this.m_s12TextBox.Location = new System.Drawing.Point(131, 119);
+            this.m_s12TextBox.Name = "m_s12TextBox";
+            this.m_s12TextBox.Size = new System.Drawing.Size(129, 20);
+            this.m_s12TextBox.TabIndex = 10;
+            //
+            // m_azimuthTextBox
+            //
+            this.m_azimuthTextBox.Location = new System.Drawing.Point(131, 146);
+            this.m_azimuthTextBox.Name = "m_azimuthTextBox";
+            this.m_azimuthTextBox.Size = new System.Drawing.Size(129, 20);
+            this.m_azimuthTextBox.TabIndex = 11;
+            //
+            // button1
+            //
+            this.button1.Location = new System.Drawing.Point(19, 178);
+            this.button1.Name = "button1";
+            this.button1.Size = new System.Drawing.Size(75, 23);
+            this.button1.TabIndex = 12;
+            this.button1.Text = "Direct";
+            this.button1.UseVisualStyleBackColor = true;
+            this.button1.Click += new System.EventHandler(this.OnDirect);
+            //
+            // button2
+            //
+            this.button2.Location = new System.Drawing.Point(131, 177);
+            this.button2.Name = "button2";
+            this.button2.Size = new System.Drawing.Size(75, 23);
+            this.button2.TabIndex = 13;
+            this.button2.Text = "Inverse";
+            this.button2.UseVisualStyleBackColor = true;
+            this.button2.Click += new System.EventHandler(this.OnIndirect);
+            //
+            // label7
+            //
+            this.label7.AutoSize = true;
+            this.label7.Location = new System.Drawing.Point(306, 17);
+            this.label7.Name = "label7";
+            this.label7.Size = new System.Drawing.Size(96, 13);
+            this.label7.TabIndex = 14;
+            this.label7.Text = "Rhumb Line Points";
+            //
+            // m_pointsView
+            //
+            this.m_pointsView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.columnHeader1,
+            this.columnHeader2});
+            this.m_pointsView.Location = new System.Drawing.Point(309, 38);
+            this.m_pointsView.Name = "m_pointsView";
+            this.m_pointsView.Size = new System.Drawing.Size(321, 128);
+            this.m_pointsView.TabIndex = 15;
+            this.m_pointsView.UseCompatibleStateImageBehavior = false;
+            this.m_pointsView.View = System.Windows.Forms.View.Details;
+            //
+            // columnHeader1
+            //
+            this.columnHeader1.Text = "Latitude (deg)";
+            this.columnHeader1.Width = 161;
+            //
+            // columnHeader2
+            //
+            this.columnHeader2.Text = "Longitude (deg)";
+            this.columnHeader2.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+            this.columnHeader2.Width = 120;
+            //
+            // RhumbPanel
+            //
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.m_pointsView);
+            this.Controls.Add(this.label7);
+            this.Controls.Add(this.button2);
+            this.Controls.Add(this.button1);
+            this.Controls.Add(this.m_azimuthTextBox);
+            this.Controls.Add(this.m_s12TextBox);
+            this.Controls.Add(this.m_lon2TextBox);
+            this.Controls.Add(this.m_lat2TextBox);
+            this.Controls.Add(this.m_lon1TextBox);
+            this.Controls.Add(this.m_Lat1TextBox);
+            this.Controls.Add(this.label6);
+            this.Controls.Add(this.label5);
+            this.Controls.Add(this.label4);
+            this.Controls.Add(this.label3);
+            this.Controls.Add(this.label2);
+            this.Controls.Add(this.label1);
+            this.Name = "RhumbPanel";
+            this.Size = new System.Drawing.Size(662, 287);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.Label label6;
+        private System.Windows.Forms.TextBox m_Lat1TextBox;
+        private System.Windows.Forms.TextBox m_lon1TextBox;
+        private System.Windows.Forms.TextBox m_lat2TextBox;
+        private System.Windows.Forms.TextBox m_lon2TextBox;
+        private System.Windows.Forms.TextBox m_s12TextBox;
+        private System.Windows.Forms.TextBox m_azimuthTextBox;
+        private System.Windows.Forms.Button button1;
+        private System.Windows.Forms.Button button2;
+        private System.Windows.Forms.Label label7;
+        private System.Windows.Forms.ListView m_pointsView;
+        private System.Windows.Forms.ColumnHeader columnHeader1;
+        private System.Windows.Forms.ColumnHeader columnHeader2;
+    }
+}
diff --git a/dotnet/Projections/RhumbPanel.cs b/dotnet/Projections/RhumbPanel.cs
new file mode 100644
index 0000000..91e80bf
--- /dev/null
+++ b/dotnet/Projections/RhumbPanel.cs
@@ -0,0 +1,81 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using NETGeographicLib;
+
+namespace Projections
+{
+    public partial class RhumbPanel : UserControl
+    {
+        Rhumb m_rhumb;
+        public RhumbPanel()
+        {
+            InitializeComponent();
+            m_rhumb = Rhumb.WGS84();
+            m_Lat1TextBox.Text = "32";
+            m_lon1TextBox.Text = "-86";
+            m_lat2TextBox.Text = "33";
+            m_lon2TextBox.Text = "-87";
+            OnIndirect(this, null);
+        }
+
+        private void OnDirect(object sender, EventArgs e)
+        {
+            try
+            {
+                double lat1 = Double.Parse( m_Lat1TextBox.Text );
+                double lon1 = Double.Parse( m_lon1TextBox.Text );
+                double s12 = Double.Parse( m_s12TextBox.Text );
+                double azimuth = Double.Parse( m_azimuthTextBox.Text );
+                double lat2, lon2;
+                m_rhumb.Direct(lat1, lon1, azimuth, s12, out lat2, out lon2);
+                m_lat2TextBox.Text = lat2.ToString();
+                m_lon2TextBox.Text = lon2.ToString();
+                GeneratePoints(lat1, lon1, azimuth, 0.25 * s12);
+            }
+            catch (Exception xcpt )
+            {
+                MessageBox.Show( xcpt.Message, "Invalid input", MessageBoxButtons.OK, MessageBoxIcon.Error );
+            }
+        }
+
+        private void OnIndirect(object sender, EventArgs e)
+        {
+            try
+            {
+                double lat1 = Double.Parse(m_Lat1TextBox.Text);
+                double lon1 = Double.Parse(m_lon1TextBox.Text);
+                double lat2 = Double.Parse(m_lat2TextBox.Text);
+                double lon2 = Double.Parse(m_lon2TextBox.Text);
+                double s12, azimuth;
+                m_rhumb.Inverse(lat1, lon1, lat2, lon2, out s12, out azimuth);
+                m_s12TextBox.Text = s12.ToString();
+                m_azimuthTextBox.Text = azimuth.ToString();
+                GeneratePoints(lat1, lon1, azimuth, 0.25 * s12);
+            }
+            catch (Exception xcpt)
+            {
+                MessageBox.Show(xcpt.Message, "Invalid input", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void GeneratePoints( double lat1, double lon1, double azimuth, double space )
+        {
+            RhumbLine line = m_rhumb.Line(lat1, lon1, azimuth);
+            m_pointsView.Items.Clear();
+            for (int i = 0; i < 5; i++)
+            {
+                double lat2, lon2;
+                line.Position(i * space, out lat2, out lon2);
+                string[] items = new string[2] { lat2.ToString(), lon2.ToString() };
+                ListViewItem item = new ListViewItem(items);
+                m_pointsView.Items.Add(item);
+            }
+        }
+    }
+}
diff --git a/dotnet/Projections/RhumbPanel.resx b/dotnet/Projections/RhumbPanel.resx
new file mode 100644
index 0000000..ed0aef9
--- /dev/null
+++ b/dotnet/Projections/RhumbPanel.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
diff --git a/dotnet/Projections/TypeIIIProjPanel.cs b/dotnet/Projections/TypeIIIProjPanel.cs
index 675d766..1cf2544 100644
--- a/dotnet/Projections/TypeIIIProjPanel.cs
+++ b/dotnet/Projections/TypeIIIProjPanel.cs
@@ -138,7 +138,7 @@ namespace Projections
                 if (lat != x1 || lon != y1)
                     throw new Exception("Error in UTMUPS.Reverse");
                 UTMUPS.Transfer(zone, northp, x, y, zone + 1, true, out x1, out y1, out zout);
-                str = UTMUPS.EncodeZone(zone, northp);
+                str = UTMUPS.EncodeZone(zone, northp, true);
                 prec = UTMUPS.EncodeEPSG(zone, northp);
                 UTMUPS.DecodeZone(str, out zone, out northp);
                 UTMUPS.DecodeEPSG(prec, out zone, out northp);
diff --git a/dotnet/examples/CS/example-Rhumb.cs b/dotnet/examples/CS/example-Rhumb.cs
new file mode 100644
index 0000000..1f51292
--- /dev/null
+++ b/dotnet/examples/CS/example-Rhumb.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using NETGeographicLib;
+
+namespace example_Rhumb
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            try {
+            Rhumb rhumb = new Rhumb(Constants.WGS84.MajorRadius, Constants.WGS84.Flattening, true);
+            // Alternatively: const Rhumb& rhumb = Rhumb::WGS84();
+            {
+                // Sample direct calculation, travelling about NE from JFK
+                double lat1 = 40.6, lon1 = -73.8, s12 = 5.5e6, azi12 = 51;
+                double lat2, lon2;
+                rhumb.Direct(lat1, lon1, azi12, s12, out lat2, out lon2);
+                    Console.WriteLine( "{0} {1}", lat2, lon2 );
+            }
+            {
+                // Sample inverse calculation, JFK to LHR
+                double
+                lat1 = 40.6, lon1 = -73.8, // JFK Airport
+                lat2 = 51.6, lon2 = -0.5;  // LHR Airport
+                double s12, azi12;
+                rhumb.Inverse(lat1, lon1, lat2, lon2, out s12, out azi12);
+                    Console.WriteLine( "{0} {1}", s12, azi12 );
+            }
+            }
+            catch (GeographicErr e) {
+                Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
+            }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-RhumbLine.cs b/dotnet/examples/CS/example-RhumbLine.cs
new file mode 100644
index 0000000..531d18b
--- /dev/null
+++ b/dotnet/examples/CS/example-RhumbLine.cs
@@ -0,0 +1,42 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using NETGeographicLib;
+
+namespace example_RhumbLine
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+          try {
+            // Print waypoints between JFK and SIN
+            Rhumb rhumb = new Rhumb(Constants.WGS84.MajorRadius, Constants.WGS84.Flattening, true);
+            // Alternatively: const Rhumb& rhumb = Rhumb::WGS84();
+            double
+              lat1 = 40.640, lon1 = -73.779, // JFK
+              lat2 =  1.359, lon2 = 103.989; // SIN
+            double s12, azi12;
+            rhumb.Inverse(lat1, lon1, lat2, lon2, out s12, out azi12);
+            RhumbLine line = rhumb.Line(lat1, lon1, azi12);
+            // Alternatively
+            // const GeographicLib::RhumbLine line = rhumb.Line(lat1, lon1, azi1);
+            double ds = 500e3;          // Nominal distance between points = 500 km
+            int num = (int)Math.Ceiling(s12 / ds); // The number of intervals
+            {
+              // Use intervals of equal length
+              ds = s12 / num;
+              for (int i = 0; i <= num; ++i) {
+                double lat, lon;
+                line.Position(i * ds, out lat, out lon);
+                        Console.WriteLine( "{0} {1} {2}", i, lat, lon );
+              }
+            }
+          }
+          catch (GeographicErr e) {
+              Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
+          }
+        }
+    }
+}
diff --git a/dotnet/examples/CS/example-UTMUPS.cs b/dotnet/examples/CS/example-UTMUPS.cs
index 2e8594d..28173c2 100644
--- a/dotnet/examples/CS/example-UTMUPS.cs
+++ b/dotnet/examples/CS/example-UTMUPS.cs
@@ -16,7 +16,7 @@ namespace example_UTMUPS
                     bool northp;
                     double x, y;
                     UTMUPS.Forward(lat, lon, out zone, out northp, out x, out y, -1, true);
-                    string zonestr = UTMUPS.EncodeZone(zone, northp);
+                    string zonestr = UTMUPS.EncodeZone(zone, northp, true);
                     Console.WriteLine(String.Format("{0} {1} {2}", zonestr, x, y));
                 }
                 {
diff --git a/dotnet/examples/ManagedCPP/example-Rhumb.cpp b/dotnet/examples/ManagedCPP/example-Rhumb.cpp
new file mode 100644
index 0000000..1be7d23
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-Rhumb.cpp
@@ -0,0 +1,31 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^args)
+{
+  try {
+    Rhumb^ rhumb = gcnew Rhumb(Constants::WGS84::MajorRadius, Constants::WGS84::Flattening, true);
+    // Alternatively: const Rhumb& rhumb = Rhumb::WGS84();
+    {
+      // Sample direct calculation, travelling about NE from JFK
+      double lat1 = 40.6, lon1 = -73.8, s12 = 5.5e6, azi12 = 51;
+      double lat2, lon2;
+      rhumb->Direct(lat1, lon1, azi12, s12, lat2, lon2);
+      Console::WriteLine( "{0} {1}", lat2, lon2 );
+    }
+    {
+      // Sample inverse calculation, JFK to LHR
+      double
+        lat1 = 40.6, lon1 = -73.8, // JFK Airport
+        lat2 = 51.6, lon2 = -0.5;  // LHR Airport
+      double s12, azi12;
+      rhumb->Inverse(lat1, lon1, lat2, lon2, s12, azi12);
+      Console::WriteLine( "{0} {1}", s12, azi12 );
+    }
+  }
+  catch (GeographicErr^ e) {
+      Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
+      return -1;
+  }
+  return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-RhumbLine.cpp b/dotnet/examples/ManagedCPP/example-RhumbLine.cpp
new file mode 100644
index 0000000..cd7bf66
--- /dev/null
+++ b/dotnet/examples/ManagedCPP/example-RhumbLine.cpp
@@ -0,0 +1,35 @@
+using namespace System;
+using namespace NETGeographicLib;
+
+int main(array<System::String ^> ^args)
+{
+  try {
+    // Print waypoints between JFK and SIN
+    Rhumb^ rhumb = gcnew Rhumb(Constants::WGS84::MajorRadius, Constants::WGS84::Flattening, true);
+    // Alternatively: const Rhumb& rhumb = Rhumb::WGS84();
+    double
+      lat1 = 40.640, lon1 = -73.779, // JFK
+      lat2 =  1.359, lon2 = 103.989; // SIN
+    double s12, azi12;
+    rhumb->Inverse(lat1, lon1, lat2, lon2, s12, azi12);
+    RhumbLine^ line = rhumb->Line(lat1, lon1, azi12);
+    // Alternatively
+    // const GeographicLib::RhumbLine line = rhumb.Line(lat1, lon1, azi1);
+    double ds = 500e3;          // Nominal distance between points = 500 km
+    int num = int(Math::Ceiling(s12 / ds)); // The number of intervals
+    {
+      // Use intervals of equal length
+      double ds = s12 / num;
+      for (int i = 0; i <= num; ++i) {
+        double lat, lon;
+        line->Position(i * ds, lat, lon);
+        Console::WriteLine( "{0} {1} {2}", i, lat, lon );
+      }
+    }
+  }
+  catch (GeographicErr^ e) {
+      Console::WriteLine(String::Format("Caught exception: {0}", e->Message));
+      return -1;
+  }
+  return 0;
+}
diff --git a/dotnet/examples/ManagedCPP/example-UTMUPS.cpp b/dotnet/examples/ManagedCPP/example-UTMUPS.cpp
index c90ebe0..a256d0d 100644
--- a/dotnet/examples/ManagedCPP/example-UTMUPS.cpp
+++ b/dotnet/examples/ManagedCPP/example-UTMUPS.cpp
@@ -1,7 +1,7 @@
 using namespace System;
 using namespace NETGeographicLib;
 
-int main(array<System::String ^> ^/*args*/)
+int main(array<System::String ^> ^args)
 {
     try {
         // See also example-GeoCoords.cpp
@@ -12,7 +12,7 @@ int main(array<System::String ^> ^/*args*/)
             bool northp;
             double x, y;
             UTMUPS::Forward(lat, lon, zone, northp, x, y, -1, true);
-            String^ zonestr = UTMUPS::EncodeZone(zone, northp);
+            String^ zonestr = UTMUPS::EncodeZone(zone, northp, true);
             Console::WriteLine(String::Format("{0} {1} {2}", zonestr, x, y));
         }
         {
diff --git a/dotnet/examples/VB/example-Rhumb.vb b/dotnet/examples/VB/example-Rhumb.vb
new file mode 100644
index 0000000..a27a9b4
--- /dev/null
+++ b/dotnet/examples/VB/example-Rhumb.vb
@@ -0,0 +1,24 @@
+Imports NETGeographicLib
+
+Module example_Rhumb
+    Sub Main()
+        Try
+            Dim rhumb As Rhumb = New Rhumb(Constants.WGS84.MajorRadius, Constants.WGS84.Flattening, True)
+            ' Alternatively: const Rhumb& rhumb = Rhumb::WGS84();
+
+            ' Sample direct calculation, travelling about NE from JFK
+            Dim lat1 As Double = 40.6, lon1 = -73.8, s12 = 5500000.0, azi12 = 51
+            Dim lat2 As Double, lon2
+            rhumb.Direct(lat1, lon1, azi12, s12, lat2, lon2)
+            Console.WriteLine("{0} {1}", lat2, lon2)
+
+            ' Sample inverse calculation, JFK to LHR
+            lat1 = 40.6 : lon1 = -73.8 ' JFK Airport
+            lat2 = 51.6 : lon2 = -0.5  ' LHR Airport
+            rhumb.Inverse(lat1, lon1, lat2, lon2, s12, azi12)
+            Console.WriteLine("{0} {1}", s12, azi12)
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-RhumbLine.vb b/dotnet/examples/VB/example-RhumbLine.vb
new file mode 100644
index 0000000..2641097
--- /dev/null
+++ b/dotnet/examples/VB/example-RhumbLine.vb
@@ -0,0 +1,27 @@
+Imports NETGeographicLib
+Module example_RhumbLine
+    Sub Main()
+        Try
+            ' Print waypoints between JFK and SIN
+            Dim rhumb As Rhumb = New Rhumb(Constants.WGS84.MajorRadius, Constants.WGS84.Flattening, True)
+            ' Alternatively: const Rhumb& rhumb = Rhumb::WGS84();
+            Dim lat1 As Double = 40.64, lon1 = -73.779 ' JFK
+            Dim lat2 As Double = 1.359, lon2 = 103.989 ' SIN
+            Dim s12 As Double, azi12
+            rhumb.Inverse(lat1, lon1, lat2, lon2, s12, azi12);
+            Dim line As RhumbLine = rhumb.Line(lat1, lon1, azi12)
+
+            Dim ds As Double = 500000.0          ' Nominal distance between points = 500 km
+            Dim num As Integer = (Integer)Math.Ceiling(s12 / ds) ' The number of intervals
+            ' Use intervals of equal length
+            ds = s12 / num
+            For i As Integer = 0 To num - 1
+                Dim lat As Double, lon
+                line.Position(i * ds, lat, lon)
+                Console.WriteLine("{0} {1} {2}", i, lat, lon)
+            Next
+        Catch ex As GeographicErr
+            Console.WriteLine(String.Format("Caught exception: {0}", ex.Message))
+        End Try
+    End Sub
+End Module
diff --git a/dotnet/examples/VB/example-UTMUPS.vb b/dotnet/examples/VB/example-UTMUPS.vb
index 9e45a0f..bf3fc9c 100644
--- a/dotnet/examples/VB/example-UTMUPS.vb
+++ b/dotnet/examples/VB/example-UTMUPS.vb
@@ -10,7 +10,7 @@ Module example_UTMUPS
             Dim northp As Boolean
             Dim x, y As Double
             UTMUPS.Forward(lat, lon, zone, northp, x, y, -1, True)
-            Dim zonestr As String = UTMUPS.EncodeZone(zone, northp)
+            Dim zonestr As String = UTMUPS.EncodeZone(zone, northp, True)
             Console.WriteLine(String.Format("{0} {1} {2}", zonestr, x, y))
             ' Sample reverse calculation
             zonestr = "38N"
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index fe0034b..d4b1a5b 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -2,7 +2,14 @@
 # "exampleprograms" target.  These are mainly for including as examples
 # within the doxygen documentation; however, compiling them catches some
 # obvious blunders.
-file (GLOB EXAMPLE_SOURCES example-*.cpp)
+if (GEOGRAPHICLIB_PRECISION EQUAL 2)
+  # These examples all assume real = double
+  file (GLOB EXAMPLE_SOURCES example-*.cpp)
+else ()
+  set (EXAMPLE_SOURCES)
+endif ()
+set (EXAMPLE_SOURCES ${EXAMPLE_SOURCES} GeoidToGTX.cpp make-egmcof.cpp)
+
 set (EXAMPLES)
 add_definitions (${PROJECT_DEFINITIONS})
 
@@ -10,16 +17,8 @@ foreach (EXAMPLE_SOURCE ${EXAMPLE_SOURCES})
   get_filename_component (EXAMPLE ${EXAMPLE_SOURCE} NAME_WE)
   set (EXAMPLES ${EXAMPLES} ${EXAMPLE})
   add_executable (${EXAMPLE} EXCLUDE_FROM_ALL ${EXAMPLE_SOURCE})
-  target_link_libraries (${EXAMPLE} ${PROJECT_LIBRARIES})
-endforeach ()
-
-set (OTHER_EXAMPLES GeoidToGTX.cpp)
-
-foreach (EXAMPLE_SOURCE ${OTHER_EXAMPLES})
-  get_filename_component (EXAMPLE ${EXAMPLE_SOURCE} NAME_WE)
-  set (EXAMPLES ${EXAMPLES} ${EXAMPLE})
-  add_executable (${EXAMPLE} EXCLUDE_FROM_ALL ${EXAMPLE_SOURCE})
-  target_link_libraries (${EXAMPLE} ${PROJECT_LIBRARIES})
+  target_link_libraries (${EXAMPLE} ${PROJECT_LIBRARIES}
+    ${QUAD_LIBRARIES} ${MPFR_LIBRARIES})
 endforeach ()
 
 find_package (OpenMP QUIET)
diff --git a/examples/GeoidToGTX.cpp b/examples/GeoidToGTX.cpp
index b4b29de..5e3866c 100644
--- a/examples/GeoidToGTX.cpp
+++ b/examples/GeoidToGTX.cpp
@@ -42,6 +42,8 @@ int main(int argc, char* argv[]) {
     return 1;
   }
   try {
+    // Will need to set the precision for each thread, so save return value
+    int ndigits = Utility::set_digits();
     string model(argv[1]);
     // Number of intervals per degree
     int ndeg = Utility::num<int>(string(argv[2]));
@@ -50,8 +52,8 @@ int main(int argc, char* argv[]) {
     int
       nlat = 180 * ndeg + 1,
       nlon = 360 * ndeg;
-    double
-      delta = 1 / double(ndeg), // Grid spacing
+    Math::real
+      delta = 1 / Math::real(ndeg), // Grid spacing
       latorg = -90,
       lonorg = -180;
     // Write results as floats in binary mode
@@ -59,9 +61,9 @@ int main(int argc, char* argv[]) {
 
     // Write header
     {
-      double transform[] = {latorg, lonorg, delta, delta};
+      Math::real transform[] = {latorg, lonorg, delta, delta};
       unsigned sizes[] = {unsigned(nlat), unsigned(nlon)};
-      Utility::writearray<double, double, true>(file, transform, 4);
+      Utility::writearray<double, Math::real, true>(file, transform, 4);
       Utility::writearray<unsigned, unsigned, true>(file, sizes, 2);
     }
 
@@ -76,12 +78,13 @@ int main(int argc, char* argv[]) {
 #  pragma omp parallel for
 #endif
       for (int ilat = ilat0; ilat < nlat0; ++ilat) { // Loop over latitudes
-        double
+        Utility::set_digits(ndigits);                // Set the precision
+        Math::real
           lat = latorg + (ilat / ndeg) + delta * (ilat - ndeg * (ilat / ndeg)),
           h = 0;
         GravityCircle c(g.Circle(lat, h, GravityModel::GEOID_HEIGHT));
         for (int ilon = 0; ilon < nlon; ++ilon) { // Loop over longitudes
-          double lon = lonorg
+          Math::real lon = lonorg
             + (ilon / ndeg) + delta * (ilon - ndeg * (ilon / ndeg));
           N[ilat - ilat0][ilon] = float(c.GeoidHeight(lon));
         } // longitude loop
diff --git a/examples/Makefile.am b/examples/Makefile.am
index 8e32057..4b61a2d 100644
--- a/examples/Makefile.am
+++ b/examples/Makefile.am
@@ -36,6 +36,8 @@ EXAMPLE_FILES = \
 	example-OSGB.cpp \
 	example-PolarStereographic.cpp \
 	example-PolygonArea.cpp \
+	example-Rhumb.cpp \
+	example-RhumbLine.cpp \
 	example-SphericalEngine.cpp \
 	example-SphericalHarmonic.cpp \
 	example-SphericalHarmonic1.cpp \
@@ -44,6 +46,7 @@ EXAMPLE_FILES = \
 	example-TransverseMercatorExact.cpp \
 	example-UTMUPS.cpp \
 	example-Utility.cpp \
-	GeoidToGTX.cpp
+	GeoidToGTX.cpp \
+	make-egmcof.cpp
 
 EXTRA_DIST = CMakeLists.txt $(EXAMPLE_FILES)
diff --git a/examples/Makefile.in b/examples/Makefile.in
index 8e86fd7..67ea03b 100644
--- a/examples/Makefile.in
+++ b/examples/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.12.2 from Makefile.am.
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -19,23 +19,51 @@
 #
 # Copyright (C) 2011, Charles Karney <charles at karney.com>
 VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
+        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; \
-    test $$am__dry = yes; \
-  }
+  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@
@@ -56,7 +84,7 @@ build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
 subdir = examples
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
 	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
@@ -68,6 +96,18 @@ mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/include/GeographicLib/Config-ac.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 = \
@@ -75,9 +115,11 @@ am__can_run_installinfo = \
     n|no|NO) false;; \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -146,7 +188,6 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POD2HTML = @POD2HTML@
 POD2MAN = @POD2MAN@
-POW_LIB = @POW_LIB@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
@@ -243,6 +284,8 @@ EXAMPLE_FILES = \
 	example-OSGB.cpp \
 	example-PolarStereographic.cpp \
 	example-PolygonArea.cpp \
+	example-Rhumb.cpp \
+	example-RhumbLine.cpp \
 	example-SphericalEngine.cpp \
 	example-SphericalHarmonic.cpp \
 	example-SphericalHarmonic1.cpp \
@@ -251,7 +294,8 @@ EXAMPLE_FILES = \
 	example-TransverseMercatorExact.cpp \
 	example-UTMUPS.cpp \
 	example-Utility.cpp \
-	GeoidToGTX.cpp
+	GeoidToGTX.cpp \
+	make-egmcof.cpp
 
 EXTRA_DIST = CMakeLists.txt $(EXAMPLE_FILES)
 all: all-am
@@ -293,11 +337,9 @@ mostlyclean-libtool:
 
 clean-libtool:
 	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
+tags TAGS:
 
-ctags: CTAGS
-CTAGS:
+ctags CTAGS:
 
 cscope cscopelist:
 
@@ -435,15 +477,16 @@ uninstall-am:
 .MAKE: install-am install-strip
 
 .PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	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 uninstall uninstall-am
+	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 uninstall uninstall-am
 
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
diff --git a/examples/example-Accumulator.cpp b/examples/example-Accumulator.cpp
index d301e19..50bc22e 100644
--- a/examples/example-Accumulator.cpp
+++ b/examples/example-Accumulator.cpp
@@ -12,7 +12,7 @@ int main() {
     // Compare using Accumulator and ordinary summation for a sum of large and
     // small terms.
     double sum = 0;
-    Accumulator<double> acc = 0;
+    Accumulator<> acc = 0;
     sum += 1e20; sum += 1; sum += 2; sum += 100; sum += 5000; sum += -1e20;
     acc += 1e20; acc += 1; acc += 2; acc += 100; acc += 5000; acc += -1e20;
     cout << sum << " " << acc() << "\n";
diff --git a/examples/example-AlbersEqualArea.cpp b/examples/example-AlbersEqualArea.cpp
index f56dc73..5552eea 100644
--- a/examples/example-AlbersEqualArea.cpp
+++ b/examples/example-AlbersEqualArea.cpp
@@ -10,8 +10,8 @@ using namespace GeographicLib;
 int main() {
   try {
    const double
-     a = Constants::WGS84_a<double>(),
-     f = Constants::WGS84_f<double>(),
+     a = Constants::WGS84_a(),
+     f = Constants::WGS84_f(),
      lat1 = 40 + 58/60.0, lat2 = 39 + 56/60.0, // standard parallels
      k1 = 1,                                   // scale
      lon0 = -77 - 45/60.0;                     // Central meridan
@@ -22,14 +22,14 @@ int main() {
      double lat = 39.95, lon = -75.17;    // Philadelphia
      double x, y;
      albers.Forward(lon0, lat, lon, x, y);
-     std::cout << x << " " << y << "\n";
+     cout << x << " " << y << "\n";
    }
    {
      // Sample conversion from Albers Equal Area grid to geodetic
      double x = 220e3, y = -53e3;
      double lat, lon;
      albers.Reverse(lon0, x, y, lat, lon);
-     std::cout << lat << " " << lon << "\n";
+     cout << lat << " " << lon << "\n";
    }
   }
   catch (const exception& e) {
diff --git a/examples/example-AzimuthalEquidistant.cpp b/examples/example-AzimuthalEquidistant.cpp
index 8af2d00..73e9922 100644
--- a/examples/example-AzimuthalEquidistant.cpp
+++ b/examples/example-AzimuthalEquidistant.cpp
@@ -11,7 +11,7 @@ using namespace GeographicLib;
 int main() {
   try {
     Geodesic geod(Constants::WGS84_a(), Constants::WGS84_f());
-    // Alternatively: const Geodesic& geod = Geodesic::WGS84;
+    // Alternatively: const Geodesic& geod = Geodesic::WGS84();
     const double lat0 = 48 + 50/60.0, lon0 = 2 + 20/60.0; // Paris
     AzimuthalEquidistant proj(geod);
     {
diff --git a/examples/example-CassiniSoldner.cpp b/examples/example-CassiniSoldner.cpp
index 173a717..1db18a7 100644
--- a/examples/example-CassiniSoldner.cpp
+++ b/examples/example-CassiniSoldner.cpp
@@ -11,7 +11,7 @@ using namespace GeographicLib;
 int main() {
   try {
     Geodesic geod(Constants::WGS84_a(), Constants::WGS84_f());
-    // Alternatively: const Geodesic& geod = Geodesic::WGS84;
+    // Alternatively: const Geodesic& geod = Geodesic::WGS84();
     const double lat0 = 48 + 50/60.0, lon0 = 2 + 20/60.0; // Paris
     CassiniSoldner proj(lat0, lon0, geod);
     {
diff --git a/examples/example-Ellipsoid.cpp b/examples/example-Ellipsoid.cpp
index 3e00a75..2e2dc71 100644
--- a/examples/example-Ellipsoid.cpp
+++ b/examples/example-Ellipsoid.cpp
@@ -10,7 +10,7 @@ using namespace GeographicLib;
 int main() {
   try {
     Ellipsoid wgs84(Constants::WGS84_a(), Constants::WGS84_f());
-    // Alternatively: const Ellipsoid& wgs84 = Ellipsoid::WGS84;
+    // Alternatively: const Ellipsoid& wgs84 = Ellipsoid::WGS84();
     cout << "The latitude half way between the equator and the pole is "
          << wgs84.InverseRectifyingLatitude(45) << "\n";
     cout << "Half the area of the ellipsoid lies between latitudes +/- "
diff --git a/examples/example-Geocentric.cpp b/examples/example-Geocentric.cpp
index 4f069f2..2989f34 100644
--- a/examples/example-Geocentric.cpp
+++ b/examples/example-Geocentric.cpp
@@ -11,7 +11,7 @@ using namespace GeographicLib;
 int main() {
   try {
     Geocentric earth(Constants::WGS84_a(), Constants::WGS84_f());
-    // Alternatively: const Geocentric& earth = Geocentric::WGS84;
+    // Alternatively: const Geocentric& earth = Geocentric::WGS84();
     {
       // Sample forward calculation
       double lat = 27.99, lon = 86.93, h = 8820; // Mt Everest
diff --git a/examples/example-Geodesic-small.cpp b/examples/example-Geodesic-small.cpp
index 07cf135..b69b3ec 100644
--- a/examples/example-Geodesic-small.cpp
+++ b/examples/example-Geodesic-small.cpp
@@ -7,7 +7,7 @@ using namespace std;
 using namespace GeographicLib;
 
 int main() {
-  const Geodesic& geod = Geodesic::WGS84;
+  const Geodesic& geod = Geodesic::WGS84();
   // Distance from JFK to LHR
   double
     lat1 = 40.6, lon1 = -73.8, // JFK Airport
diff --git a/examples/example-Geodesic.cpp b/examples/example-Geodesic.cpp
index d6258d9..cab34da 100644
--- a/examples/example-Geodesic.cpp
+++ b/examples/example-Geodesic.cpp
@@ -11,7 +11,7 @@ using namespace GeographicLib;
 int main() {
   try {
     Geodesic geod(Constants::WGS84_a(), Constants::WGS84_f());
-    // Alternatively: const Geodesic& geod = Geodesic::WGS84;
+    // Alternatively: const Geodesic& geod = Geodesic::WGS84();
     {
       // Sample direct calculation, travelling about NE from JFK
       double lat1 = 40.6, lon1 = -73.8, s12 = 5.5e6, azi1 = 51;
diff --git a/examples/example-GeodesicExact.cpp b/examples/example-GeodesicExact.cpp
index 0745b22..a74dcd2 100644
--- a/examples/example-GeodesicExact.cpp
+++ b/examples/example-GeodesicExact.cpp
@@ -11,7 +11,7 @@ using namespace GeographicLib;
 int main() {
   try {
     GeodesicExact geod(Constants::WGS84_a(), Constants::WGS84_f());
-    // Alternatively: const GeodesicExact& geod = GeodesicExact::WGS84;
+    // Alternatively: const GeodesicExact& geod = GeodesicExact::WGS84();
     {
       // Sample direct calculation, travelling about NE from JFK
       double lat1 = 40.6, lon1 = -73.8, s12 = 5.5e6, azi1 = 51;
diff --git a/examples/example-GeodesicLine.cpp b/examples/example-GeodesicLine.cpp
index ffe4c37..438696c 100644
--- a/examples/example-GeodesicLine.cpp
+++ b/examples/example-GeodesicLine.cpp
@@ -15,7 +15,7 @@ int main() {
   try {
     // Print waypoints between JFK and SIN
     Geodesic geod(Constants::WGS84_a(), Constants::WGS84_f());
-    // Alternatively: const Geodesic& geod = Geodesic::WGS84;
+    // Alternatively: const Geodesic& geod = Geodesic::WGS84();
     double
       lat1 = 40.640, lon1 = -73.779, // JFK
       lat2 =  1.359, lon2 = 103.989; // SIN
diff --git a/examples/example-GeodesicLineExact.cpp b/examples/example-GeodesicLineExact.cpp
index 2047366..4a17471 100644
--- a/examples/example-GeodesicLineExact.cpp
+++ b/examples/example-GeodesicLineExact.cpp
@@ -15,7 +15,7 @@ int main() {
   try {
     // Print waypoints between JFK and SIN
     GeodesicExact geod(Constants::WGS84_a(), Constants::WGS84_f());
-    // Alternatively: const GeodesicExact& geod = GeodesicExact::WGS84;
+    // Alternatively: const GeodesicExact& geod = GeodesicExact::WGS84();
     double
       lat1 = 40.640, lon1 = -73.779, // JFK
       lat2 =  1.359, lon2 = 103.989; // SIN
@@ -23,7 +23,7 @@ int main() {
       a12 = geod.Inverse(lat1, lon1, lat2, lon2, s12, azi1, azi2);
     const GeographicLib::GeodesicLineExact line(geod, lat1, lon1, azi1);
     // Alternatively
-    // const GeographicLib::GeodesicLineExact line = geod.Line(lat1, lon1, azi1);
+    // const GeographicLib::GeodesicLineExact line = geod.Line(lat1,lon1,azi1);
     double ds = 500e3;          // Nominal distance between points = 500 km
     int num = int(ceil(s12 / ds)); // The number of intervals
     cout << fixed << setprecision(3);
diff --git a/examples/example-Gnomonic.cpp b/examples/example-Gnomonic.cpp
index a78a860..a66f482 100644
--- a/examples/example-Gnomonic.cpp
+++ b/examples/example-Gnomonic.cpp
@@ -11,7 +11,7 @@ using namespace GeographicLib;
 int main() {
   try {
     Geodesic geod(Constants::WGS84_a(), Constants::WGS84_f());
-    // Alternatively: const Geodesic& geod = Geodesic::WGS84;
+    // Alternatively: const Geodesic& geod = Geodesic::WGS84();
     const double lat0 = 48 + 50/60.0, lon0 = 2 + 20/60.0; // Paris
     Gnomonic proj(geod);
     {
diff --git a/examples/example-LambertConformalConic.cpp b/examples/example-LambertConformalConic.cpp
index b57308e..fa1e89c 100644
--- a/examples/example-LambertConformalConic.cpp
+++ b/examples/example-LambertConformalConic.cpp
@@ -12,7 +12,7 @@ int main() {
     // Define the Pennsylvania South state coordinate system EPSG:3364
     // http://www.spatialreference.org/ref/epsg/3364/
     const double
-      a = Constants::WGS84_a<double>(),
+      a = Constants::WGS84_a(),
       f = 1/298.257222101,                      // GRS80
       lat1 = 40 + 58/60.0, lat2 = 39 + 56/60.0, // standard parallels
       k1 = 1,                                   // scale
@@ -30,7 +30,7 @@ int main() {
       double x, y;
       PASouth.Forward(lon0, lat, lon, x, y);
       x -= x0; y -= y0;
-      std::cout << x << " " << y << "\n";
+      cout << x << " " << y << "\n";
     }
     {
       // Sample conversion from PASouth grid to geodetic
@@ -38,7 +38,7 @@ int main() {
       double lat, lon;
       x += x0; y += y0;
       PASouth.Reverse(lon0, x, y, lat, lon);
-      std::cout << lat << " " << lon << "\n";
+      cout << lat << " " << lon << "\n";
     }
   }
   catch (const exception& e) {
diff --git a/examples/example-LocalCartesian.cpp b/examples/example-LocalCartesian.cpp
index ce09072..d16b4c7 100644
--- a/examples/example-LocalCartesian.cpp
+++ b/examples/example-LocalCartesian.cpp
@@ -12,7 +12,7 @@ using namespace GeographicLib;
 int main() {
   try {
     Geocentric earth(Constants::WGS84_a(), Constants::WGS84_f());
-    // Alternatively: const Geocentric& earth = Geocentric::WGS84;
+    // Alternatively: const Geocentric& earth = Geocentric::WGS84();
     const double lat0 = 48 + 50/60.0, lon0 = 2 + 20/60.0; // Paris
     LocalCartesian proj(lat0, lon0, 0, earth);
     {
diff --git a/examples/example-NormalGravity.cpp b/examples/example-NormalGravity.cpp
index 461c165..1a9efa5 100644
--- a/examples/example-NormalGravity.cpp
+++ b/examples/example-NormalGravity.cpp
@@ -10,10 +10,9 @@ using namespace GeographicLib;
 
 int main() {
   try {
-    NormalGravity grav(Constants::WGS84_a(), Constants::WGS84_GM<double>(),
-                       Constants::WGS84_omega<double>(),
-                       Constants::WGS84_f(), 0);
-    // Alternatively: const NormalGravity& grav = NormalGravity::WGS84;
+    NormalGravity grav(Constants::WGS84_a(), Constants::WGS84_GM(),
+                       Constants::WGS84_omega(), Constants::WGS84_f(), 0);
+    // Alternatively: const NormalGravity& grav = NormalGravity::WGS84();
     double lat = 27.99, h = 8820; // Mt Everest
     double gammay, gammaz;
     grav.Gravity(lat, h, gammay, gammaz);
diff --git a/examples/example-PolarStereographic.cpp b/examples/example-PolarStereographic.cpp
index 0bf5c63..8b499f0 100644
--- a/examples/example-PolarStereographic.cpp
+++ b/examples/example-PolarStereographic.cpp
@@ -14,7 +14,7 @@ int main() {
     PolarStereographic proj(Constants::WGS84_a(), Constants::WGS84_f(),
                             Constants::UPS_k0());
     // Alternatively:
-    // const PolarStereographic& proj = PolarStereographic::UPS;
+    // const PolarStereographic& proj = PolarStereographic::UPS();
     bool northp = true;
     {
       // Sample forward calculation
diff --git a/examples/example-PolygonArea.cpp b/examples/example-PolygonArea.cpp
index f2610ce..bf848fb 100644
--- a/examples/example-PolygonArea.cpp
+++ b/examples/example-PolygonArea.cpp
@@ -12,7 +12,7 @@ using namespace GeographicLib;
 int main() {
   try {
     Geodesic geod(Constants::WGS84_a(), Constants::WGS84_f());
-    // Alternatively: const Geodesic& geod = Geodesic::WGS84;
+    // Alternatively: const Geodesic& geod = Geodesic::WGS84();
     PolygonArea poly(geod);
     poly.AddPoint( 52,  0);     // London
     poly.AddPoint( 41,-74);     // New York
diff --git a/examples/example-Geodesic.cpp b/examples/example-Rhumb.cpp
similarity index 56%
copy from examples/example-Geodesic.cpp
copy to examples/example-Rhumb.cpp
index d6258d9..048ffb0 100644
--- a/examples/example-Geodesic.cpp
+++ b/examples/example-Rhumb.cpp
@@ -1,8 +1,8 @@
-// Example of using the GeographicLib::Geodesic class
+// Example of using the GeographicLib::Rhumb class
 
 #include <iostream>
 #include <exception>
-#include <GeographicLib/Geodesic.hpp>
+#include <GeographicLib/Rhumb.hpp>
 #include <GeographicLib/Constants.hpp>
 
 using namespace std;
@@ -10,13 +10,13 @@ using namespace GeographicLib;
 
 int main() {
   try {
-    Geodesic geod(Constants::WGS84_a(), Constants::WGS84_f());
-    // Alternatively: const Geodesic& geod = Geodesic::WGS84;
+    Rhumb rhumb(Constants::WGS84_a(), Constants::WGS84_f());
+    // Alternatively: const Rhumb& rhumb = Rhumb::WGS84();
     {
       // Sample direct calculation, travelling about NE from JFK
-      double lat1 = 40.6, lon1 = -73.8, s12 = 5.5e6, azi1 = 51;
+      double lat1 = 40.6, lon1 = -73.8, s12 = 5.5e6, azi12 = 51;
       double lat2, lon2;
-      geod.Direct(lat1, lon1, azi1, s12, lat2, lon2);
+      rhumb.Direct(lat1, lon1, azi12, s12, lat2, lon2);
       cout << lat2 << " " << lon2 << "\n";
     }
     {
@@ -24,9 +24,9 @@ int main() {
       double
         lat1 = 40.6, lon1 = -73.8, // JFK Airport
         lat2 = 51.6, lon2 = -0.5;  // LHR Airport
-      double s12;
-      geod.Inverse(lat1, lon1, lat2, lon2, s12);
-      cout << s12 << "\n";
+      double s12, azi12;
+      rhumb.Inverse(lat1, lon1, lat2, lon2, s12, azi12);
+      cout << s12 << " " << azi12 << "\n";
     }
   }
   catch (const exception& e) {
diff --git a/examples/example-GeodesicLine.cpp b/examples/example-RhumbLine.cpp
similarity index 53%
copy from examples/example-GeodesicLine.cpp
copy to examples/example-RhumbLine.cpp
index ffe4c37..cf33c65 100644
--- a/examples/example-GeodesicLine.cpp
+++ b/examples/example-RhumbLine.cpp
@@ -1,11 +1,10 @@
-// Example of using the GeographicLib::GeodesicLine class
+// Example of using the GeographicLib::RhumbLine class
 
 #include <iostream>
 #include <exception>
 #include <cmath>
 #include <iomanip>
-#include <GeographicLib/Geodesic.hpp>
-#include <GeographicLib/GeodesicLine.hpp>
+#include <GeographicLib/Rhumb.hpp>
 #include <GeographicLib/Constants.hpp>
 
 using namespace std;
@@ -14,16 +13,16 @@ using namespace GeographicLib;
 int main() {
   try {
     // Print waypoints between JFK and SIN
-    Geodesic geod(Constants::WGS84_a(), Constants::WGS84_f());
-    // Alternatively: const Geodesic& geod = Geodesic::WGS84;
+    Rhumb rhumb(Constants::WGS84_a(), Constants::WGS84_f());
+    // Alternatively: const Rhumb& rhumb = Rhumb::WGS84();
     double
       lat1 = 40.640, lon1 = -73.779, // JFK
       lat2 =  1.359, lon2 = 103.989; // SIN
-    double s12, azi1, azi2,
-      a12 = geod.Inverse(lat1, lon1, lat2, lon2, s12, azi1, azi2);
-    const GeographicLib::GeodesicLine line(geod, lat1, lon1, azi1);
+    double s12, azi12;
+    rhumb.Inverse(lat1, lon1, lat2, lon2, s12, azi12);
+    const GeographicLib::RhumbLine line = rhumb.Line(lat1, lon1, azi12);
     // Alternatively
-    // const GeographicLib::GeodesicLine line = geod.Line(lat1, lon1, azi1);
+    // const GeographicLib::RhumbLine line = rhumb.Line(lat1, lon1, azi1);
     double ds = 500e3;          // Nominal distance between points = 500 km
     int num = int(ceil(s12 / ds)); // The number of intervals
     cout << fixed << setprecision(3);
@@ -36,15 +35,6 @@ int main() {
        cout << i << " " << lat << " " << lon << "\n";
       }
     }
-    {
-      // Slightly faster, use intervals of equal arc length
-      double da = a12 / num;
-      for (int i = 0; i <= num; ++i) {
-        double lat, lon;
-       line.ArcPosition(i * da, lat, lon);
-       cout << i << " " << lat << " " << lon << "\n";
-      }
-    }
   }
   catch (const exception& e) {
     cerr << "Caught exception: " << e.what() << "\n";
diff --git a/examples/example-TransverseMercator.cpp b/examples/example-TransverseMercator.cpp
index 678eeab..65b0173 100644
--- a/examples/example-TransverseMercator.cpp
+++ b/examples/example-TransverseMercator.cpp
@@ -13,7 +13,8 @@ int main() {
   try {
     TransverseMercator proj(Constants::WGS84_a(), Constants::WGS84_f(),
                             Constants::UTM_k0());
-    // Alternatively: const TransverseMercator& proj = TransverseMercator::UTM;
+    // Alternatively:
+    // const TransverseMercator& proj = TransverseMercator::UTM();
     double lon0 = -75;          // Central meridian for UTM zone 18
     {
       // Sample forward calculation
diff --git a/examples/example-TransverseMercatorExact.cpp b/examples/example-TransverseMercatorExact.cpp
index 0c951bc..fb70ab1 100644
--- a/examples/example-TransverseMercatorExact.cpp
+++ b/examples/example-TransverseMercatorExact.cpp
@@ -14,7 +14,7 @@ int main() {
     TransverseMercatorExact proj(Constants::WGS84_a(), Constants::WGS84_f(),
                                  Constants::UTM_k0());
     // Alternatively:
-    // const TransverseMercatorExact& proj = TransverseMercatorExact::UTM;
+    // const TransverseMercatorExact& proj = TransverseMercatorExact::UTM();
     double lon0 = -75;          // Central meridian for UTM zone 18
     {
       // Sample forward calculation
diff --git a/examples/example-UTMUPS.cpp b/examples/example-UTMUPS.cpp
index a2671d0..5c567fc 100644
--- a/examples/example-UTMUPS.cpp
+++ b/examples/example-UTMUPS.cpp
@@ -25,7 +25,7 @@ int main() {
     }
     {
       // Sample reverse calculation
-      string zonestr = "38N";
+      string zonestr = "38n";
       int zone;
       bool northp;
       UTMUPS::DecodeZone(zonestr, zone, northp);
diff --git a/examples/make-egmcof.cpp b/examples/make-egmcof.cpp
new file mode 100644
index 0000000..24295d6
--- /dev/null
+++ b/examples/make-egmcof.cpp
@@ -0,0 +1,46 @@
+// Write the coefficient files needed for approximating the normal gravity
+// field with a GravityModel.  WARNING: this creates files, wgs84.egm.cof and
+// grs80.egm.cof, in the current directory.
+
+#include <cmath>
+#include <fstream>
+#include <iostream>
+#include <GeographicLib/NormalGravity.hpp>
+#include <GeographicLib/Utility.hpp>
+
+using namespace std;
+using namespace GeographicLib;
+
+int main() {
+  try {
+    Utility::set_digits();
+    const char* filenames[] = {"wgs84.egm.cof", "grs80.egm.cof"};
+    const char* ids[] = {"WGS1984A", "GRS1980A"};
+    for (int grs80 = 0; grs80 < 2; ++grs80) {
+      ofstream file(filenames[grs80], ios::binary);
+      Utility::writearray<char, char, false>(file, ids[grs80], 8);
+      const int N = 20, M = 0,
+        cnum = (M + 1) * (2 * N - M + 2) / 2; // cnum = N + 1
+      vector<int> num(2);
+      num[0] = N; num[1] = M;
+      Utility::writearray<int, int, false>(file, num);
+      vector<Math::real> c(cnum, 0);
+      const NormalGravity& earth(grs80 ? NormalGravity::GRS80() :
+                                 NormalGravity::WGS84());
+      for (int n = 2; n <= N; n += 2)
+        c[n] = - earth.DynamicalFormFactor(n) / sqrt(Math::real(2*n + 1));
+      Utility::writearray<double, Math::real, false>(file, c);
+      num[0] = num[1] = -1;
+      Utility::writearray<int, int, false>(file, num);
+    }
+  }
+  catch (const exception& e) {
+    cerr << "Caught exception: " << e.what() << "\n";
+    return 1;
+  }
+  catch (...) {
+    cerr << "Caught unknown exception\n";
+    return 1;
+  }
+  return 0;
+}
diff --git a/include/GeographicLib/Accumulator.hpp b/include/GeographicLib/Accumulator.hpp
index 798b5b0..924b74e 100644
--- a/include/GeographicLib/Accumulator.hpp
+++ b/include/GeographicLib/Accumulator.hpp
@@ -43,13 +43,13 @@ namespace GeographicLib {
     T _s, _t;
     // Same as Math::sum, but requires abs(u) >= abs(v).  This isn't currently
     // used.
-    static inline T fastsum(T u, T v, T& t) throw() {
-      volatile T s = u + v;
-      volatile T vp = s - u;
+    static inline T fastsum(T u, T v, T& t) {
+      GEOGRAPHICLIB_VOLATILE T s = u + v;
+      GEOGRAPHICLIB_VOLATILE T vp = s - u;
       t = v - vp;
       return s;
     }
-    void Add(T y) throw() {
+    void Add(T y) {
       // Here's Shewchuk's solution...
       T u;                       // hold exact sum as [s, t, u]
       y  = Math::sum(y, _t,  u); // Accumulate starting at least significant end
@@ -86,7 +86,7 @@ namespace GeographicLib {
       else
         _t += u;                // otherwise just accumulate u to t.
     }
-    T Sum(T y) const throw() {
+    T Sum(T y) const {
       Accumulator a(*this);
       a.Add(y);
       return a._s;
@@ -98,41 +98,41 @@ namespace GeographicLib {
      *
      * @param[in] y set \e sum = \e y.
      **********************************************************************/
-    Accumulator(T y = T(0)) throw() : _s(y), _t(0) {
-      STATIC_ASSERT(!std::numeric_limits<T>::is_integer,
-                    "Accumulator type is not floating point");
+    Accumulator(T y = T(0)) : _s(y), _t(0) {
+      GEOGRAPHICLIB_STATIC_ASSERT(!std::numeric_limits<T>::is_integer,
+                                  "Accumulator type is not floating point");
     }
     /**
      * Set the accumulator to a number.
      *
      * @param[in] y set \e sum = \e y.
      **********************************************************************/
-    Accumulator& operator=(T y) throw() { _s = y; _t = 0; return *this; }
+    Accumulator& operator=(T y) { _s = y; _t = 0; return *this; }
     /**
      * Return the value held in the accumulator.
      *
      * @return \e sum.
      **********************************************************************/
-    T operator()() const throw() { return _s; }
+    T operator()() const { return _s; }
     /**
      * Return the result of adding a number to \e sum (but don't change \e sum).
      *
      * @param[in] y the number to be added to the sum.
      * @return \e sum + \e y.
      **********************************************************************/
-    T operator()(T y) const throw() { return Sum(y); }
+    T operator()(T y) const { return Sum(y); }
     /**
      * Add a number to the accumulator.
      *
      * @param[in] y set \e sum += \e y.
      **********************************************************************/
-    Accumulator& operator+=(T y) throw() { Add(y); return *this; }
+    Accumulator& operator+=(T y) { Add(y); return *this; }
     /**
      * Subtract a number from the accumulator.
      *
      * @param[in] y set \e sum -= \e y.
      **********************************************************************/
-    Accumulator& operator-=(T y) throw() { Add(-y); return *this; }
+    Accumulator& operator-=(T y) { Add(-y); return *this; }
     /**
      * Multiply accumulator by an integer.  To avoid loss of accuracy, use only
      * integers such that \e n × \e T is exactly representable as a \e T
@@ -140,31 +140,31 @@ namespace GeographicLib {
      *
      * @param[in] n set \e sum *= \e n.
      **********************************************************************/
-    Accumulator& operator*=(int n) throw() { _s *= n; _t *= n; return *this; }
+    Accumulator& operator*=(int n) { _s *= n; _t *= n; return *this; }
     /**
      * Test equality of an Accumulator with a number.
      **********************************************************************/
-    bool operator==(T y) const throw() { return _s == y; }
+    bool operator==(T y) const { return _s == y; }
     /**
      * Test inequality of an Accumulator with a number.
      **********************************************************************/
-    bool operator!=(T y) const throw() { return _s != y; }
+    bool operator!=(T y) const { return _s != y; }
     /**
      * Less operator on an Accumulator and a number.
      **********************************************************************/
-    bool operator<(T y) const throw() { return _s < y; }
+    bool operator<(T y) const { return _s < y; }
     /**
      * Less or equal operator on an Accumulator and a number.
      **********************************************************************/
-    bool operator<=(T y) const throw() { return _s <= y; }
+    bool operator<=(T y) const { return _s <= y; }
     /**
      * Greater operator on an Accumulator and a number.
      **********************************************************************/
-    bool operator>(T y) const throw() { return _s > y; }
+    bool operator>(T y) const { return _s > y; }
     /**
      * Greater or equal operator on an Accumulator and a number.
      **********************************************************************/
-    bool operator>=(T y) const throw() { return _s >= y; }
+    bool operator>=(T y) const { return _s >= y; }
   };
 
 } // namespace GeographicLib
diff --git a/include/GeographicLib/AlbersEqualArea.hpp b/include/GeographicLib/AlbersEqualArea.hpp
index 27cc472..1c50e0c 100644
--- a/include/GeographicLib/AlbersEqualArea.hpp
+++ b/include/GeographicLib/AlbersEqualArea.hpp
@@ -60,31 +60,27 @@ namespace GeographicLib {
   class GEOGRAPHICLIB_EXPORT AlbersEqualArea {
   private:
     typedef Math::real real;
+    real eps_, epsx_, epsx2_, tol_, tol0_;
     real _a, _f, _fm, _e2, _e, _e2m, _qZ, _qx;
     real _sign, _lat0, _k0;
     real _n0, _m02, _nrho0, _k2, _txi0, _scxi0, _sxi0;
-    static const real eps_;
-    static const real epsx_;
-    static const real epsx2_;
-    static const real tol_;
-    static const real tol0_;
-    static const real ahypover_;
     static const int numit_ = 5;   // Newton iterations in Reverse
     static const int numit0_ = 20; // Newton iterations in Init
-    static inline real hyp(real x) throw() { return Math::hypot(real(1), x); }
+    static inline real hyp(real x) { return Math::hypot(real(1), x); }
     // atanh(      e   * x)/      e   if f > 0
     // atan (sqrt(-e2) * x)/sqrt(-e2) if f < 0
     // x                              if f = 0
-    inline real atanhee(real x) const throw() {
+    inline real atanhee(real x) const {
+      using std::atan2; using std::abs;
       return _f > 0 ? Math::atanh(_e * x)/_e :
         // We only invoke atanhee in txif for positive latitude.  Then x is
         // only negative for very prolate ellipsoids (_b/_a >= sqrt(2)) and we
         // still need to return a positive result in this case; hence the need
         // for the call to atan2.
-        (_f < 0 ? (std::atan2(_e * std::abs(x), x < 0 ? -1 : 1)/_e) : x);
+        (_f < 0 ? (atan2(_e * abs(x), x < 0 ? -1 : 1)/_e) : x);
     }
     // return atanh(sqrt(x))/sqrt(x) - 1, accurate for small x
-    static real atanhxm1(real x) throw();
+    static real atanhxm1(real x);
 
     // Divided differences
     // Definition: Df(x,y) = (f(x)-f(y))/(x-y)
@@ -103,22 +99,22 @@ namespace GeographicLib {
     //                = Df(x,y)*(g(x)+g(y))/2 + Dg(x,y)*(f(x)+f(y))/2
     //
     // sn(x) = x/sqrt(1+x^2): Dsn(x,y) = (x+y)/((sn(x)+sn(y))*(1+x^2)*(1+y^2))
-    static inline real Dsn(real x, real y, real sx, real sy) throw() {
+    static inline real Dsn(real x, real y, real sx, real sy) {
       // sx = x/hyp(x)
       real t = x * y;
       return t > 0 ? (x + y) * Math::sq( (sx * sy)/t ) / (sx + sy) :
         (x - y != 0 ? (sx - sy) / (x - y) : 1);
     }
     // Datanhee(x,y) = atanhee((x-y)/(1-e^2*x*y))/(x-y)
-    inline real Datanhee(real x, real y) const throw() {
+    inline real Datanhee(real x, real y) const {
       real t = x - y, d = 1 - _e2 * x * y;
-      return t != 0 ? atanhee(t / d) / t : 1 / d;
+      return t ? atanhee(t / d) / t : 1 / d;
     }
     // DDatanhee(x,y) = (Datanhee(1,y) - Datanhee(1,x))/(y-x)
-    real DDatanhee(real x, real y) const throw();
-    void Init(real sphi1, real cphi1, real sphi2, real cphi2, real k1) throw();
-    real txif(real tphi) const throw();
-    real tphif(real txi) const throw();
+    real DDatanhee(real x, real y) const;
+    void Init(real sphi1, real cphi1, real sphi2, real cphi2, real k1);
+    real txif(real tphi) const;
+    real tphif(real txi) const;
 
     friend class Ellipsoid;           // For access to txif, tphif, etc.
   public:
@@ -128,11 +124,11 @@ namespace GeographicLib {
      *
      * @param[in] a equatorial radius of ellipsoid (meters).
      * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
-     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
-     *   to 1/\e f.
+     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set
+     *   flattening to 1/\e f.
      * @param[in] stdlat standard parallel (degrees), the circle of tangency.
      * @param[in] k0 azimuthal scale on the standard parallel.
-     * @exception GeographicErr if \e a, (1 − \e f ) \e a, or \e k0 is
+     * @exception GeographicErr if \e a, (1 − \e f) \e a, or \e k0 is
      *   not positive.
      * @exception GeographicErr if \e stdlat is not in [−90°,
      *   90°].
@@ -144,12 +140,12 @@ namespace GeographicLib {
      *
      * @param[in] a equatorial radius of ellipsoid (meters).
      * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
-     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
-     *   to 1/\e f.
+     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set
+     *   flattening to 1/\e f.
      * @param[in] stdlat1 first standard parallel (degrees).
      * @param[in] stdlat2 second standard parallel (degrees).
      * @param[in] k1 azimuthal scale on the standard parallels.
-     * @exception GeographicErr if \e a, (1 − \e f ) \e a, or \e k1 is
+     * @exception GeographicErr if \e a, (1 − \e f) \e a, or \e k1 is
      *   not positive.
      * @exception GeographicErr if \e stdlat1 or \e stdlat2 is not in
      *   [−90°, 90°], or if \e stdlat1 and \e stdlat2 are
@@ -162,14 +158,14 @@ namespace GeographicLib {
      *
      * @param[in] a equatorial radius of ellipsoid (meters).
      * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
-     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
-     *   to 1/\e f.
+     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set
+     *   flattening to 1/\e f.
      * @param[in] sinlat1 sine of first standard parallel.
      * @param[in] coslat1 cosine of first standard parallel.
      * @param[in] sinlat2 sine of second standard parallel.
      * @param[in] coslat2 cosine of second standard parallel.
      * @param[in] k1 azimuthal scale on the standard parallels.
-     * @exception GeographicErr if \e a, (1 − \e f ) \e a, or \e k1 is
+     * @exception GeographicErr if \e a, (1 − \e f) \e a, or \e k1 is
      *   not positive.
      * @exception GeographicErr if \e stdlat1 or \e stdlat2 is not in
      *   [−90°, 90°], or if \e stdlat1 and \e stdlat2 are
@@ -219,7 +215,7 @@ namespace GeographicLib {
      * poles) will be large but finite.
      **********************************************************************/
     void Forward(real lon0, real lat, real lon,
-                 real& x, real& y, real& gamma, real& k) const throw();
+                 real& x, real& y, real& gamma, real& k) const;
 
     /**
      * Reverse projection, from Lambert conformal conic to geographic.
@@ -242,14 +238,14 @@ namespace GeographicLib {
      * returned.
      **********************************************************************/
     void Reverse(real lon0, real x, real y,
-                 real& lat, real& lon, real& gamma, real& k) const throw();
+                 real& lat, real& lon, real& gamma, real& k) const;
 
     /**
      * AlbersEqualArea::Forward without returning the convergence and
      * scale.
      **********************************************************************/
     void Forward(real lon0, real lat, real lon,
-                 real& x, real& y) const throw() {
+                 real& x, real& y) const {
       real gamma, k;
       Forward(lon0, lat, lon, x, y, gamma, k);
     }
@@ -259,7 +255,7 @@ namespace GeographicLib {
      * scale.
      **********************************************************************/
     void Reverse(real lon0, real x, real y,
-                 real& lat, real& lon) const throw() {
+                 real& lat, real& lon) const {
       real gamma, k;
       Reverse(lon0, x, y, lat, lon, gamma, k);
     }
@@ -271,20 +267,20 @@ namespace GeographicLib {
      * @return \e a the equatorial radius of the ellipsoid (meters).  This is
      *   the value used in the constructor.
      **********************************************************************/
-    Math::real MajorRadius() const throw() { return _a; }
+    Math::real MajorRadius() const { return _a; }
 
     /**
      * @return \e f the flattening of the ellipsoid.  This is the value used in
      *   the constructor.
      **********************************************************************/
-    Math::real Flattening() const throw() { return _f; }
+    Math::real Flattening() const { return _f; }
 
     /// \cond SKIP
     /**
      * <b>DEPRECATED</b>
      * @return \e r the inverse flattening of the ellipsoid.
      **********************************************************************/
-    Math::real InverseFlattening() const throw() { return 1/_f; }
+    Math::real InverseFlattening() const { return 1/_f; }
     /// \endcond
 
     /**
@@ -294,13 +290,13 @@ namespace GeographicLib {
      * in the 1-parallel constructor and lies between \e stdlat1 and \e stdlat2
      * in the 2-parallel constructors.
      **********************************************************************/
-    Math::real OriginLatitude() const throw() { return _lat0; }
+    Math::real OriginLatitude() const { return _lat0; }
 
     /**
      * @return central scale for the projection.  This is the azimuthal scale
      *   on the latitude of origin.
      **********************************************************************/
-    Math::real CentralScale() const throw() { return _k0; }
+    Math::real CentralScale() const { return _k0; }
     ///@}
 
     /**
@@ -308,21 +304,21 @@ namespace GeographicLib {
      * stdlat = 0, and \e k0 = 1.  This degenerates to the cylindrical equal
      * area projection.
      **********************************************************************/
-    static const AlbersEqualArea CylindricalEqualArea;
+    static const AlbersEqualArea& CylindricalEqualArea();
 
     /**
      * A global instantiation of AlbersEqualArea with the WGS84 ellipsoid, \e
      * stdlat = 90°, and \e k0 = 1.  This degenerates to the
      * Lambert azimuthal equal area projection.
      **********************************************************************/
-    static const AlbersEqualArea AzimuthalEqualAreaNorth;
+    static const AlbersEqualArea& AzimuthalEqualAreaNorth();
 
     /**
      * A global instantiation of AlbersEqualArea with the WGS84 ellipsoid, \e
      * stdlat = −90°, and \e k0 = 1.  This degenerates to the
      * Lambert azimuthal equal area projection.
      **********************************************************************/
-    static const AlbersEqualArea AzimuthalEqualAreaSouth;
+    static const AlbersEqualArea& AzimuthalEqualAreaSouth();
   };
 
 } // namespace GeographicLib
diff --git a/include/GeographicLib/AzimuthalEquidistant.hpp b/include/GeographicLib/AzimuthalEquidistant.hpp
index 48d8842..7929050 100644
--- a/include/GeographicLib/AzimuthalEquidistant.hpp
+++ b/include/GeographicLib/AzimuthalEquidistant.hpp
@@ -29,7 +29,7 @@ namespace GeographicLib {
    * projected coordinates.
    *
    * The conversions all take place using a Geodesic object (by default
-   * Geodesic::WGS84).  For more information on geodesics see \ref geodesic.
+   * Geodesic::WGS84()).  For more information on geodesics see \ref geodesic.
    *
    * Example of use:
    * \include example-AzimuthalEquidistant.cpp
@@ -42,8 +42,8 @@ namespace GeographicLib {
   class GEOGRAPHICLIB_EXPORT AzimuthalEquidistant {
   private:
     typedef Math::real real;
+    real eps_;
     Geodesic _earth;
-    static const real eps_;
   public:
 
     /**
@@ -52,8 +52,7 @@ namespace GeographicLib {
      * @param[in] earth the Geodesic object to use for geodesic calculations.
      *   By default this uses the WGS84 ellipsoid.
      **********************************************************************/
-    explicit AzimuthalEquidistant(const Geodesic& earth = Geodesic::WGS84)
-      throw() : _earth(earth) {}
+    explicit AzimuthalEquidistant(const Geodesic& earth = Geodesic::WGS84());
 
     /**
      * Forward projection, from geographic to azimuthal equidistant.
@@ -76,7 +75,7 @@ namespace GeographicLib {
      * within roundoff).
      **********************************************************************/
     void Forward(real lat0, real lon0, real lat, real lon,
-                 real& x, real& y, real& azi, real& rk) const throw();
+                 real& x, real& y, real& azi, real& rk) const;
 
     /**
      * Reverse projection, from azimuthal equidistant to geographic.
@@ -101,13 +100,13 @@ namespace GeographicLib {
      * path.
      **********************************************************************/
     void Reverse(real lat0, real lon0, real x, real y,
-                 real& lat, real& lon, real& azi, real& rk) const throw();
+                 real& lat, real& lon, real& azi, real& rk) const;
 
     /**
      * AzimuthalEquidistant::Forward without returning the azimuth and scale.
      **********************************************************************/
     void Forward(real lat0, real lon0, real lat, real lon,
-                 real& x, real& y) const throw() {
+                 real& x, real& y) const {
       real azi, rk;
       Forward(lat0, lon0, lat, lon, x, y, azi, rk);
     }
@@ -116,7 +115,7 @@ namespace GeographicLib {
      * AzimuthalEquidistant::Reverse without returning the azimuth and scale.
      **********************************************************************/
     void Reverse(real lat0, real lon0, real x, real y,
-                 real& lat, real& lon) const throw() {
+                 real& lat, real& lon) const {
       real azi, rk;
       Reverse(lat0, lon0, x, y, lat, lon, azi, rk);
     }
@@ -128,13 +127,13 @@ namespace GeographicLib {
      * @return \e a the equatorial radius of the ellipsoid (meters).  This is
      *   the value inherited from the Geodesic object used in the constructor.
      **********************************************************************/
-    Math::real MajorRadius() const throw() { return _earth.MajorRadius(); }
+    Math::real MajorRadius() const { return _earth.MajorRadius(); }
 
     /**
      * @return \e f the flattening of the ellipsoid.  This is the value
      *   inherited from the Geodesic object used in the constructor.
      **********************************************************************/
-    Math::real Flattening() const throw() { return _earth.Flattening(); }
+    Math::real Flattening() const { return _earth.Flattening(); }
     ///@}
 
     /// \cond SKIP
@@ -142,7 +141,7 @@ namespace GeographicLib {
      * <b>DEPRECATED</b>
      * @return \e r the inverse flattening of the ellipsoid.
      **********************************************************************/
-    Math::real InverseFlattening() const throw()
+    Math::real InverseFlattening() const
     { return _earth.InverseFlattening(); }
     /// \endcond
   };
diff --git a/include/GeographicLib/CassiniSoldner.hpp b/include/GeographicLib/CassiniSoldner.hpp
index 3915053..e2fa558 100644
--- a/include/GeographicLib/CassiniSoldner.hpp
+++ b/include/GeographicLib/CassiniSoldner.hpp
@@ -49,7 +49,7 @@ namespace GeographicLib {
    * reciprocal of the scale in the northing direction.
    *
    * The conversions all take place using a Geodesic object (by default
-   * Geodesic::WGS84).  For more information on geodesics see \ref geodesic.
+   * Geodesic::WGS84()).  For more information on geodesics see \ref geodesic.
    * The determination of (\e lat1, \e lon1) in the forward projection is by
    * solving the inverse geodesic problem for (\e lat, \e lon) and its twin
    * obtained by reflection in the meridional plane.  The scale is found by
@@ -69,27 +69,27 @@ namespace GeographicLib {
   class GEOGRAPHICLIB_EXPORT CassiniSoldner {
   private:
     typedef Math::real real;
+    real eps1_, tiny_;
     Geodesic _earth;
     GeodesicLine _meridian;
     real _sbet0, _cbet0;
-    static const real eps1_;
-    static const real tiny_;
     static const unsigned maxit_ = 10;
 
     // The following private helper functions are copied from Geodesic.
-    static inline real AngRound(real x) throw() {
+    static inline real AngRound(real x) {
       // The makes the smallest gap in x = 1/16 - nextafter(1/16, 0) = 1/2^57
       // for reals = 0.7 pm on the earth if x is an angle in degrees.  (This
       // is about 1000 times more resolution than we get with angles around 90
       // degrees.)  We use this to avoid having to deal with near singular
       // cases when x is non-zero but tiny (e.g., 1.0e-200).
+      using std::abs;
       const real z = 1/real(16);
-      volatile real y = std::abs(x);
+      GEOGRAPHICLIB_VOLATILE real y = abs(x);
       // The compiler mustn't "simplify" z - (z - y) to y
       y = y < z ? z - (z - y) : y;
       return x < 0 ? -y : y;
     }
-    static inline void SinCosNorm(real& sinx, real& cosx) throw() {
+    static inline void SinCosNorm(real& sinx, real& cosx) {
       real r = Math::hypot(sinx, cosx);
       sinx /= r;
       cosx /= r;
@@ -105,8 +105,7 @@ namespace GeographicLib {
      * This constructor makes an "uninitialized" object.  Call Reset to set the
      * central latitude and longitude, prior to calling Forward and Reverse.
      **********************************************************************/
-    explicit CassiniSoldner(const Geodesic& earth = Geodesic::WGS84) throw()
-      : _earth(earth) {}
+    explicit CassiniSoldner(const Geodesic& earth = Geodesic::WGS84());
 
     /**
      * Constructor for CassiniSoldner specifying a center point.
@@ -120,10 +119,7 @@ namespace GeographicLib {
      * lon0 should be in the range [−540°, 540°).
      **********************************************************************/
     CassiniSoldner(real lat0, real lon0,
-                   const Geodesic& earth = Geodesic::WGS84) throw()
-      : _earth(earth) {
-      Reset(lat0, lon0);
-    }
+                   const Geodesic& earth = Geodesic::WGS84());
 
     /**
      * Set the central point of the projection
@@ -134,7 +130,7 @@ namespace GeographicLib {
      * \e lat0 should be in the range [−90°, 90°] and \e
      * lon0 should be in the range [−540°, 540°).
      **********************************************************************/
-    void Reset(real lat0, real lon0) throw();
+    void Reset(real lat0, real lon0);
 
     /**
      * Forward projection, from geographic to Cassini-Soldner.
@@ -153,7 +149,7 @@ namespace GeographicLib {
      * origin has not been set.
      **********************************************************************/
     void Forward(real lat, real lon,
-                 real& x, real& y, real& azi, real& rk) const throw();
+                 real& x, real& y, real& azi, real& rk) const;
 
     /**
      * Reverse projection, from Cassini-Soldner to geographic.
@@ -171,13 +167,13 @@ namespace GeographicLib {
      * nothing if the origin has not been set.
      **********************************************************************/
     void Reverse(real x, real y,
-                 real& lat, real& lon, real& azi, real& rk) const throw();
+                 real& lat, real& lon, real& azi, real& rk) const;
 
     /**
      * CassiniSoldner::Forward without returning the azimuth and scale.
      **********************************************************************/
     void Forward(real lat, real lon,
-                 real& x, real& y) const throw() {
+                 real& x, real& y) const {
       real azi, rk;
       Forward(lat, lon, x, y, azi, rk);
     }
@@ -186,7 +182,7 @@ namespace GeographicLib {
      * CassiniSoldner::Reverse without returning the azimuth and scale.
      **********************************************************************/
     void Reverse(real x, real y,
-                 real& lat, real& lon) const throw() {
+                 real& lat, real& lon) const {
       real azi, rk;
       Reverse(x, y, lat, lon, azi, rk);
     }
@@ -197,31 +193,31 @@ namespace GeographicLib {
     /**
      * @return true if the object has been initialized.
      **********************************************************************/
-    bool Init() const throw() { return _meridian.Init(); }
+    bool Init() const { return _meridian.Init(); }
 
     /**
      * @return \e lat0 the latitude of origin (degrees).
      **********************************************************************/
-    Math::real LatitudeOrigin() const throw()
+    Math::real LatitudeOrigin() const
     { return _meridian.Latitude(); }
 
     /**
      * @return \e lon0 the longitude of origin (degrees).
      **********************************************************************/
-    Math::real LongitudeOrigin() const throw()
+    Math::real LongitudeOrigin() const
     { return _meridian.Longitude(); }
 
     /**
      * @return \e a the equatorial radius of the ellipsoid (meters).  This is
      *   the value inherited from the Geodesic object used in the constructor.
      **********************************************************************/
-    Math::real MajorRadius() const throw() { return _earth.MajorRadius(); }
+    Math::real MajorRadius() const { return _earth.MajorRadius(); }
 
     /**
      * @return \e f the flattening of the ellipsoid.  This is the value
      *   inherited from the Geodesic object used in the constructor.
      **********************************************************************/
-    Math::real Flattening() const throw() { return _earth.Flattening(); }
+    Math::real Flattening() const { return _earth.Flattening(); }
     ///@}
 
     /// \cond SKIP
@@ -229,7 +225,7 @@ namespace GeographicLib {
      * <b>DEPRECATED</b>
      * @return \e r the inverse flattening of the ellipsoid.
      **********************************************************************/
-    Math::real InverseFlattening() const throw()
+    Math::real InverseFlattening() const
     { return _earth.InverseFlattening(); }
     /// \endcond
   };
diff --git a/include/GeographicLib/CircularEngine.hpp b/include/GeographicLib/CircularEngine.hpp
index 3ce88b7..060ebe6 100644
--- a/include/GeographicLib/CircularEngine.hpp
+++ b/include/GeographicLib/CircularEngine.hpp
@@ -64,13 +64,14 @@ namespace GeographicLib {
     real _q, _uq, _uq2;
 
     Math::real Value(bool gradp, real cl, real sl,
-                     real& gradx, real& grady, real& gradz) const throw();
+                     real& gradx, real& grady, real& gradz) const;
 
     static inline void cossin(real x, real& cosx, real& sinx) {
+      using std::abs; using std::cos; using std::sin;
       x = x >= 180 ? x - 360 : (x < -180 ? x + 360 : x);
-      real xi = x * Math::degree<real>();
-      cosx = std::abs(x) ==   90 ? 0 : cos(xi);
-      sinx =          x  == -180 ? 0 : sin(xi);
+      real xi = x * Math::degree();
+      cosx = abs(x) ==   90 ? 0 : cos(xi);
+      sinx =     x  == -180 ? 0 : sin(xi);
     }
 
     friend class SphericalEngine;
@@ -134,7 +135,7 @@ namespace GeographicLib {
      * The arguments must satisfy <i>coslon</i><sup>2</sup> +
      * <i>sinlon</i><sup>2</sup> = 1.
      **********************************************************************/
-    Math::real operator()(real coslon, real sinlon) const throw() {
+    Math::real operator()(real coslon, real sinlon) const {
       real dummy;
       return Value(false, coslon, sinlon, dummy, dummy, dummy);
     }
@@ -145,7 +146,7 @@ namespace GeographicLib {
      * @param[in] lon the longitude (degrees).
      * @return \e V the value of the sum.
      **********************************************************************/
-    Math::real operator()(real lon) const throw() {
+    Math::real operator()(real lon) const {
       real coslon, sinlon;
       cossin(lon, coslon, sinlon);
       return (*this)(coslon, sinlon);
@@ -169,7 +170,7 @@ namespace GeographicLib {
      * <i>sinlon</i><sup>2</sup> = 1.
      **********************************************************************/
     Math::real operator()(real coslon, real sinlon,
-                          real& gradx, real& grady, real& gradz) const throw() {
+                          real& gradx, real& grady, real& gradz) const {
       return Value(true, coslon, sinlon, gradx, grady, gradz);
     }
 
@@ -188,7 +189,7 @@ namespace GeographicLib {
      * touched.
      **********************************************************************/
     Math::real operator()(real lon,
-                          real& gradx, real& grady, real& gradz) const throw() {
+                          real& gradx, real& grady, real& gradz) const {
       real coslon, sinlon;
       cossin(lon, coslon, sinlon);
       return (*this)(coslon, sinlon, gradx, grady, gradz);
diff --git a/include/GeographicLib/Config-ac.h.in b/include/GeographicLib/Config-ac.h.in
index a0064f4..eb92211 100644
--- a/include/GeographicLib/Config-ac.h.in
+++ b/include/GeographicLib/Config-ac.h.in
@@ -15,9 +15,6 @@
 /* Define to 1 if you have the <dlfcn.h> header file. */
 #undef HAVE_DLFCN_H
 
-/* Define to 1 if you have the <float.h> header file. */
-#undef HAVE_FLOAT_H
-
 /* Define to 1 if you have the <inttypes.h> header file. */
 #undef HAVE_INTTYPES_H
 
@@ -27,9 +24,6 @@
 /* Define to 1 if you have the <memory.h> header file. */
 #undef HAVE_MEMORY_H
 
-/* Define to 1 if stdbool.h conforms to C99. */
-#undef HAVE_STDBOOL_H
-
 /* Define to 1 if you have the <stdint.h> header file. */
 #undef HAVE_STDINT_H
 
@@ -42,9 +36,6 @@
 /* Define to 1 if you have the <string.h> header file. */
 #undef HAVE_STRING_H
 
-/* Define to 1 if you have the `strtol' function. */
-#undef HAVE_STRTOL
-
 /* Define to 1 if you have the <sys/stat.h> header file. */
 #undef HAVE_SYS_STAT_H
 
@@ -54,9 +45,6 @@
 /* Define to 1 if you have the <unistd.h> header file. */
 #undef HAVE_UNISTD_H
 
-/* Define to 1 if the system has the type `_Bool'. */
-#undef HAVE__BOOL
-
 /* Define to the sub-directory in which libtool stores uninstalled libraries.
    */
 #undef LT_OBJDIR
@@ -99,9 +87,3 @@
 #  undef WORDS_BIGENDIAN
 # endif
 #endif
-
-/* Define to `__inline__' or `__inline' if that's what the C compiler
-   calls it, or to nothing if 'inline' is not supported under any name.  */
-#ifndef __cplusplus
-#undef inline
-#endif
diff --git a/include/GeographicLib/Config.h b/include/GeographicLib/Config.h
index 2249dd1..716130b 100644
--- a/include/GeographicLib/Config.h
+++ b/include/GeographicLib/Config.h
@@ -1,12 +1,12 @@
 // This will be overwritten by ./configure
 
-#define GEOGRAPHICLIB_VERSION_STRING "1.35"
+#define GEOGRAPHICLIB_VERSION_STRING "1.37"
 #define GEOGRAPHICLIB_VERSION_MAJOR 1
-#define GEOGRAPHICLIB_VERSION_MINOR 35
+#define GEOGRAPHICLIB_VERSION_MINOR 37
 #define GEOGRAPHICLIB_VERSION_PATCH 0
 
 // Undefine HAVE_LONG_DOUBLE if this type is unknown to the compiler
-#define HAVE_LONG_DOUBLE 1
+#define GEOGRAPHICLIB_HAVE_LONG_DOUBLE 1
 
 // Define WORDS_BIGENDIAN to be 1 if your machine is big endian
 /* #undef WORDS_BIGENDIAN */
diff --git a/include/GeographicLib/Config.h.in b/include/GeographicLib/Config.h.in
index 7aae77e..c192c94 100644
--- a/include/GeographicLib/Config.h.in
+++ b/include/GeographicLib/Config.h.in
@@ -5,8 +5,8 @@
 #define GEOGRAPHICLIB_DATA "@GEOGRAPHICLIB_DATA@"
 
 // These are macros which affect the building of the library
-#cmakedefine01 HAVE_LONG_DOUBLE
-#cmakedefine01 WORDS_BIGENDIAN
+#cmakedefine01 GEOGRAPHICLIB_HAVE_LONG_DOUBLE
+#cmakedefine01 GEOGRAPHICLIB_WORDS_BIGENDIAN
 #define GEOGRAPHICLIB_PRECISION @GEOGRAPHICLIB_PRECISION@
 
 // Specify whether GeographicLib is a shared or static library.  When compiling
diff --git a/include/GeographicLib/Constants.hpp b/include/GeographicLib/Constants.hpp
index 99baff3..73ef374 100644
--- a/include/GeographicLib/Constants.hpp
+++ b/include/GeographicLib/Constants.hpp
@@ -13,13 +13,31 @@
 #include <GeographicLib/Config.h>
 
 /**
+ * @relates GeographicLib::Constants
+ * Pack the version components into a single integer.
+ **********************************************************************/
+#define GEOGRAPHICLIB_VERSION_NUM(a,b,c) ((((a) * 10000 + (b)) * 100) + (c))
+
+/**
+ * @relates GeographicLib::Constants
+ * The version of GeographicLib as a single integer, packed as MMmmmmpp where
+ * MM is the major version, mmmm is the minor version, and pp is the patch
+ * level.
+ **********************************************************************/
+#define GEOGRAPHICLIB_VERSION \
+ GEOGRAPHICLIB_VERSION_NUM(GEOGRAPHICLIB_VERSION_MAJOR, \
+                           GEOGRAPHICLIB_VERSION_MINOR, \
+                           GEOGRAPHICLIB_VERSION_PATCH)
+
+/**
+ * @relates GeographicLib::Constants
  * A compile-time assert.  Use C++11 static_assert, if available.
  **********************************************************************/
-#if !defined(STATIC_ASSERT)
+#if !defined(GEOGRAPHICLIB_STATIC_ASSERT)
 #  if __cplusplus >= 201103
-#    define STATIC_ASSERT static_assert
+#    define GEOGRAPHICLIB_STATIC_ASSERT static_assert
 #  elif defined(__GXX_EXPERIMENTAL_CXX0X__)
-#    define STATIC_ASSERT static_assert
+#    define GEOGRAPHICLIB_STATIC_ASSERT static_assert
 #  elif defined(_MSC_VER) && _MSC_VER >= 1600
 // For reference, here is a table of Visual Studio and _MSC_VER
 // correspondences:
@@ -32,10 +50,10 @@
 //   1600     vc10  (2010)
 //   1700     vc11  (2012)
 //   1800     vc12  (2013)
-#    define STATIC_ASSERT static_assert
+#    define GEOGRAPHICLIB_STATIC_ASSERT static_assert
 #  else
-#    define STATIC_ASSERT(cond,reason) \
-            { enum{ STATIC_ASSERT_ENUM = 1/int(cond) }; }
+#    define GEOGRAPHICLIB_STATIC_ASSERT(cond,reason) \
+            { enum{ GEOGRAPHICLIB_STATIC_ASSERT_ENUM = 1/int(cond) }; }
 #  endif
 #endif
 
@@ -83,17 +101,17 @@ namespace GeographicLib {
     /**
      * A synonym for Math::degree<real>().
      **********************************************************************/
-    static inline Math::real degree() throw() { return Math::degree<real>(); }
+    static inline Math::real degree() { return Math::degree(); }
     /**
      * @return the number of radians in an arcminute.
      **********************************************************************/
-    static inline Math::real arcminute() throw()
-    { return Math::degree<real>() / 60; }
+    static inline Math::real arcminute()
+    { return Math::degree() / 60; }
     /**
      * @return the number of radians in an arcsecond.
      **********************************************************************/
-    static inline Math::real arcsecond() throw()
-    { return Math::degree<real>() / 3600; }
+    static inline Math::real arcsecond()
+    { return Math::degree() / 3600; }
 
     /** \name Ellipsoid parameters
      **********************************************************************/
@@ -102,62 +120,78 @@ namespace GeographicLib {
      * @tparam T the type of the returned value.
      * @return the equatorial radius of WGS84 ellipsoid (6378137 m).
      **********************************************************************/
-    template<typename T> static inline T WGS84_a() throw()
-    { return T(6378137) * meter<T>(); }
+    template<typename T> static inline T WGS84_a()
+    { return 6378137 * meter<T>(); }
     /**
      * A synonym for WGS84_a<real>().
      **********************************************************************/
-    static inline Math::real WGS84_a() throw() { return WGS84_a<real>(); }
+    static inline Math::real WGS84_a() { return WGS84_a<real>(); }
     /**
      * @tparam T the type of the returned value.
      * @return the flattening of WGS84 ellipsoid (1/298.257223563).
      **********************************************************************/
-    template<typename T> static inline T WGS84_f() throw()
-    { return T(1) / ( T(298) + T(257223563) / T(1000000000) ); }
+    template<typename T> static inline T WGS84_f()
+    { return 1 / ( T(298257223563LL) / 1000000000 ); }
     /**
      * A synonym for WGS84_f<real>().
      **********************************************************************/
-    static inline Math::real WGS84_f() throw() { return WGS84_f<real>(); }
+    static inline Math::real WGS84_f() { return WGS84_f<real>(); }
     /**
      * @tparam T the type of the returned value.
      * @return the gravitational constant of the WGS84 ellipsoid, \e GM, in
      *   m<sup>3</sup> s<sup>−2</sup>.
      **********************************************************************/
-    template<typename T> static inline T WGS84_GM() throw()
-    { return T(3986004) * T(100000000) + T(41800000); }
+    template<typename T> static inline T WGS84_GM()
+    { return T(3986004) * 100000000 + 41800000; }
+    /**
+     * A synonym for WGS84_GM<real>().
+     **********************************************************************/
+    static inline Math::real WGS84_GM() { return WGS84_GM<real>(); }
     /**
      * @tparam T the type of the returned value.
      * @return the angular velocity of the WGS84 ellipsoid, ω, in rad
      *   s<sup>−1</sup>.
      **********************************************************************/
-    template<typename T> static inline T WGS84_omega() throw()
-    { return T(7292115) / (T(1000000) * T(100000)); }
+    template<typename T> static inline T WGS84_omega()
+    { return 7292115 / (T(1000000) * 100000); }
+    /**
+     * A synonym for WGS84_omega<real>().
+     **********************************************************************/
+    static inline Math::real WGS84_omega() { return WGS84_omega<real>(); }
     /// \cond SKIP
     /**
      * <b>DEPRECATED</b>
      * @return the reciprocal flattening of WGS84 ellipsoid.
      **********************************************************************/
-    template<typename T> static inline T WGS84_r() throw()
+    template<typename T> static inline T WGS84_r()
     { return 1/WGS84_f<T>(); }
     /**
      * <b>DEPRECATED</b>
      * A synonym for WGS84_r<real>().
      **********************************************************************/
-    static inline Math::real WGS84_r() throw() { return WGS84_r<real>(); }
+    static inline Math::real WGS84_r() { return WGS84_r<real>(); }
     /// \endcond
     /**
      * @tparam T the type of the returned value.
      * @return the equatorial radius of GRS80 ellipsoid, \e a, in m.
      **********************************************************************/
-    template<typename T> static inline T GRS80_a() throw()
-    { return T(6378137); }
+    template<typename T> static inline T GRS80_a()
+    { return 6378137 * meter<T>(); }
+    /**
+     * A synonym for GRS80_a<real>().
+     **********************************************************************/
+    static inline Math::real GRS80_a() { return GRS80_a<real>(); }
     /**
      * @tparam T the type of the returned value.
      * @return the gravitational constant of the GRS80 ellipsoid, \e GM, in
      *   m<sup>3</sup> s<sup>−2</sup>.
      **********************************************************************/
-    template<typename T> static inline T GRS80_GM() throw()
-    { return T(3986005) * T(100000000); }
+    template<typename T> static inline T GRS80_GM()
+    { return T(3986005) * 100000000; }
+    /**
+     * A synonym for GRS80_GM<real>().
+     **********************************************************************/
+    static inline Math::real GRS80_GM() { return GRS80_GM<real>(); }
     /**
      * @tparam T the type of the returned value.
      * @return the angular velocity of the GRS80 ellipsoid, ω, in rad
@@ -170,35 +204,43 @@ namespace GeographicLib {
      * approximation (because the Gregorian year includes the precession of the
      * earth's axis).
      **********************************************************************/
-    template<typename T> static inline T GRS80_omega() throw()
-    { return T(7292115) / (T(1000000) * T(100000)); }
+    template<typename T> static inline T GRS80_omega()
+    { return 7292115 / (T(1000000) * 100000); }
+    /**
+     * A synonym for GRS80_omega<real>().
+     **********************************************************************/
+    static inline Math::real GRS80_omega() { return GRS80_omega<real>(); }
     /**
      * @tparam T the type of the returned value.
      * @return the dynamical form factor of the GRS80 ellipsoid,
      *   <i>J</i><sub>2</sub>.
      **********************************************************************/
-    template<typename T> static inline T GRS80_J2() throw()
-    { return T(108263) / T(100000000); }
+    template<typename T> static inline T GRS80_J2()
+    { return T(108263) / 100000000; }
+    /**
+     * A synonym for GRS80_J2<real>().
+     **********************************************************************/
+    static inline Math::real GRS80_J2() { return GRS80_J2<real>(); }
     /**
      * @tparam T the type of the returned value.
      * @return the central scale factor for UTM (0.9996).
      **********************************************************************/
-    template<typename T> static inline T UTM_k0() throw()
-    {return T(9996) / T(10000); }
+    template<typename T> static inline T UTM_k0()
+    {return T(9996) / 10000; }
     /**
      * A synonym for UTM_k0<real>().
      **********************************************************************/
-    static inline Math::real UTM_k0() throw() { return UTM_k0<real>(); }
+    static inline Math::real UTM_k0() { return UTM_k0<real>(); }
     /**
      * @tparam T the type of the returned value.
      * @return the central scale factor for UPS (0.994).
      **********************************************************************/
-    template<typename T> static inline T UPS_k0() throw()
-    { return T(994) / T(1000); }
+    template<typename T> static inline T UPS_k0()
+    { return T(994) / 1000; }
     /**
      * A synonym for UPS_k0<real>().
      **********************************************************************/
-    static inline Math::real UPS_k0() throw() { return UPS_k0<real>(); }
+    static inline Math::real UPS_k0() { return UPS_k0<real>(); }
     ///@}
 
     /** \name SI units
@@ -211,21 +253,21 @@ namespace GeographicLib {
      * This is unity, but this lets the internal system of units be changed if
      * necessary.
      **********************************************************************/
-    template<typename T> static inline T meter() throw() { return T(1); }
+    template<typename T> static inline T meter() { return T(1); }
     /**
      * A synonym for meter<real>().
      **********************************************************************/
-    static inline Math::real meter() throw() { return meter<real>(); }
+    static inline Math::real meter() { return meter<real>(); }
     /**
      * @return the number of meters in a kilometer.
      **********************************************************************/
-    static inline Math::real kilometer() throw()
+    static inline Math::real kilometer()
     { return 1000 * meter<real>(); }
     /**
      * @return the number of meters in a nautical mile (approximately 1 arc
      *   minute)
      **********************************************************************/
-    static inline Math::real nauticalmile() throw()
+    static inline Math::real nauticalmile()
     { return 1852 * meter<real>(); }
 
     /**
@@ -235,27 +277,27 @@ namespace GeographicLib {
      * This is unity, but this lets the internal system of units be changed if
      * necessary.
      **********************************************************************/
-    template<typename T> static inline T square_meter() throw()
+    template<typename T> static inline T square_meter()
     { return meter<real>() * meter<real>(); }
     /**
      * A synonym for square_meter<real>().
      **********************************************************************/
-    static inline Math::real square_meter() throw()
+    static inline Math::real square_meter()
     { return square_meter<real>(); }
     /**
      * @return the number of square meters in a hectare.
      **********************************************************************/
-    static inline Math::real hectare() throw()
+    static inline Math::real hectare()
     { return 10000 * square_meter<real>(); }
     /**
      * @return the number of square meters in a square kilometer.
      **********************************************************************/
-    static inline Math::real square_kilometer() throw()
+    static inline Math::real square_kilometer()
     { return kilometer() * kilometer(); }
     /**
      * @return the number of square meters in a square nautical mile.
      **********************************************************************/
-    static inline Math::real square_nauticalmile() throw()
+    static inline Math::real square_nauticalmile()
     { return nauticalmile() * nauticalmile(); }
     ///@}
 
@@ -265,36 +307,36 @@ namespace GeographicLib {
     /**
      * @return the number of meters in an international foot.
      **********************************************************************/
-    static inline Math::real foot() throw()
-    { return real(0.0254L) * 12 * meter<real>(); }
+    static inline Math::real foot()
+    { return real(254 * 12) / 10000 * meter<real>(); }
     /**
      * @return the number of meters in a yard.
      **********************************************************************/
-    static inline Math::real yard() throw() { return 3 * foot(); }
+    static inline Math::real yard() { return 3 * foot(); }
     /**
      * @return the number of meters in a fathom.
      **********************************************************************/
-    static inline Math::real fathom() throw() { return 2 * yard(); }
+    static inline Math::real fathom() { return 2 * yard(); }
     /**
      * @return the number of meters in a chain.
      **********************************************************************/
-    static inline Math::real chain() throw() { return 22 * yard(); }
+    static inline Math::real chain() { return 22 * yard(); }
     /**
      * @return the number of meters in a furlong.
      **********************************************************************/
-    static inline Math::real furlong() throw() { return 10 * chain(); }
+    static inline Math::real furlong() { return 10 * chain(); }
     /**
      * @return the number of meters in a statute mile.
      **********************************************************************/
-    static inline Math::real mile() throw() { return 8 * furlong(); }
+    static inline Math::real mile() { return 8 * furlong(); }
     /**
      * @return the number of square meters in an acre.
      **********************************************************************/
-    static inline Math::real acre() throw() { return chain() * furlong(); }
+    static inline Math::real acre() { return chain() * furlong(); }
     /**
      * @return the number of square meters in a square statute mile.
      **********************************************************************/
-    static inline Math::real square_mile() throw() { return mile() * mile(); }
+    static inline Math::real square_mile() { return mile() * mile(); }
     ///@}
 
     /** \name Anachronistic US units
@@ -303,8 +345,8 @@ namespace GeographicLib {
     /**
      * @return the number of meters in a US survey foot.
      **********************************************************************/
-    static inline Math::real surveyfoot() throw()
-    { return real(1200) / real(3937) * meter<real>(); }
+    static inline Math::real surveyfoot()
+    { return real(1200) / 3937 * meter<real>(); }
     ///@}
   };
 
diff --git a/include/GeographicLib/DMS.hpp b/include/GeographicLib/DMS.hpp
index ea9fe5c..72b2ce4 100644
--- a/include/GeographicLib/DMS.hpp
+++ b/include/GeographicLib/DMS.hpp
@@ -186,12 +186,12 @@ namespace GeographicLib {
      * @param[in] s arc seconds.
      * @return angle (degrees)
      *
-     * This does not propagate the sign on \e d to the other components, so
-     * -3d20' would need to be represented as - DMS::Decode(3.0, 20.0) or
+     * This does not propagate the sign on \e d to the other components,
+     * so -3d20' would need to be represented as - DMS::Decode(3.0, 20.0) or
      * DMS::Decode(-3.0, -20.0).
      **********************************************************************/
-    static Math::real Decode(real d, real m = 0, real s = 0) throw()
-    { return d + (m + s/real(60))/real(60); }
+    static Math::real Decode(real d, real m = 0, real s = 0)
+    { return d + (m + s / 60) / 60; }
 
     /// \cond SKIP
     /**
@@ -326,7 +326,7 @@ namespace GeographicLib {
      **********************************************************************/
     static std::string Encode(real angle, unsigned prec, flag ind = NONE,
                               char dmssep = char(0)) {
-      return ind == NUMBER ? Utility::str<real>(angle, int(prec)) :
+      return ind == NUMBER ? Utility::str(angle, int(prec)) :
         Encode(angle,
                prec < 2 ? DEGREE : (prec < 4 ? MINUTE : SECOND),
                prec < 2 ? prec : (prec < 4 ? prec - 2 : prec - 4),
@@ -340,7 +340,7 @@ namespace GeographicLib {
      * @param[out] d degrees (an integer returned as a real)
      * @param[out] m arc minutes.
      **********************************************************************/
-    static void Encode(real ang, real& d, real& m) throw() {
+    static void Encode(real ang, real& d, real& m) {
       d = int(ang); m = 60 * (ang - d);
     }
 
@@ -352,7 +352,7 @@ namespace GeographicLib {
      * @param[out] m arc minutes (an integer returned as a real)
      * @param[out] s arc seconds.
      **********************************************************************/
-    static void Encode(real ang, real& d, real& m, real& s) throw() {
+    static void Encode(real ang, real& d, real& m, real& s) {
       d = int(ang); ang = 60 * (ang - d);
       m = int(ang); s = 60 * (ang - m);
     }
diff --git a/include/GeographicLib/Ellipsoid.hpp b/include/GeographicLib/Ellipsoid.hpp
index 72e0c6d..0467e65 100644
--- a/include/GeographicLib/Ellipsoid.hpp
+++ b/include/GeographicLib/Ellipsoid.hpp
@@ -40,21 +40,28 @@ namespace GeographicLib {
   private:
     typedef Math::real real;
     static const int numit_ = 10;
-    static const real stol_;
-    real _a, _f, _f1, _f12, _e2, _e12, _n, _b;
+    real stol_;
+    real _a, _f, _f1, _f12, _e2, _e, _e12, _n, _b;
     TransverseMercator _tm;
     EllipticFunction _ell;
     AlbersEqualArea _au;
-    static real tand(real x) throw() {
+    static inline real tand(real x) {
+      using std::abs; using std::tan;
       return
-        std::abs(x) == real(90) ? (x < 0 ?
-                                   - TransverseMercator::overflow_
-                                   : TransverseMercator::overflow_) :
-        std::tan(x * Math::degree<real>());
+        abs(x) == real(90) ? (x < 0 ?
+                              - TransverseMercator::overflow()
+                              : TransverseMercator::overflow()) :
+        tan(x * Math::degree());
     }
-    static real atand(real x) throw()
-    { return std::atan(x) / Math::degree<real>(); }
-
+    static inline real atand(real x)
+    { using std::atan; return atan(x) / Math::degree(); }
+
+    // These are the alpha and beta coefficients in the Krueger series from
+    // TransverseMercator.  Thy are used by RhumbSolve to compute
+    // (psi2-psi1)/(mu2-mu1).
+    const Math::real* ConformalToRectifyingCoeffs() const { return _tm._alp; }
+    const Math::real* RectifyingToConformalCoeffs() const { return _tm._bet; }
+    friend class Rhumb; friend class RhumbLine;
   public:
     /** \name Constructor
      **********************************************************************/
@@ -65,9 +72,9 @@ namespace GeographicLib {
      *
      * @param[in] a equatorial radius (meters).
      * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
-     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
-     *   to 1/\e f.
-     * @exception GeographicErr if \e a or (1 − \e f ) \e a is not
+     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set
+     *   flattening to 1/\e f.
+     * @exception GeographicErr if \e a or (1 − \e f) \e a is not
      *   positive.
      **********************************************************************/
     Ellipsoid(real a, real f);
@@ -81,34 +88,34 @@ namespace GeographicLib {
      * @return \e a the equatorial radius of the ellipsoid (meters).  This is
      *   the value used in the constructor.
      **********************************************************************/
-    Math::real MajorRadius() const throw() { return _a; }
+    Math::real MajorRadius() const { return _a; }
 
     /**
      * @return \e b the polar semi-axis (meters).
      **********************************************************************/
-    Math::real MinorRadius() const throw() { return _b; }
+    Math::real MinorRadius() const { return _b; }
 
     /**
      * @return \e L the distance between the equator and a pole along a
      *   meridian (meters).  For a sphere \e L = (π/2) \e a.  The radius
      *   of a sphere with the same meridian length is \e L / (π/2).
      **********************************************************************/
-    Math::real QuarterMeridian() const throw();
+    Math::real QuarterMeridian() const;
 
     /**
      * @return \e A the total area of the ellipsoid (meters<sup>2</sup>).  For
      *   a sphere \e A = 4π <i>a</i><sup>2</sup>.  The radius of a sphere
      *   with the same area is sqrt(\e A / (4π)).
      **********************************************************************/
-    Math::real Area() const throw();
+    Math::real Area() const;
 
     /**
      * @return \e V the total volume of the ellipsoid (meters<sup>3</sup>).
      *   For a sphere \e V = (4π / 3) <i>a</i><sup>3</sup>.  The radius of
      *   a sphere with the same volume is cbrt(\e V / (4π/3)).
      **********************************************************************/
-    Math::real Volume() const throw()
-    { return (4 * Math::pi<real>()) * Math::sq(_a) * _b / 3; }
+    Math::real Volume() const
+    { return (4 * Math::pi()) * Math::sq(_a) * _b / 3; }
     ///@}
 
     /** \name %Ellipsoid shape
@@ -121,21 +128,21 @@ namespace GeographicLib {
      *   positive, or negative for a sphere, oblate ellipsoid, or prolate
      *   ellipsoid.
      **********************************************************************/
-    Math::real Flattening() const throw() { return _f; }
+    Math::real Flattening() const { return _f; }
 
     /**
      * @return \e f ' = (\e a − \e b) / \e b, the second flattening of
      *   the ellipsoid.  This is zero, positive, or negative for a sphere,
      *   oblate ellipsoid, or prolate ellipsoid.
      **********************************************************************/
-    Math::real SecondFlattening() const throw() { return _f / (1 - _f); }
+    Math::real SecondFlattening() const { return _f / (1 - _f); }
 
     /**
      * @return \e n = (\e a − \e b) / (\e a + \e b), the third flattening
      *   of the ellipsoid.  This is zero, positive, or negative for a sphere,
      *   oblate ellipsoid, or prolate ellipsoid.
      **********************************************************************/
-    Math::real ThirdFlattening() const throw() { return _n; }
+    Math::real ThirdFlattening() const { return _n; }
 
     /**
      * @return <i>e</i><sup>2</sup> = (<i>a</i><sup>2</sup> −
@@ -143,7 +150,7 @@ namespace GeographicLib {
      *   of the ellipsoid.  This is zero, positive, or negative for a sphere,
      *   oblate ellipsoid, or prolate ellipsoid.
      **********************************************************************/
-    Math::real EccentricitySq() const throw() { return _e2; }
+    Math::real EccentricitySq() const { return _e2; }
 
     /**
      * @return <i>e'</i> <sup>2</sup> = (<i>a</i><sup>2</sup> −
@@ -151,7 +158,7 @@ namespace GeographicLib {
      *   squared of the ellipsoid.  This is zero, positive, or negative for a
      *   sphere, oblate ellipsoid, or prolate ellipsoid.
      **********************************************************************/
-    Math::real SecondEccentricitySq() const throw() { return _e12; }
+    Math::real SecondEccentricitySq() const { return _e12; }
 
     /**
      * @return <i>e''</i> <sup>2</sup> = (<i>a</i><sup>2</sup> −
@@ -160,7 +167,7 @@ namespace GeographicLib {
      *   positive, or negative for a sphere, oblate ellipsoid, or prolate
      *   ellipsoid.
      **********************************************************************/
-    Math::real ThirdEccentricitySq() const throw() { return _e2 / (2 - _e2); }
+    Math::real ThirdEccentricitySq() const { return _e2 / (2 - _e2); }
     ///@}
 
     /** \name Latitude conversion.
@@ -187,7 +194,7 @@ namespace GeographicLib {
      * result is undefined if this condition does not hold.  The returned value
      * β lies in [−90°, 90°].
      **********************************************************************/
-    Math::real ParametricLatitude(real phi) const throw();
+    Math::real ParametricLatitude(real phi) const;
 
     /**
      * @param[in] beta the parametric latitude (degrees).
@@ -197,7 +204,7 @@ namespace GeographicLib {
      * result is undefined if this condition does not hold.  The returned value
      * φ lies in [−90°, 90°].
      **********************************************************************/
-    Math::real InverseParametricLatitude(real beta) const throw();
+    Math::real InverseParametricLatitude(real beta) const;
 
     /**
      * @param[in] phi the geographic latitude (degrees).
@@ -211,7 +218,7 @@ namespace GeographicLib {
      * result is undefined if this condition does not hold.  The returned value
      * θ lies in [−90°, 90°].
      **********************************************************************/
-    Math::real GeocentricLatitude(real phi) const throw();
+    Math::real GeocentricLatitude(real phi) const;
 
     /**
      * @param[in] theta the geocentric latitude (degrees).
@@ -221,7 +228,7 @@ namespace GeographicLib {
      * result is undefined if this condition does not hold.  The returned value
      * φ lies in [−90°, 90°].
      **********************************************************************/
-    Math::real InverseGeocentricLatitude(real theta) const throw();
+    Math::real InverseGeocentricLatitude(real theta) const;
 
     /**
      * @param[in] phi the geographic latitude (degrees).
@@ -237,7 +244,7 @@ namespace GeographicLib {
      * result is undefined if this condition does not hold.  The returned value
      * μ lies in [−90°, 90°].
      **********************************************************************/
-    Math::real RectifyingLatitude(real phi) const throw();
+    Math::real RectifyingLatitude(real phi) const;
 
     /**
      * @param[in] mu the rectifying latitude (degrees).
@@ -247,7 +254,7 @@ namespace GeographicLib {
      * result is undefined if this condition does not hold.  The returned value
      * φ lies in [−90°, 90°].
      **********************************************************************/
-    Math::real InverseRectifyingLatitude(real mu) const throw();
+    Math::real InverseRectifyingLatitude(real mu) const;
 
     /**
      * @param[in] phi the geographic latitude (degrees).
@@ -263,7 +270,7 @@ namespace GeographicLib {
      * result is undefined if this condition does not hold.  The returned value
      * ξ lies in [−90°, 90°].
      **********************************************************************/
-    Math::real AuthalicLatitude(real phi) const throw();
+    Math::real AuthalicLatitude(real phi) const;
 
     /**
      * @param[in] xi the authalic latitude (degrees).
@@ -273,7 +280,7 @@ namespace GeographicLib {
      * result is undefined if this condition does not hold.  The returned value
      * φ lies in [−90°, 90°].
      **********************************************************************/
-    Math::real InverseAuthalicLatitude(real xi) const throw();
+    Math::real InverseAuthalicLatitude(real xi) const;
 
     /**
      * @param[in] phi the geographic latitude (degrees).
@@ -288,7 +295,7 @@ namespace GeographicLib {
      * result is undefined if this condition does not hold.  The returned value
      * χ lies in [−90°, 90°].
      **********************************************************************/
-    Math::real ConformalLatitude(real phi) const throw();
+    Math::real ConformalLatitude(real phi) const;
 
     /**
      * @param[in] chi the conformal latitude (degrees).
@@ -298,7 +305,7 @@ namespace GeographicLib {
      * result is undefined if this condition does not hold.  The returned value
      * φ lies in [−90°, 90°].
      **********************************************************************/
-    Math::real InverseConformalLatitude(real chi) const throw();
+    Math::real InverseConformalLatitude(real chi) const;
 
     /**
      * @param[in] phi the geographic latitude (degrees).
@@ -310,18 +317,21 @@ namespace GeographicLib {
      * defines the Mercator projection.  For a sphere ψ =
      * sinh<sup>−1</sup> tan φ.
      *
-     * φ must lie in the range [−90°, 90°]; the
-     * result is undefined if this condition does not hold.
+     * φ must lie in the range [−90°, 90°]; the result is
+     * undefined if this condition does not hold.  The value returned for φ
+     * = ±90° is some (positive or negative) large but finite value,
+     * such that InverseIsometricLatitude returns the original value of φ.
      **********************************************************************/
-    Math::real IsometricLatitude(real phi) const throw();
+    Math::real IsometricLatitude(real phi) const;
 
     /**
      * @param[in] psi the isometric latitude (degrees).
      * @return φ the geographic latitude (degrees).
      *
-     * The returned value φ lies in [−90°, 90°].
+     * The returned value φ lies in [−90°, 90°].  For a
+     * sphere φ = tan<sup>−1</sup> sinh ψ.
      **********************************************************************/
-    Math::real InverseIsometricLatitude(real psi) const throw();
+    Math::real InverseIsometricLatitude(real psi) const;
     ///@}
 
     /** \name Other quantities.
@@ -337,7 +347,7 @@ namespace GeographicLib {
      * φ must lie in the range [−90°, 90°]; the
      * result is undefined if this condition does not hold.
      **********************************************************************/
-    Math::real CircleRadius(real phi) const throw();
+    Math::real CircleRadius(real phi) const;
 
     /**
      * @param[in] phi the geographic latitude (degrees).
@@ -348,7 +358,7 @@ namespace GeographicLib {
      * φ must lie in the range [−90°, 90°]; the
      * result is undefined if this condition does not hold.
      **********************************************************************/
-    Math::real CircleHeight(real phi) const throw();
+    Math::real CircleHeight(real phi) const;
 
     /**
      * @param[in] phi the geographic latitude (degrees).
@@ -360,7 +370,7 @@ namespace GeographicLib {
      * φ must lie in the range [−90°, 90°]; the
      * result is undefined if this condition does not hold.
      **********************************************************************/
-    Math::real MeridianDistance(real phi) const throw();
+    Math::real MeridianDistance(real phi) const;
 
     /**
      * @param[in] phi the geographic latitude (degrees).
@@ -373,7 +383,7 @@ namespace GeographicLib {
      * φ must lie in the range [−90°, 90°]; the
      * result is undefined if this condition does not hold.
      **********************************************************************/
-    Math::real MeridionalCurvatureRadius(real phi) const throw();
+    Math::real MeridionalCurvatureRadius(real phi) const;
 
     /**
      * @param[in] phi the geographic latitude (degrees).
@@ -386,7 +396,7 @@ namespace GeographicLib {
      * φ must lie in the range [−90°, 90°]; the
      * result is undefined if this condition does not hold.
      **********************************************************************/
-    Math::real TransverseCurvatureRadius(real phi) const throw();
+    Math::real TransverseCurvatureRadius(real phi) const;
 
     /**
      * @param[in] phi the geographic latitude (degrees).
@@ -400,7 +410,7 @@ namespace GeographicLib {
      * azi must lie in the range [−540°, 540°); the
      * result is undefined if either of conditions does not hold.
      **********************************************************************/
-    Math::real NormalCurvatureRadius(real phi, real azi) const throw();
+    Math::real NormalCurvatureRadius(real phi, real azi) const;
     ///@}
 
     /** \name Eccentricity conversions.
@@ -415,7 +425,7 @@ namespace GeographicLib {
      * \e f ' should lie in (−1, ∞).
      * The returned value \e f lies in (−∞, 1).
      **********************************************************************/
-    static Math::real SecondFlatteningToFlattening(real fp) throw()
+    static Math::real SecondFlatteningToFlattening(real fp)
     { return fp / (1 + fp); }
 
     /**
@@ -425,7 +435,7 @@ namespace GeographicLib {
      * \e f should lie in (−∞, 1).
      * The returned value \e f ' lies in (−1, ∞).
      **********************************************************************/
-    static Math::real FlatteningToSecondFlattening(real f) throw()
+    static Math::real FlatteningToSecondFlattening(real f)
     { return f / (1 - f); }
 
     /**
@@ -436,7 +446,7 @@ namespace GeographicLib {
      * \e n should lie in (−1, 1).
      * The returned value \e f lies in (−∞, 1).
      **********************************************************************/
-    static Math::real ThirdFlatteningToFlattening(real n) throw()
+    static Math::real ThirdFlatteningToFlattening(real n)
     { return 2 * n / (1 + n); }
 
     /**
@@ -447,7 +457,7 @@ namespace GeographicLib {
      * \e f should lie in (−∞, 1).
      * The returned value \e n lies in (−1, 1).
      **********************************************************************/
-    static Math::real FlatteningToThirdFlattening(real f) throw()
+    static Math::real FlatteningToThirdFlattening(real f)
     { return f / (2 - f); }
 
     /**
@@ -459,8 +469,8 @@ namespace GeographicLib {
      * <i>e</i><sup>2</sup> should lie in (−∞, 1).
      * The returned value \e f lies in (−∞, 1).
      **********************************************************************/
-    static Math::real EccentricitySqToFlattening(real e2) throw()
-    { return e2 / (std::sqrt(1 - e2) + 1); }
+    static Math::real EccentricitySqToFlattening(real e2)
+    { using std::sqrt; return e2 / (sqrt(1 - e2) + 1); }
 
     /**
      * @param[in] f = (\e a − \e b) / \e a, the flattening.
@@ -471,7 +481,7 @@ namespace GeographicLib {
      * \e f should lie in (−∞, 1).
      * The returned value <i>e</i><sup>2</sup> lies in (−∞, 1).
      **********************************************************************/
-    static Math::real FlatteningToEccentricitySq(real f) throw()
+    static Math::real FlatteningToEccentricitySq(real f)
     { return f * (2 - f); }
 
     /**
@@ -483,8 +493,8 @@ namespace GeographicLib {
      * <i>e'</i> <sup>2</sup> should lie in (−1, ∞).
      * The returned value \e f lies in (−∞, 1).
      **********************************************************************/
-    static Math::real SecondEccentricitySqToFlattening(real ep2) throw()
-    { return ep2 / (std::sqrt(1 + ep2) + 1 + ep2); }
+    static Math::real SecondEccentricitySqToFlattening(real ep2)
+    { using std::sqrt; return ep2 / (sqrt(1 + ep2) + 1 + ep2); }
 
     /**
      * @param[in] f = (\e a − \e b) / \e a, the flattening.
@@ -495,7 +505,7 @@ namespace GeographicLib {
      * \e f should lie in (−∞, 1).
      * The returned value <i>e'</i> <sup>2</sup> lies in (−1, ∞).
      **********************************************************************/
-    static Math::real FlatteningToSecondEccentricitySq(real f) throw()
+    static Math::real FlatteningToSecondEccentricitySq(real f)
     { return f * (2 - f) / Math::sq(1 - f); }
 
     /**
@@ -507,7 +517,7 @@ namespace GeographicLib {
      * <i>e''</i> <sup>2</sup> should lie in (−1, 1).
      * The returned value \e f lies in (−∞, 1).
      **********************************************************************/
-    static Math::real ThirdEccentricitySqToFlattening(real epp2) throw()
+    static Math::real ThirdEccentricitySqToFlattening(real epp2)
     { return 2 * epp2 / (sqrt((1 - epp2) * (1 + epp2)) + 1 + epp2); }
 
     /**
@@ -519,7 +529,7 @@ namespace GeographicLib {
      * \e f should lie in (−∞, 1).
      * The returned value <i>e''</i> <sup>2</sup> lies in (−1, 1).
      **********************************************************************/
-    static Math::real FlatteningToThirdEccentricitySq(real f) throw()
+    static Math::real FlatteningToThirdEccentricitySq(real f)
     { return f * (2 - f) / (1 + Math::sq(1 - f)); }
 
     ///@}
@@ -528,8 +538,7 @@ namespace GeographicLib {
      * A global instantiation of Ellipsoid with the parameters for the WGS84
      * ellipsoid.
      **********************************************************************/
-    static const Ellipsoid WGS84;
-
+    static const Ellipsoid& WGS84();
   };
 
 } // namespace GeographicLib
diff --git a/include/GeographicLib/EllipticFunction.hpp b/include/GeographicLib/EllipticFunction.hpp
index 802b6e7..7a5f42e 100644
--- a/include/GeographicLib/EllipticFunction.hpp
+++ b/include/GeographicLib/EllipticFunction.hpp
@@ -62,16 +62,9 @@ namespace GeographicLib {
   class GEOGRAPHICLIB_EXPORT EllipticFunction {
   private:
     typedef Math::real real;
-    static const real tol_;
-    static const real tolRF_;
-    static const real tolRD_;
-    static const real tolRG0_;
-    static const real tolJAC_;
     enum { num_ = 13 }; // Max depth required for sncndn.  Probably 5 is enough.
     real _k2, _kp2, _alpha2, _alphap2, _eps;
-    mutable bool _init;
-    mutable real _Kc, _Ec, _Dc, _Pic, _Gc, _Hc;
-    bool Init() const throw();
+    real _Kc, _Ec, _Dc, _Pic, _Gc, _Hc;
   public:
     /** \name Constructor
      **********************************************************************/
@@ -91,7 +84,8 @@ namespace GeographicLib {
      * E(φ, \e k), and \e H(φ, 0, \e k) = \e F(φ, \e k) - \e
      * D(φ, \e k).
      **********************************************************************/
-    EllipticFunction(real k2 = 0, real alpha2 = 0) throw();
+    EllipticFunction(real k2 = 0, real alpha2 = 0)
+      { Reset(k2, alpha2); }
 
     /**
      * Constructor specifying the modulus and parameter and their complements.
@@ -111,7 +105,8 @@ namespace GeographicLib {
      * constructor is provided to enable accuracy to be maintained, e.g., when
      * \e k is very close to unity.
      **********************************************************************/
-    EllipticFunction(real k2, real alpha2, real kp2, real alphap2) throw();
+    EllipticFunction(real k2, real alpha2, real kp2, real alphap2)
+      { Reset(k2, alpha2, kp2, alphap2); }
 
     /**
      * Reset the modulus and parameter.
@@ -122,7 +117,7 @@ namespace GeographicLib {
      * @param[in] alpha2 the new value of parameter α<sup>2</sup>.
      *   α<sup>2</sup> must lie in (-∞, 1).  (No checking is done.)
      **********************************************************************/
-    void Reset(real k2 = 0, real alpha2 = 0) throw()
+    void Reset(real k2 = 0, real alpha2 = 0)
     { Reset(k2, alpha2, 1 - k2, 1 - alpha2); }
 
     /**
@@ -143,7 +138,7 @@ namespace GeographicLib {
      * constructor is provided to enable accuracy to be maintained, e.g., when
      * is very small.
      **********************************************************************/
-    void Reset(real k2, real alpha2, real kp2, real alphap2) throw();
+    void Reset(real k2, real alpha2, real kp2, real alphap2);
 
     ///@}
 
@@ -153,24 +148,24 @@ namespace GeographicLib {
     /**
      * @return the square of the modulus <i>k</i><sup>2</sup>.
      **********************************************************************/
-    Math::real k2() const throw() { return _k2; }
+    Math::real k2() const { return _k2; }
 
     /**
      * @return the square of the complementary modulus <i>k'</i><sup>2</sup> =
      *   1 − <i>k</i><sup>2</sup>.
      **********************************************************************/
-    Math::real kp2() const throw() { return _kp2; }
+    Math::real kp2() const { return _kp2; }
 
     /**
      * @return the parameter α<sup>2</sup>.
      **********************************************************************/
-    Math::real alpha2() const throw() { return _alpha2; }
+    Math::real alpha2() const { return _alpha2; }
 
     /**
      * @return the complementary parameter α'<sup>2</sup> = 1 −
      *   α<sup>2</sup>.
      **********************************************************************/
-    Math::real alphap2() const throw() { return _alphap2; }
+    Math::real alphap2() const { return _alphap2; }
     ///@}
 
     /// \cond SKIP
@@ -179,14 +174,14 @@ namespace GeographicLib {
      *
      * <b>DEPRECATED</b>, use k2() instead.
      **********************************************************************/
-    Math::real m() const throw() { return _k2; }
+    Math::real m() const { return _k2; }
     /**
      * @return the square of the complementary modulus <i>k'</i><sup>2</sup> =
      *   1 − <i>k</i><sup>2</sup>.
      *
      * <b>DEPRECATED</b>, use kp2() instead.
      **********************************************************************/
-    Math::real m1() const throw() { return _kp2; }
+    Math::real m1() const { return _kp2; }
     /// \endcond
 
     /** \name Complete elliptic integrals.
@@ -202,7 +197,7 @@ namespace GeographicLib {
      *   K(k) = \int_0^{\pi/2} \frac1{\sqrt{1-k^2\sin^2\phi}}\,d\phi.
      * \f]
      **********************************************************************/
-    Math::real K() const throw() { _init || Init(); return _Kc; }
+    Math::real K() const { return _Kc; }
 
     /**
      * The complete integral of the second kind.
@@ -214,7 +209,7 @@ namespace GeographicLib {
      *   E(k) = \int_0^{\pi/2} \sqrt{1-k^2\sin^2\phi}\,d\phi.
      * \f]
      **********************************************************************/
-    Math::real E() const throw() { _init || Init(); return _Ec; }
+    Math::real E() const { return _Ec; }
 
     /**
      * Jahnke's complete integral.
@@ -226,7 +221,7 @@ namespace GeographicLib {
      *   D(k) = \int_0^{\pi/2} \frac{\sin^2\phi}{\sqrt{1-k^2\sin^2\phi}}\,d\phi.
      * \f]
      **********************************************************************/
-    Math::real D() const throw() { _init || Init(); return _Dc; }
+    Math::real D() const { return _Dc; }
 
     /**
      * The difference between the complete integrals of the first and second
@@ -234,7 +229,7 @@ namespace GeographicLib {
      *
      * @return \e K(\e k) − \e E(\e k).
      **********************************************************************/
-    Math::real KE() const throw() { _init || Init(); return _k2 * _Dc; }
+    Math::real KE() const { return _k2 * _Dc; }
 
     /**
      * The complete integral of the third kind.
@@ -248,7 +243,7 @@ namespace GeographicLib {
      *     \frac1{\sqrt{1-k^2\sin^2\phi}(1 - \alpha^2\sin^2\phi_)}\,d\phi.
      * \f]
      **********************************************************************/
-    Math::real Pi() const throw() { _init || Init(); return _Pic; }
+    Math::real Pi() const { return _Pic; }
 
     /**
      * Legendre's complete geodesic longitude integral.
@@ -261,7 +256,7 @@ namespace GeographicLib {
      *     \frac{\sqrt{1-k^2\sin^2\phi}}{1 - \alpha^2\sin^2\phi}\,d\phi.
      * \f]
      **********************************************************************/
-    Math::real G() const throw() { _init || Init(); return _Gc; }
+    Math::real G() const { return _Gc; }
 
     /**
      * Cayley's complete geodesic longitude difference integral.
@@ -275,7 +270,7 @@ namespace GeographicLib {
      *     \,d\phi.
      * \f]
      **********************************************************************/
-    Math::real H() const throw() { _init || Init(); return _Hc; }
+    Math::real H() const { return _Hc; }
     ///@}
 
     /** \name Incomplete elliptic integrals.
@@ -292,7 +287,7 @@ namespace GeographicLib {
      *   F(\phi, k) = \int_0^\phi \frac1{\sqrt{1-k^2\sin^2\theta}}\,d\theta.
      * \f]
      **********************************************************************/
-    Math::real F(real phi) const throw();
+    Math::real F(real phi) const;
 
     /**
      * The incomplete integral of the second kind.
@@ -305,7 +300,7 @@ namespace GeographicLib {
      *   E(\phi, k) = \int_0^\phi \sqrt{1-k^2\sin^2\theta}\,d\theta.
      * \f]
      **********************************************************************/
-    Math::real E(real phi) const throw();
+    Math::real E(real phi) const;
 
     /**
      * The incomplete integral of the second kind with the argument given in
@@ -314,7 +309,7 @@ namespace GeographicLib {
      * @param[in] ang in <i>degrees</i>.
      * @return \e E(π <i>ang</i>/180, \e k).
      **********************************************************************/
-    Math::real Ed(real ang) const throw();
+    Math::real Ed(real ang) const;
 
     /**
      * The inverse of the incomplete integral of the second kind.
@@ -323,7 +318,7 @@ namespace GeographicLib {
      * @return φ = <i>E</i><sup>−1</sup>(\e x, \e k); i.e., the
      *   solution of such that \e E(φ, \e k) = \e x.
      **********************************************************************/
-    Math::real Einv(real x) const throw();
+    Math::real Einv(real x) const;
 
     /**
      * The incomplete integral of the third kind.
@@ -338,7 +333,7 @@ namespace GeographicLib {
      *     \frac1{\sqrt{1-k^2\sin^2\theta}(1 - \alpha^2\sin^2\theta_)}\,d\theta.
      * \f]
      **********************************************************************/
-    Math::real Pi(real phi) const throw();
+    Math::real Pi(real phi) const;
 
     /**
      * Jahnke's incomplete elliptic integral.
@@ -352,7 +347,7 @@ namespace GeographicLib {
      *    \frac{\sin^2\theta}{\sqrt{1-k^2\sin^2\theta}}\,d\theta.
      * \f]
      **********************************************************************/
-    Math::real D(real phi) const throw();
+    Math::real D(real phi) const;
 
     /**
      * Legendre's geodesic longitude integral.
@@ -379,7 +374,7 @@ namespace GeographicLib {
      * See \ref geodellip for the expression for the longitude in terms of this
      * function.
      **********************************************************************/
-    Math::real G(real phi) const throw();
+    Math::real G(real phi) const;
 
     /**
      * Cayley's geodesic longitude difference integral.
@@ -406,7 +401,7 @@ namespace GeographicLib {
      * See \ref geodellip for the expression for the longitude in terms of this
      * function.
      **********************************************************************/
-    Math::real H(real phi) const throw();
+    Math::real H(real phi) const;
     ///@}
 
     /** \name Incomplete integrals in terms of Jacobi elliptic functions.
@@ -421,7 +416,7 @@ namespace GeographicLib {
      *   sin<sup>2</sup>φ)
      * @return \e F(φ, \e k) as though φ ∈ (−π, π].
      **********************************************************************/
-    Math::real F(real sn, real cn, real dn) const throw();
+    Math::real F(real sn, real cn, real dn) const;
 
     /**
      * The incomplete integral of the second kind in terms of Jacobi elliptic
@@ -433,7 +428,7 @@ namespace GeographicLib {
      *   sin<sup>2</sup>φ)
      * @return \e E(φ, \e k) as though φ ∈ (−π, π].
      **********************************************************************/
-    Math::real E(real sn, real cn, real dn) const throw();
+    Math::real E(real sn, real cn, real dn) const;
 
     /**
      * The incomplete integral of the third kind in terms of Jacobi elliptic
@@ -446,7 +441,7 @@ namespace GeographicLib {
      * @return Π(φ, α<sup>2</sup>, \e k) as though φ ∈
      *   (−π, π].
      **********************************************************************/
-    Math::real Pi(real sn, real cn, real dn) const throw();
+    Math::real Pi(real sn, real cn, real dn) const;
 
     /**
      * Jahnke's incomplete elliptic integral in terms of Jacobi elliptic
@@ -458,7 +453,7 @@ namespace GeographicLib {
      *   sin<sup>2</sup>φ)
      * @return \e D(φ, \e k) as though φ ∈ (−π, π].
      **********************************************************************/
-    Math::real D(real sn, real cn, real dn) const throw();
+    Math::real D(real sn, real cn, real dn) const;
 
     /**
      * Legendre's geodesic longitude integral in terms of Jacobi elliptic
@@ -471,7 +466,7 @@ namespace GeographicLib {
      * @return \e G(φ, α<sup>2</sup>, \e k) as though φ ∈
      *   (−π, π].
      **********************************************************************/
-    Math::real G(real sn, real cn, real dn) const throw();
+    Math::real G(real sn, real cn, real dn) const;
 
     /**
      * Cayley's geodesic longitude difference integral in terms of Jacobi
@@ -484,7 +479,7 @@ namespace GeographicLib {
      * @return \e H(φ, α<sup>2</sup>, \e k) as though φ ∈
      *   (−π, π].
      **********************************************************************/
-    Math::real H(real sn, real cn, real dn) const throw();
+    Math::real H(real sn, real cn, real dn) const;
     ///@}
 
     /** \name Periodic versions of incomplete elliptic integrals.
@@ -500,7 +495,7 @@ namespace GeographicLib {
      * @return the periodic function π \e F(φ, \e k) / (2 \e K(\e k)) -
      *   φ
      **********************************************************************/
-    Math::real deltaF(real sn, real cn, real dn) const throw();
+    Math::real deltaF(real sn, real cn, real dn) const;
 
     /**
      * The periodic incomplete integral of the second kind.
@@ -512,7 +507,7 @@ namespace GeographicLib {
      * @return the periodic function π \e E(φ, \e k) / (2 \e E(\e k)) -
      *   φ
      **********************************************************************/
-    Math::real deltaE(real sn, real cn, real dn) const throw();
+    Math::real deltaE(real sn, real cn, real dn) const;
 
     /**
      * The periodic inverse of the incomplete integral of the second kind.
@@ -522,7 +517,7 @@ namespace GeographicLib {
      * @return the periodic function <i>E</i><sup>−1</sup>(τ (2 \e
      *   E(\e k)/π), \e k) - τ
      **********************************************************************/
-    Math::real deltaEinv(real stau, real ctau) const throw();
+    Math::real deltaEinv(real stau, real ctau) const;
 
     /**
      * The periodic incomplete integral of the third kind.
@@ -534,7 +529,7 @@ namespace GeographicLib {
      * @return the periodic function π Π(φ, \e k) / (2 Π(\e k)) -
      *   φ
      **********************************************************************/
-    Math::real deltaPi(real sn, real cn, real dn) const throw();
+    Math::real deltaPi(real sn, real cn, real dn) const;
 
     /**
      * The periodic Jahnke's incomplete elliptic integral.
@@ -546,7 +541,7 @@ namespace GeographicLib {
      * @return the periodic function π \e D(φ, \e k) / (2 \e D(\e k)) -
      *   φ
      **********************************************************************/
-    Math::real deltaD(real sn, real cn, real dn) const throw();
+    Math::real deltaD(real sn, real cn, real dn) const;
 
     /**
      * Legendre's periodic geodesic longitude integral.
@@ -558,7 +553,7 @@ namespace GeographicLib {
      * @return the periodic function π \e G(φ, \e k) / (2 \e G(\e k)) -
      *   φ
      **********************************************************************/
-    Math::real deltaG(real sn, real cn, real dn) const throw();
+    Math::real deltaG(real sn, real cn, real dn) const;
 
     /**
      * Cayley's periodic geodesic longitude difference integral.
@@ -570,7 +565,7 @@ namespace GeographicLib {
      * @return the periodic function π \e H(φ, \e k) / (2 \e H(\e k)) -
      *   φ
      **********************************************************************/
-    Math::real deltaH(real sn, real cn, real dn) const throw();
+    Math::real deltaH(real sn, real cn, real dn) const;
     ///@}
 
     /** \name Elliptic functions.
@@ -584,7 +579,7 @@ namespace GeographicLib {
      * @param[out] cn cn(\e x, \e k).
      * @param[out] dn dn(\e x, \e k).
      **********************************************************************/
-    void sncndn(real x, real& sn, real& cn, real& dn) const throw();
+    void sncndn(real x, real& sn, real& cn, real& dn) const;
 
     /**
      * The Δ amplitude function.
@@ -594,62 +589,65 @@ namespace GeographicLib {
      * @return Δ = sqrt(1 − <i>k</i><sup>2</sup>
      *   sin<sup>2</sup>φ)
      **********************************************************************/
-    Math::real Delta(real sn, real cn) const throw()
-    { return std::sqrt(_k2 < 0 ? 1 - _k2 * sn*sn : _kp2 + _k2 * cn*cn); }
+    Math::real Delta(real sn, real cn) const {
+      using std::sqrt;
+      return sqrt(_k2 < 0 ? 1 - _k2 * sn*sn : _kp2 + _k2 * cn*cn);
+    }
     ///@}
 
     /** \name Symmetric elliptic integrals.
      **********************************************************************/
     ///@{
     /**
-     * Symmetric integral of the first kind <i>R<sub>F</sub></i>.
+     * Symmetric integral of the first kind <i>R</i><sub><i>F</i></sub>.
      *
      * @param[in] x
      * @param[in] y
      * @param[in] z
-     * @return <i>R<sub>F</sub></i>(\e x, \e y, \e z)
+     * @return <i>R</i><sub><i>F</i></sub>(\e x, \e y, \e z)
      *
-     * <i>R<sub>F</sub></i> is defined in http://dlmf.nist.gov/19.16.E1
+     * <i>R</i><sub><i>F</i></sub> is defined in http://dlmf.nist.gov/19.16.E1
      * \f[ R_F(x, y, z) = \frac12
      *       \int_0^\infty\frac1{\sqrt{(t + x) (t + y) (t + z)}}\, dt \f]
      * If one of the arguments is zero, it is more efficient to call the
      * two-argument version of this function with the non-zero arguments.
      **********************************************************************/
-    static real RF(real x, real y, real z) throw();
+    static real RF(real x, real y, real z);
 
     /**
-     * Complete symmetric integral of the first kind, <i>R<sub>F</sub></i> with
-     * one argument zero.
+     * Complete symmetric integral of the first kind,
+     * <i>R</i><sub><i>F</i></sub> with one argument zero.
      *
      * @param[in] x
      * @param[in] y
-     * @return <i>R<sub>F</sub></i>(\e x, \e y, 0)
+     * @return <i>R</i><sub><i>F</i></sub>(\e x, \e y, 0)
      **********************************************************************/
-    static real RF(real x, real y) throw();
+    static real RF(real x, real y);
 
     /**
-     * Degenerate symmetric integral of the first kind <i>R<sub>C</sub></i>.
+     * Degenerate symmetric integral of the first kind
+     * <i>R</i><sub><i>C</i></sub>.
      *
      * @param[in] x
      * @param[in] y
-     * @return <i>R<sub>C</sub></i>(\e x, \e y) = <i>R<sub>F</sub></i>(\e x, \e
-     *   y, \e y)
+     * @return <i>R</i><sub><i>C</i></sub>(\e x, \e y) =
+     *   <i>R</i><sub><i>F</i></sub>(\e x, \e y, \e y)
      *
-     * <i>R<sub>C</sub></i> is defined in http://dlmf.nist.gov/19.2.E17
+     * <i>R</i><sub><i>C</i></sub> is defined in http://dlmf.nist.gov/19.2.E17
      * \f[ R_C(x, y) = \frac12
      *       \int_0^\infty\frac1{\sqrt{t + x}(t + y)}\,dt \f]
      **********************************************************************/
-    static real RC(real x, real y) throw();
+    static real RC(real x, real y);
 
     /**
-     * Symmetric integral of the second kind <i>R<sub>G</sub></i>.
+     * Symmetric integral of the second kind <i>R</i><sub><i>G</i></sub>.
      *
      * @param[in] x
      * @param[in] y
      * @param[in] z
-     * @return <i>R<sub>G</sub></i>(\e x, \e y, \e z)
+     * @return <i>R</i><sub><i>G</i></sub>(\e x, \e y, \e z)
      *
-     * <i>R<sub>G</sub></i> is defined in Carlson, eq 1.5
+     * <i>R</i><sub><i>G</i></sub> is defined in Carlson, eq 1.5
      * \f[ R_G(x, y, z) = \frac14
      *       \int_0^\infty[(t + x) (t + y) (t + z)]^{-1/2}
      *        \biggl(
@@ -659,47 +657,48 @@ namespace GeographicLib {
      * If one of the arguments is zero, it is more efficient to call the
      * two-argument version of this function with the non-zero arguments.
      **********************************************************************/
-    static real RG(real x, real y, real z) throw();
+    static real RG(real x, real y, real z);
 
     /**
-     * Complete symmetric integral of the second kind, <i>R<sub>G</sub></i>
-     * with one argument zero.
+     * Complete symmetric integral of the second kind,
+     * <i>R</i><sub><i>G</i></sub> with one argument zero.
      *
      * @param[in] x
      * @param[in] y
-     * @return <i>R<sub>G</sub></i>(\e x, \e y, 0)
+     * @return <i>R</i><sub><i>G</i></sub>(\e x, \e y, 0)
      **********************************************************************/
-    static real RG(real x, real y) throw();
+    static real RG(real x, real y);
 
     /**
-     * Symmetric integral of the third kind <i>R<sub>J</sub></i>.
+     * Symmetric integral of the third kind <i>R</i><sub><i>J</i></sub>.
      *
      * @param[in] x
      * @param[in] y
      * @param[in] z
      * @param[in] p
-     * @return <i>R<sub>J</sub></i>(\e x, \e y, \e z, \e p)
+     * @return <i>R</i><sub><i>J</i></sub>(\e x, \e y, \e z, \e p)
      *
-     * <i>R<sub>J</sub></i> is defined in http://dlmf.nist.gov/19.16.E2
+     * <i>R</i><sub><i>J</i></sub> is defined in http://dlmf.nist.gov/19.16.E2
      * \f[ R_J(x, y, z, p) = \frac32
      *       \int_0^\infty[(t + x) (t + y) (t + z)]^{-1/2} (t + p)^{-1}\, dt \f]
      **********************************************************************/
-    static real RJ(real x, real y, real z, real p) throw();
+    static real RJ(real x, real y, real z, real p);
 
     /**
-     * Degenerate symmetric integral of the third kind <i>R<sub>D</sub></i>.
+     * Degenerate symmetric integral of the third kind
+     * <i>R</i><sub><i>D</i></sub>.
      *
      * @param[in] x
      * @param[in] y
      * @param[in] z
-     * @return <i>R<sub>D</sub></i>(\e x, \e y, \e z) = <i>R<sub>J</sub></i>(\e
-     *   x, \e y, \e z, \e z)
+     * @return <i>R</i><sub><i>D</i></sub>(\e x, \e y, \e z) =
+     *   <i>R</i><sub><i>J</i></sub>(\e x, \e y, \e z, \e z)
      *
-     * <i>R<sub>D</sub></i> is defined in http://dlmf.nist.gov/19.16.E5
+     * <i>R</i><sub><i>D</i></sub> is defined in http://dlmf.nist.gov/19.16.E5
      * \f[ R_D(x, y, z) = \frac32
      *       \int_0^\infty[(t + x) (t + y)]^{-1/2} (t + z)^{-3/2}\, dt \f]
      **********************************************************************/
-    static real RD(real x, real y, real z) throw();
+    static real RD(real x, real y, real z);
     ///@}
 
   };
diff --git a/include/GeographicLib/GeoCoords.hpp b/include/GeographicLib/GeoCoords.hpp
index b97a692..19f2de4 100644
--- a/include/GeographicLib/GeoCoords.hpp
+++ b/include/GeographicLib/GeoCoords.hpp
@@ -55,7 +55,7 @@ namespace GeographicLib {
     mutable real _alt_easting, _alt_northing, _alt_gamma, _alt_k;
     mutable int _alt_zone;
 
-    void CopyToAlt() const throw() {
+    void CopyToAlt() const {
       _alt_easting = _easting;
       _alt_northing = _northing;
       _alt_gamma = _gamma;
@@ -63,7 +63,7 @@ namespace GeographicLib {
       _alt_zone = _zone;
     }
     static void UTMUPSString(int zone, bool northp, real easting, real northing,
-                             int prec, std::string& utm);
+                             int prec, bool abbrev, std::string& utm);
     void FixHemisphere();
   public:
 
@@ -74,7 +74,7 @@ namespace GeographicLib {
      * The default constructor is equivalent to \e latitude = 90°,
      * \e longitude = 0°.
      **********************************************************************/
-    GeoCoords() throw()
+    GeoCoords()
       // This is the N pole
       : _lat(90)
       , _long(0)
@@ -109,13 +109,13 @@ namespace GeographicLib {
      *   -  43d16'12"E 33d26'24"N
      *   -  43:16:12E  33:26:24
      * - MGRS
-     *   -  38SLC301
+     *   -  38SLC30
      *   -  38SLC391014
      *   -  38SLC3918701405
      *   -  37SHT9708
      * - UTM
-     *   -  38N 339188 3701405
-     *   -  897039 3708229 37N
+     *   -  38n 339188 3701405
+     *   -  897039 3708229 37n
      *
      * <b>Latitude and Longitude parsing</b>: Latitude precedes longitude,
      * unless a N, S, E, W hemisphere designator is used on one or both
@@ -151,24 +151,25 @@ namespace GeographicLib {
      *
      * <b>UTM/UPS parsing</b>: For UTM zones (−80° ≤ Lat <
      * 84°), the zone designator is made up of a zone number (for 1 to 60)
-     * and a hemisphere letter (N or S), e.g., 38N.  The latitude zone designer
-     * ([C--M] in the southern hemisphere and [N--X] in the northern) should
-     * NOT be used.  (This is part of the MGRS coordinate.)  The zone
-     * designator for the poles (where UPS is employed) is a hemisphere letter
-     * by itself, i.e., N or S.
+     * and a hemisphere letter (n or s), e.g., 38n (38north can also be used).
+     * The latitude band designer ([C--M] in the southern hemisphere and [N--X]
+     * in the northern) should NOT be used.  (This is part of the MGRS
+     * coordinate.)  The zone designator for the poles (where UPS is employed)
+     * is a hemisphere letter by itself, i.e., n or s (north or south can also
+     * be used).
      *
      * <b>MGRS parsing</b> interprets the grid references as square area at the
      * specified precision (1m, 10m, 100m, etc.).  If \e centerp = true (the
      * default), the center of this square is then taken to be the precise
      * position; thus:
-     * - 38SMB           = 38N 450000 3650000
-     * - 38SMB4484       = 38N 444500 3684500
-     * - 38SMB44148470   = 38N 444145 3684705
+     * - 38SMB           = 38n 450000 3650000
+     * - 38SMB4484       = 38n 444500 3684500
+     * - 38SMB44148470   = 38n 444145 3684705
      * .
      * Otherwise, the "south-west" corner of the square is used, i.e.,
-     * - 38SMB           = 38N 400000 3600000
-     * - 38SMB4484       = 38N 444000 3684000
-     * - 38SMB44148470   = 38N 444140 3684700
+     * - 38SMB           = 38n 400000 3600000
+     * - 38SMB4484       = 38n 444000 3684000
+     * - 38SMB44148470   = 38n 444140 3684700
      **********************************************************************/
     explicit GeoCoords(const std::string& s,
                        bool centerp = true, bool swaplatlong = false)
@@ -273,47 +274,47 @@ namespace GeographicLib {
     /**
      * @return latitude (degrees)
      **********************************************************************/
-    Math::real Latitude() const throw() { return _lat; }
+    Math::real Latitude() const { return _lat; }
 
     /**
      * @return longitude (degrees)
      **********************************************************************/
-    Math::real Longitude() const throw() { return _long; }
+    Math::real Longitude() const { return _long; }
 
     /**
      * @return easting (meters)
      **********************************************************************/
-    Math::real Easting() const throw() { return _easting; }
+    Math::real Easting() const { return _easting; }
 
     /**
      * @return northing (meters)
      **********************************************************************/
-    Math::real Northing() const throw() { return _northing; }
+    Math::real Northing() const { return _northing; }
 
     /**
      * @return meridian convergence (degrees) for the UTM/UPS projection.
      **********************************************************************/
-    Math::real Convergence() const throw() { return _gamma; }
+    Math::real Convergence() const { return _gamma; }
 
     /**
      * @return scale for the UTM/UPS projection.
      **********************************************************************/
-    Math::real Scale() const throw() { return _k; }
+    Math::real Scale() const { return _k; }
 
     /**
      * @return hemisphere (false means south, true means north).
      **********************************************************************/
-    bool Northp() const throw() { return _northp; }
+    bool Northp() const { return _northp; }
 
     /**
-     * @return hemisphere letter N or S.
+     * @return hemisphere letter n or s.
      **********************************************************************/
-    char Hemisphere() const throw() { return _northp ? 'N' : 'S'; }
+    char Hemisphere() const { return _northp ? 'n' : 's'; }
 
     /**
      * @return the zone corresponding to the input (return 0 for UPS).
      **********************************************************************/
-    int Zone() const throw() { return _zone; }
+    int Zone() const { return _zone; }
 
     ///@}
 
@@ -350,27 +351,27 @@ namespace GeographicLib {
     /**
      * @return current alternate zone (return 0 for UPS).
      **********************************************************************/
-    int AltZone() const throw() { return _alt_zone; }
+    int AltZone() const { return _alt_zone; }
 
     /**
      * @return easting (meters) for alternate zone.
      **********************************************************************/
-    Math::real AltEasting() const throw() { return _alt_easting; }
+    Math::real AltEasting() const { return _alt_easting; }
 
     /**
      * @return northing (meters) for alternate zone.
      **********************************************************************/
-    Math::real AltNorthing() const throw() { return _alt_northing; }
+    Math::real AltNorthing() const { return _alt_northing; }
 
     /**
      * @return meridian convergence (degrees) for alternate zone.
      **********************************************************************/
-    Math::real AltConvergence() const throw() { return _alt_gamma; }
+    Math::real AltConvergence() const { return _alt_gamma; }
 
     /**
      * @return scale for alternate zone.
      **********************************************************************/
-    Math::real AltScale() const throw() { return _alt_k; }
+    Math::real AltScale() const { return _alt_k; }
     ///@}
 
     /** \name String representations of the GeoCoords object
@@ -426,7 +427,7 @@ namespace GeographicLib {
      * @return MGRS string.
      *
      * This gives the coordinates of the enclosing grid square with size given
-     * by the precision.  Thus 38N 444180 3684790 converted to a MGRS
+     * by the precision.  Thus 38n 444180 3684790 converted to a MGRS
      * coordinate at precision −2 (100m) is 38SMB441847 and not
      * 38SMB442848.  \e prec specifies the precision of the MGRS string as
      * follows:
@@ -445,6 +446,8 @@ namespace GeographicLib {
      * UTM/UPS string.
      *
      * @param[in] prec precision (relative to about 1m)
+     * @param[in] abbrev if true (the default) use abbreviated (n/s) notation
+     *   for hemisphere; otherwise spell out the hemisphere (north/south)
      * @exception std::bad_alloc if memory for the string can't be allocated.
      * @return UTM/UPS string representation: zone designator, easting, and
      *   northing.
@@ -457,20 +460,23 @@ namespace GeographicLib {
      * - prec = 6, 1μm
      * - prec = 9 (max), 1nm
      **********************************************************************/
-    std::string UTMUPSRepresentation(int prec = 0) const;
+    std::string UTMUPSRepresentation(int prec = 0, bool abbrev = true) const;
 
     /**
      * UTM/UPS string with hemisphere override.
      *
-     * @param[in] prec precision (relative to about 1m)
      * @param[in] northp hemisphere override
+     * @param[in] prec precision (relative to about 1m)
+     * @param[in] abbrev if true (the default) use abbreviated (n/s) notation
+     *   for hemisphere; otherwise spell out the hemisphere (north/south)
      * @exception GeographicErr if the hemisphere override attempts to change
-     *   UPS N to UPS S or vice verse.
+     *   UPS N to UPS S or vice versa.
      * @exception std::bad_alloc if memory for the string can't be allocated.
      * @return UTM/UPS string representation: zone designator, easting, and
      *   northing.
      **********************************************************************/
-    std::string UTMUPSRepresentation(bool northp, int prec = 0) const;
+    std::string UTMUPSRepresentation(bool northp, int prec = 0,
+                                     bool abbrev = true) const;
 
     /**
      * MGRS string for the alternate zone.  See GeoCoords::MGRSRepresentation.
@@ -486,24 +492,29 @@ namespace GeographicLib {
      * GeoCoords::UTMUPSRepresentation.
      *
      * @param[in] prec precision (relative to about 1m)
+     * @param[in] abbrev if true (the default) use abbreviated (n/s) notation
+     *   for hemisphere; otherwise spell out the hemisphere (north/south)
      * @exception std::bad_alloc if memory for the string can't be allocated.
      * @return UTM/UPS string representation: zone designator, easting, and
      *   northing.
      **********************************************************************/
-    std::string AltUTMUPSRepresentation(int prec = 0) const;
+    std::string AltUTMUPSRepresentation(int prec = 0, bool abbrev = true) const;
 
     /**
      * UTM/UPS string for the alternate zone, with hemisphere override.
      *
-     * @param[in] prec precision (relative to about 1m)
      * @param[in] northp hemisphere override
+     * @param[in] prec precision (relative to about 1m)
+     * @param[in] abbrev if true (the default) use abbreviated (n/s) notation
+     *   for hemisphere; otherwise spell out the hemisphere (north/south)
      * @exception GeographicErr if the hemisphere override attempts to change
-     *   UPS N to UPS S or vice verse.
+     *   UPS n to UPS s or vice verse.
      * @exception std::bad_alloc if memory for the string can't be allocated.
      * @return UTM/UPS string representation: zone designator, easting, and
      *   northing.
      **********************************************************************/
-    std::string AltUTMUPSRepresentation(bool northp, int prec = 0) const;
+    std::string AltUTMUPSRepresentation(bool northp, int prec = 0,
+                                        bool abbrev = true) const;
     ///@}
 
     /** \name Inspector functions
@@ -515,7 +526,7 @@ namespace GeographicLib {
      * (The WGS84 value is returned because the UTM and UPS projections are
      * based on this ellipsoid.)
      **********************************************************************/
-    Math::real MajorRadius() const throw() { return UTMUPS::MajorRadius(); }
+    Math::real MajorRadius() const { return UTMUPS::MajorRadius(); }
 
     /**
      * @return \e f the flattening of the WGS84 ellipsoid.
@@ -523,7 +534,7 @@ namespace GeographicLib {
      * (The WGS84 value is returned because the UTM and UPS projections are
      * based on this ellipsoid.)
      **********************************************************************/
-    Math::real Flattening() const throw() { return UTMUPS::Flattening(); }
+    Math::real Flattening() const { return UTMUPS::Flattening(); }
     ///@}
 
     /// \cond SKIP
@@ -531,7 +542,7 @@ namespace GeographicLib {
      * <b>DEPRECATED</b>
      * @return \e r the inverse flattening of the ellipsoid.
      **********************************************************************/
-    Math::real InverseFlattening() const throw()
+    Math::real InverseFlattening() const
     { return UTMUPS::InverseFlattening(); }
     /// \endcond
   };
diff --git a/include/GeographicLib/Geocentric.hpp b/include/GeographicLib/Geocentric.hpp
index 3afdb0b..d358445 100644
--- a/include/GeographicLib/Geocentric.hpp
+++ b/include/GeographicLib/Geocentric.hpp
@@ -43,6 +43,12 @@ namespace GeographicLib {
    *   preprint
    *   <a href="http://arxiv.org/abs/1102.1215v1">arxiv:1102.1215v1</a>.
    * .
+   * Vermeille similarly updated his method in
+   * - H. Vermeille,
+   *   <a href="http://dx.doi.org/10.1007/s00190-010-0419-x">
+   *   An analytical method to transform geocentric into
+   *   geodetic coordinates</a>, J. Geodesy 85, 105--117 (2011).
+   * .
    * See \ref geocentric for more information.
    *
    * The errors in these routines are close to round-off.  Specifically, for
@@ -74,9 +80,9 @@ namespace GeographicLib {
     static const size_t dim2_ = dim_ * dim_;
     real _a, _f, _e2, _e2m, _e2a, _e4a, _maxrad;
     static void Rotation(real sphi, real cphi, real slam, real clam,
-                         real M[dim2_]) throw();
+                         real M[dim2_]);
     static void Rotate(real M[dim2_], real x, real y, real z,
-                       real& X, real& Y, real& Z) throw() {
+                       real& X, real& Y, real& Z) {
       // Perform [X,Y,Z]^t = M.[x,y,z]^t
       // (typically local cartesian to geocentric)
       X = M[0] * x + M[1] * y + M[2] * z;
@@ -84,7 +90,7 @@ namespace GeographicLib {
       Z = M[6] * x + M[7] * y + M[8] * z;
     }
     static void Unrotate(real M[dim2_], real X, real Y, real Z,
-                         real& x, real& y, real& z) throw()  {
+                         real& x, real& y, real& z)  {
       // Perform [x,y,z]^t = M^t.[X,Y,Z]^t
       // (typically geocentric to local cartesian)
       x = M[0] * X + M[3] * Y + M[6] * Z;
@@ -92,9 +98,9 @@ namespace GeographicLib {
       z = M[2] * X + M[5] * Y + M[8] * Z;
     }
     void IntForward(real lat, real lon, real h, real& X, real& Y, real& Z,
-                    real M[dim2_]) const throw();
+                    real M[dim2_]) const;
     void IntReverse(real X, real Y, real Z, real& lat, real& lon, real& h,
-                    real M[dim2_]) const throw();
+                    real M[dim2_]) const;
 
   public:
 
@@ -103,9 +109,9 @@ namespace GeographicLib {
      *
      * @param[in] a equatorial radius (meters).
      * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
-     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
-     *   to 1/\e f.
-     * @exception GeographicErr if \e a or (1 − \e f ) \e a is not
+     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set
+     *   flattening to 1/\e f.
+     * @exception GeographicErr if \e a or (1 − \e f) \e a is not
      *   positive.
      **********************************************************************/
     Geocentric(real a, real f);
@@ -129,7 +135,7 @@ namespace GeographicLib {
      * should be in the range [−540°, 540°).
      **********************************************************************/
     void Forward(real lat, real lon, real h, real& X, real& Y, real& Z)
-      const throw() {
+      const {
       if (Init())
         IntForward(lat, lon, h, X, Y, Z, NULL);
     }
@@ -159,13 +165,13 @@ namespace GeographicLib {
      **********************************************************************/
     void Forward(real lat, real lon, real h, real& X, real& Y, real& Z,
                  std::vector<real>& M)
-      const throw() {
+      const {
       if (!Init())
         return;
       if (M.end() == M.begin() + dim2_) {
         real t[dim2_];
         IntForward(lat, lon, h, X, Y, Z, t);
-        copy(t, t + dim2_, M.begin());
+        std::copy(t, t + dim2_, M.begin());
       } else
         IntForward(lat, lon, h, X, Y, Z, NULL);
     }
@@ -191,7 +197,7 @@ namespace GeographicLib {
      * [−180°, 180°).
      **********************************************************************/
     void Reverse(real X, real Y, real Z, real& lat, real& lon, real& h)
-      const throw() {
+      const {
       if (Init())
         IntReverse(X, Y, Z, lat, lon, h, NULL);
     }
@@ -216,18 +222,18 @@ namespace GeographicLib {
      * - in geocentric \e X, \e Y, \e Z coordinates; call this representation
      *   \e v0.
      * .
-     * Then we have \e v1 = \e M<sup>T</sup> ⋅ \e v0, where \e
-     * M<sup>T</sup> is the transpose of \e M.
+     * Then we have \e v1 = <i>M</i><sup>T</sup> ⋅ \e v0, where
+     * <i>M</i><sup>T</sup> is the transpose of \e M.
      **********************************************************************/
     void Reverse(real X, real Y, real Z, real& lat, real& lon, real& h,
                  std::vector<real>& M)
-      const throw() {
+      const {
       if (!Init())
         return;
       if (M.end() == M.begin() + dim2_) {
         real t[dim2_];
         IntReverse(X, Y, Z, lat, lon, h, t);
-        copy(t, t + dim2_, M.begin());
+        std::copy(t, t + dim2_, M.begin());
       } else
         IntReverse(X, Y, Z, lat, lon, h, NULL);
     }
@@ -238,20 +244,20 @@ namespace GeographicLib {
     /**
      * @return true if the object has been initialized.
      **********************************************************************/
-    bool Init() const throw() { return _a > 0; }
+    bool Init() const { return _a > 0; }
     /**
      * @return \e a the equatorial radius of the ellipsoid (meters).  This is
      *   the value used in the constructor.
      **********************************************************************/
-    Math::real MajorRadius() const throw()
-    { return Init() ? _a : Math::NaN<real>(); }
+    Math::real MajorRadius() const
+    { return Init() ? _a : Math::NaN(); }
 
     /**
      * @return \e f the  flattening of the ellipsoid.  This is the
      *   value used in the constructor.
      **********************************************************************/
-    Math::real Flattening() const throw()
-    { return Init() ? _f : Math::NaN<real>(); }
+    Math::real Flattening() const
+    { return Init() ? _f : Math::NaN(); }
     ///@}
 
     /// \cond SKIP
@@ -259,15 +265,15 @@ namespace GeographicLib {
      * <b>DEPRECATED</b>
      * @return \e r the inverse flattening of the ellipsoid.
      **********************************************************************/
-    Math::real InverseFlattening() const throw()
-    { return Init() ? 1/_f : Math::NaN<real>(); }
+    Math::real InverseFlattening() const
+    { return Init() ? 1/_f : Math::NaN(); }
     /// \endcond
 
     /**
      * A global instantiation of Geocentric with the parameters for the WGS84
      * ellipsoid.
      **********************************************************************/
-    static const Geocentric WGS84;
+    static const Geocentric& WGS84();
   };
 
 } // namespace GeographicLib
diff --git a/include/GeographicLib/Geodesic.hpp b/include/GeographicLib/Geodesic.hpp
index 6cec279..5c95166 100644
--- a/include/GeographicLib/Geodesic.hpp
+++ b/include/GeographicLib/Geodesic.hpp
@@ -15,9 +15,12 @@
 #if !defined(GEOGRAPHICLIB_GEODESIC_ORDER)
 /**
  * The order of the expansions used by Geodesic.
+ * GEOGRAPHICLIB_GEODESIC_ORDER can be set to any integer in [0, 8].
  **********************************************************************/
 #  define GEOGRAPHICLIB_GEODESIC_ORDER \
-  (GEOGRAPHICLIB_PRECISION == 2 ? 6 : (GEOGRAPHICLIB_PRECISION == 1 ? 3 : 7))
+  (GEOGRAPHICLIB_PRECISION == 2 ? 6 : \
+   (GEOGRAPHICLIB_PRECISION == 1 ? 3 : \
+    (GEOGRAPHICLIB_PRECISION == 3 ? 7 : 8)))
 #endif
 
 namespace GeographicLib {
@@ -182,15 +185,8 @@ namespace GeographicLib {
     static const int nC4_ = GEOGRAPHICLIB_GEODESIC_ORDER;
     static const int nC4x_ = (nC4_ * (nC4_ + 1)) / 2;
     static const unsigned maxit1_ = 20;
-    static const unsigned maxit2_ = maxit1_ +
-      std::numeric_limits<real>::digits + 10;
-
-    static const real tiny_;
-    static const real tol0_;
-    static const real tol1_;
-    static const real tol2_;
-    static const real tolb_;
-    static const real xthresh_;
+    unsigned maxit2_;
+    real tiny_, tol0_, tol1_, tol2_, tolb_, xthresh_;
 
     enum captype {
       CAP_NONE = 0U,
@@ -204,26 +200,26 @@ namespace GeographicLib {
     };
 
     static real SinCosSeries(bool sinp,
-                             real sinx, real cosx, const real c[], int n)
-      throw();
-    static inline real AngRound(real x) throw() {
+                             real sinx, real cosx, const real c[], int n);
+    static inline real AngRound(real x) {
       // The makes the smallest gap in x = 1/16 - nextafter(1/16, 0) = 1/2^57
       // for reals = 0.7 pm on the earth if x is an angle in degrees.  (This
       // is about 1000 times more resolution than we get with angles around 90
       // degrees.)  We use this to avoid having to deal with near singular
       // cases when x is non-zero but tiny (e.g., 1.0e-200).
+      using std::abs;
       const real z = 1/real(16);
-      volatile real y = std::abs(x);
+      GEOGRAPHICLIB_VOLATILE real y = abs(x);
       // The compiler mustn't "simplify" z - (z - y) to y
       y = y < z ? z - (z - y) : y;
       return x < 0 ? -y : y;
     }
-    static inline void SinCosNorm(real& sinx, real& cosx) throw() {
+    static inline void SinCosNorm(real& sinx, real& cosx) {
       real r = Math::hypot(sinx, cosx);
       sinx /= r;
       cosx /= r;
     }
-    static real Astroid(real x, real y) throw();
+    static real Astroid(real x, real y);
 
     real _a, _f, _f1, _e2, _ep2, _n, _b, _c2, _etol2;
     real _A3x[nA3x_], _C3x[nC3x_], _C4x[nC4x_];
@@ -234,13 +230,13 @@ namespace GeographicLib {
                  real cbet1, real cbet2,
                  real& s12s, real& m12a, real& m0,
                  bool scalep, real& M12, real& M21,
-                 real C1a[], real C2a[]) const throw();
+                 real C1a[], real C2a[]) const;
     real InverseStart(real sbet1, real cbet1, real dn1,
                       real sbet2, real cbet2, real dn2,
                       real lam12,
                       real& salp1, real& calp1,
                       real& salp2, real& calp2, real& dnm,
-                      real C1a[], real C2a[]) const throw();
+                      real C1a[], real C2a[]) const;
     real Lambda12(real sbet1, real cbet1, real dn1,
                   real sbet2, real cbet2, real dn2,
                   real salp1, real calp1,
@@ -248,22 +244,22 @@ namespace GeographicLib {
                   real& ssig1, real& csig1, real& ssig2, real& csig2,
                   real& eps, real& domg12, bool diffp, real& dlam12,
                   real C1a[], real C2a[], real C3a[])
-      const throw();
+      const;
 
     // These are Maxima generated functions to provide series approximations to
     // the integrals for the ellipsoidal geodesic.
-    static real A1m1f(real eps) throw();
-    static void C1f(real eps, real c[]) throw();
-    static void C1pf(real eps, real c[]) throw();
-    static real A2m1f(real eps) throw();
-    static void C2f(real eps, real c[]) throw();
-
-    void A3coeff() throw();
-    real A3f(real eps) const throw();
-    void C3coeff() throw();
-    void C3f(real eps, real c[]) const throw();
-    void C4coeff() throw();
-    void C4f(real k2, real c[]) const throw();
+    static real A1m1f(real eps);
+    static void C1f(real eps, real c[]);
+    static void C1pf(real eps, real c[]);
+    static real A2m1f(real eps);
+    static void C2f(real eps, real c[]);
+
+    void A3coeff();
+    real A3f(real eps) const;
+    void C3coeff();
+    void C3f(real eps, real c[]) const;
+    void C4coeff();
+    void C4f(real k2, real c[]) const;
 
   public:
 
@@ -340,9 +336,9 @@ namespace GeographicLib {
      *
      * @param[in] a equatorial radius (meters).
      * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
-     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
-     *   to 1/\e f.
-     * @exception GeographicErr if \e a or (1 − \e f ) \e a is not
+     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set
+     *   flattening to 1/\e f.
+     * @exception GeographicErr if \e a or (1 − \e f) \e a is not
      *   positive.
      **********************************************************************/
     Geodesic(real a, real f);
@@ -390,7 +386,7 @@ namespace GeographicLib {
     Math::real Direct(real lat1, real lon1, real azi1, real s12,
                       real& lat2, real& lon2, real& azi2,
                       real& m12, real& M12, real& M21, real& S12)
-      const throw() {
+      const {
       real t;
       return GenDirect(lat1, lon1, azi1, false, s12,
                        LATITUDE | LONGITUDE | AZIMUTH |
@@ -403,7 +399,7 @@ namespace GeographicLib {
      **********************************************************************/
     Math::real Direct(real lat1, real lon1, real azi1, real s12,
                       real& lat2, real& lon2)
-      const throw() {
+      const {
       real t;
       return GenDirect(lat1, lon1, azi1, false, s12,
                        LATITUDE | LONGITUDE,
@@ -415,7 +411,7 @@ namespace GeographicLib {
      **********************************************************************/
     Math::real Direct(real lat1, real lon1, real azi1, real s12,
                       real& lat2, real& lon2, real& azi2)
-      const throw() {
+      const {
       real t;
       return GenDirect(lat1, lon1, azi1, false, s12,
                        LATITUDE | LONGITUDE | AZIMUTH,
@@ -427,7 +423,7 @@ namespace GeographicLib {
      **********************************************************************/
     Math::real Direct(real lat1, real lon1, real azi1, real s12,
                       real& lat2, real& lon2, real& azi2, real& m12)
-      const throw() {
+      const {
       real t;
       return GenDirect(lat1, lon1, azi1, false, s12,
                        LATITUDE | LONGITUDE | AZIMUTH | REDUCEDLENGTH,
@@ -440,7 +436,7 @@ namespace GeographicLib {
     Math::real Direct(real lat1, real lon1, real azi1, real s12,
                       real& lat2, real& lon2, real& azi2,
                       real& M12, real& M21)
-      const throw() {
+      const {
       real t;
       return GenDirect(lat1, lon1, azi1, false, s12,
                        LATITUDE | LONGITUDE | AZIMUTH | GEODESICSCALE,
@@ -453,7 +449,7 @@ namespace GeographicLib {
     Math::real Direct(real lat1, real lon1, real azi1, real s12,
                       real& lat2, real& lon2, real& azi2,
                       real& m12, real& M12, real& M21)
-      const throw() {
+      const {
       real t;
       return GenDirect(lat1, lon1, azi1, false, s12,
                        LATITUDE | LONGITUDE | AZIMUTH |
@@ -503,7 +499,7 @@ namespace GeographicLib {
     void ArcDirect(real lat1, real lon1, real azi1, real a12,
                    real& lat2, real& lon2, real& azi2, real& s12,
                    real& m12, real& M12, real& M21, real& S12)
-      const throw() {
+      const {
       GenDirect(lat1, lon1, azi1, true, a12,
                 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
                 REDUCEDLENGTH | GEODESICSCALE | AREA,
@@ -514,7 +510,7 @@ namespace GeographicLib {
      * See the documentation for Geodesic::ArcDirect.
      **********************************************************************/
     void ArcDirect(real lat1, real lon1, real azi1, real a12,
-                   real& lat2, real& lon2) const throw() {
+                   real& lat2, real& lon2) const {
       real t;
       GenDirect(lat1, lon1, azi1, true, a12,
                 LATITUDE | LONGITUDE,
@@ -525,7 +521,7 @@ namespace GeographicLib {
      * See the documentation for Geodesic::ArcDirect.
      **********************************************************************/
     void ArcDirect(real lat1, real lon1, real azi1, real a12,
-                   real& lat2, real& lon2, real& azi2) const throw() {
+                   real& lat2, real& lon2, real& azi2) const {
       real t;
       GenDirect(lat1, lon1, azi1, true, a12,
                 LATITUDE | LONGITUDE | AZIMUTH,
@@ -537,7 +533,7 @@ namespace GeographicLib {
      **********************************************************************/
     void ArcDirect(real lat1, real lon1, real azi1, real a12,
                    real& lat2, real& lon2, real& azi2, real& s12)
-      const throw() {
+      const {
       real t;
       GenDirect(lat1, lon1, azi1, true, a12,
                 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE,
@@ -549,7 +545,7 @@ namespace GeographicLib {
      **********************************************************************/
     void ArcDirect(real lat1, real lon1, real azi1, real a12,
                    real& lat2, real& lon2, real& azi2,
-                   real& s12, real& m12) const throw() {
+                   real& s12, real& m12) const {
       real t;
       GenDirect(lat1, lon1, azi1, true, a12,
                 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
@@ -562,7 +558,7 @@ namespace GeographicLib {
      **********************************************************************/
     void ArcDirect(real lat1, real lon1, real azi1, real a12,
                    real& lat2, real& lon2, real& azi2, real& s12,
-                   real& M12, real& M21) const throw() {
+                   real& M12, real& M21) const {
       real t;
       GenDirect(lat1, lon1, azi1, true, a12,
                 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
@@ -575,7 +571,7 @@ namespace GeographicLib {
      **********************************************************************/
     void ArcDirect(real lat1, real lon1, real azi1, real a12,
                    real& lat2, real& lon2, real& azi2, real& s12,
-                   real& m12, real& M12, real& M21) const throw() {
+                   real& m12, real& M12, real& M21) const {
       real t;
       GenDirect(lat1, lon1, azi1, true, a12,
                 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
@@ -636,7 +632,7 @@ namespace GeographicLib {
                          bool arcmode, real s12_a12, unsigned outmask,
                          real& lat2, real& lon2, real& azi2,
                          real& s12, real& m12, real& M12, real& M21,
-                         real& S12) const throw();
+                         real& S12) const;
     ///@}
 
     /** \name Inverse geodesic problem.
@@ -680,7 +676,7 @@ namespace GeographicLib {
      **********************************************************************/
     Math::real Inverse(real lat1, real lon1, real lat2, real lon2,
                        real& s12, real& azi1, real& azi2, real& m12,
-                       real& M12, real& M21, real& S12) const throw() {
+                       real& M12, real& M21, real& S12) const {
       return GenInverse(lat1, lon1, lat2, lon2,
                         DISTANCE | AZIMUTH |
                         REDUCEDLENGTH | GEODESICSCALE | AREA,
@@ -691,7 +687,7 @@ namespace GeographicLib {
      * See the documentation for Geodesic::Inverse.
      **********************************************************************/
     Math::real Inverse(real lat1, real lon1, real lat2, real lon2,
-                       real& s12) const throw() {
+                       real& s12) const {
       real t;
       return GenInverse(lat1, lon1, lat2, lon2,
                         DISTANCE,
@@ -702,7 +698,7 @@ namespace GeographicLib {
      * See the documentation for Geodesic::Inverse.
      **********************************************************************/
     Math::real Inverse(real lat1, real lon1, real lat2, real lon2,
-                       real& azi1, real& azi2) const throw() {
+                       real& azi1, real& azi2) const {
       real t;
       return GenInverse(lat1, lon1, lat2, lon2,
                         AZIMUTH,
@@ -714,7 +710,7 @@ namespace GeographicLib {
      **********************************************************************/
     Math::real Inverse(real lat1, real lon1, real lat2, real lon2,
                        real& s12, real& azi1, real& azi2)
-      const throw() {
+      const {
       real t;
       return GenInverse(lat1, lon1, lat2, lon2,
                         DISTANCE | AZIMUTH,
@@ -726,7 +722,7 @@ namespace GeographicLib {
      **********************************************************************/
     Math::real Inverse(real lat1, real lon1, real lat2, real lon2,
                        real& s12, real& azi1, real& azi2, real& m12)
-      const throw() {
+      const {
       real t;
       return GenInverse(lat1, lon1, lat2, lon2,
                         DISTANCE | AZIMUTH | REDUCEDLENGTH,
@@ -738,7 +734,7 @@ namespace GeographicLib {
      **********************************************************************/
     Math::real Inverse(real lat1, real lon1, real lat2, real lon2,
                        real& s12, real& azi1, real& azi2,
-                       real& M12, real& M21) const throw() {
+                       real& M12, real& M21) const {
       real t;
       return GenInverse(lat1, lon1, lat2, lon2,
                         DISTANCE | AZIMUTH | GEODESICSCALE,
@@ -750,7 +746,7 @@ namespace GeographicLib {
      **********************************************************************/
     Math::real Inverse(real lat1, real lon1, real lat2, real lon2,
                        real& s12, real& azi1, real& azi2, real& m12,
-                       real& M12, real& M21) const throw() {
+                       real& M12, real& M21) const {
       real t;
       return GenInverse(lat1, lon1, lat2, lon2,
                         DISTANCE | AZIMUTH |
@@ -799,7 +795,7 @@ namespace GeographicLib {
                           unsigned outmask,
                           real& s12, real& azi1, real& azi2,
                           real& m12, real& M12, real& M21, real& S12)
-      const throw();
+      const;
     ///@}
 
     /** \name Interface to GeodesicLine.
@@ -844,7 +840,7 @@ namespace GeographicLib {
      * limit ε → 0+.
      **********************************************************************/
     GeodesicLine Line(real lat1, real lon1, real azi1, unsigned caps = ALL)
-      const throw();
+      const;
 
     ///@}
 
@@ -856,20 +852,20 @@ namespace GeographicLib {
      * @return \e a the equatorial radius of the ellipsoid (meters).  This is
      *   the value used in the constructor.
      **********************************************************************/
-    Math::real MajorRadius() const throw() { return _a; }
+    Math::real MajorRadius() const { return _a; }
 
     /**
      * @return \e f the  flattening of the ellipsoid.  This is the
      *   value used in the constructor.
      **********************************************************************/
-    Math::real Flattening() const throw() { return _f; }
+    Math::real Flattening() const { return _f; }
 
     /// \cond SKIP
     /**
      * <b>DEPRECATED</b>
      * @return \e r the inverse flattening of the ellipsoid.
      **********************************************************************/
-    Math::real InverseFlattening() const throw() { return 1/_f; }
+    Math::real InverseFlattening() const { return 1/_f; }
     /// \endcond
 
     /**
@@ -878,15 +874,15 @@ namespace GeographicLib {
      *   Geodesic::EllipsoidArea()/2 to the sum of \e S12 for each side of the
      *   polygon.
      **********************************************************************/
-    Math::real EllipsoidArea() const throw()
-    { return 4 * Math::pi<real>() * _c2; }
+    Math::real EllipsoidArea() const
+    { return 4 * Math::pi() * _c2; }
     ///@}
 
     /**
      * A global instantiation of Geodesic with the parameters for the WGS84
      * ellipsoid.
      **********************************************************************/
-    static const Geodesic WGS84;
+    static const Geodesic& WGS84();
 
   };
 
diff --git a/include/GeographicLib/GeodesicExact.hpp b/include/GeographicLib/GeodesicExact.hpp
index e76daee..e23f1a4 100644
--- a/include/GeographicLib/GeodesicExact.hpp
+++ b/include/GeographicLib/GeodesicExact.hpp
@@ -32,8 +32,8 @@ namespace GeographicLib {
    * in a series in the flattening \e f and this provides an accurate solution
    * for \e f ∈ [-0.01, 0.01].  The GeodesicExact class computes the
    * ellitpic integrals directly and so provides a solution which is valid for
-   * all \e f.  However, in practice, its use should be limited to about \e
-   * b/\e a ∈ [0.01, 100] or \e f ∈ [-99, 0.99].
+   * all \e f.  However, in practice, its use should be limited to about
+   * <i>b</i>/\e a ∈ [0.01, 100] or \e f ∈ [-99, 0.99].
    *
    * For the WGS84 ellipsoid, these classes are 2--3 times \e slower than the
    * series solution and 2--3 times \e less \e accurate (because it's less easy
@@ -41,8 +41,8 @@ namespace GeographicLib {
    * the error is about 40 nm (40 nanometers) instead of 15 nm.  However the
    * error in the series solution scales as <i>f</i><sup>7</sup> while the
    * error in the elliptic integral solution depends weakly on \e f.  If the
-   * quarter meridian distance is 10000 km and the ratio \e b/\e a = 1 −
-   * \e f is varied then the approximate maximum error (expressed as a
+   * quarter meridian distance is 10000 km and the ratio <i>b</i>/\e a = 1
+   * − \e f is varied then the approximate maximum error (expressed as a
    * distance) is <pre>
    *       1 - f  error (nm)
    *       1/128     387
@@ -63,8 +63,8 @@ namespace GeographicLib {
    * </pre>
    *
    * The computation of the area in these classes is via a 30th order series.
-   * This gives accurate results for \e b/\e a ∈ [1/2, 2]; the accuracy is
-   * about 8 decimal digits for \e b/\e a ∈ [1/4, 4].
+   * This gives accurate results for <i>b</i>/\e a ∈ [1/2, 2]; the
+   * accuracy is about 8 decimal digits for <i>b</i>/\e a ∈ [1/4, 4].
    *
    * See \ref geodellip for the formulation.  See the documentation on the
    * Geodesic class for additional information on the geodesic problems.
@@ -84,15 +84,8 @@ namespace GeographicLib {
     static const int nC4_ = GEOGRAPHICLIB_GEODESICEXACT_ORDER;
     static const int nC4x_ = (nC4_ * (nC4_ + 1)) / 2;
     static const unsigned maxit1_ = 20;
-    static const unsigned maxit2_ = maxit1_ +
-      std::numeric_limits<real>::digits + 10;
-
-    static const real tiny_;
-    static const real tol0_;
-    static const real tol1_;
-    static const real tol2_;
-    static const real tolb_;
-    static const real xthresh_;
+    unsigned maxit2_;
+    real tiny_, tol0_, tol1_, tol2_, tolb_, xthresh_;
 
     enum captype {
       CAP_NONE = 0U,
@@ -105,26 +98,26 @@ namespace GeographicLib {
       OUT_ALL  = 0x7F80U,
     };
 
-    static real CosSeries(real sinx, real cosx, const real c[], int n)
-      throw();
-    static inline real AngRound(real x) throw() {
+    static real CosSeries(real sinx, real cosx, const real c[], int n);
+    static inline real AngRound(real x) {
       // The makes the smallest gap in x = 1/16 - nextafter(1/16, 0) = 1/2^57
       // for reals = 0.7 pm on the earth if x is an angle in degrees.  (This
       // is about 1000 times more resolution than we get with angles around 90
       // degrees.)  We use this to avoid having to deal with near singular
       // cases when x is non-zero but tiny (e.g., 1.0e-200).
+      using std::abs;
       const real z = 1/real(16);
-      volatile real y = std::abs(x);
+      GEOGRAPHICLIB_VOLATILE real y = abs(x);
       // The compiler mustn't "simplify" z - (z - y) to y
       y = y < z ? z - (z - y) : y;
       return x < 0 ? -y : y;
     }
-    static inline void SinCosNorm(real& sinx, real& cosx) throw() {
+    static inline void SinCosNorm(real& sinx, real& cosx) {
       real r = Math::hypot(sinx, cosx);
       sinx /= r;
       cosx /= r;
     }
-    static real Astroid(real x, real y) throw();
+    static real Astroid(real x, real y);
 
     real _a, _f, _f1, _e2, _ep2, _n, _b, _c2, _etol2;
     real _C4x[nC4x_];
@@ -135,26 +128,34 @@ namespace GeographicLib {
                  real ssig2, real csig2, real dn2,
                  real cbet1, real cbet2,
                  real& s12s, real& m12a, real& m0,
-                 bool scalep, real& M12, real& M21) const throw();
+                 bool scalep, real& M12, real& M21) const;
     real InverseStart(EllipticFunction& E,
                       real sbet1, real cbet1, real dn1,
                       real sbet2, real cbet2, real dn2,
                       real lam12,
                       real& salp1, real& calp1,
-                      real& salp2, real& calp2, real& dnm) const throw();
+                      real& salp2, real& calp2, real& dnm) const;
     real Lambda12(real sbet1, real cbet1, real dn1,
                   real sbet2, real cbet2, real dn2,
                   real salp1, real calp1,
                   real& salp2, real& calp2, real& sig12,
                   real& ssig1, real& csig1, real& ssig2, real& csig2,
                   EllipticFunction& E,
-                  real& omg12, bool diffp, real& dlam12)
-      const throw();
+                  real& omg12, bool diffp, real& dlam12) const;
 
     // These are Maxima generated functions to provide series approximations to
     // the integrals for the area.
-    void C4coeff() throw();
-    void C4f(real k2, real c[]) const throw();
+    void C4coeff();
+    void C4f(real k2, real c[]) const;
+    // Large coefficients are split so that lo contains the low 52 bits and hi
+    // the rest.  This choice avoids double rounding with doubles and higher
+    // precision types.  float coefficients will suffer double rounding;
+    // however the accuracy is already lousy for floats.
+    static Math::real inline reale(long long hi, long long lo) {
+      using std::ldexp;
+      return ldexp(real(hi), 52) + lo;
+    }
+    static const Math::real* rawC4coeff();
 
   public:
 
@@ -232,9 +233,9 @@ namespace GeographicLib {
      *
      * @param[in] a equatorial radius (meters).
      * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
-     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
-     *   to 1/\e f.
-     * @exception GeographicErr if \e a or (1 − \e f ) \e a is not
+     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set
+     *   flattening to 1/\e f.
+     * @exception GeographicErr if \e a or (1 − \e f) \e a is not
      *   positive.
      **********************************************************************/
     GeodesicExact(real a, real f);
@@ -282,7 +283,7 @@ namespace GeographicLib {
     Math::real Direct(real lat1, real lon1, real azi1, real s12,
                       real& lat2, real& lon2, real& azi2,
                       real& m12, real& M12, real& M21, real& S12)
-      const throw() {
+      const {
       real t;
       return GenDirect(lat1, lon1, azi1, false, s12,
                        LATITUDE | LONGITUDE | AZIMUTH |
@@ -295,7 +296,7 @@ namespace GeographicLib {
      **********************************************************************/
     Math::real Direct(real lat1, real lon1, real azi1, real s12,
                       real& lat2, real& lon2)
-      const throw() {
+      const {
       real t;
       return GenDirect(lat1, lon1, azi1, false, s12,
                        LATITUDE | LONGITUDE,
@@ -307,7 +308,7 @@ namespace GeographicLib {
      **********************************************************************/
     Math::real Direct(real lat1, real lon1, real azi1, real s12,
                       real& lat2, real& lon2, real& azi2)
-      const throw() {
+      const {
       real t;
       return GenDirect(lat1, lon1, azi1, false, s12,
                        LATITUDE | LONGITUDE | AZIMUTH,
@@ -319,7 +320,7 @@ namespace GeographicLib {
      **********************************************************************/
     Math::real Direct(real lat1, real lon1, real azi1, real s12,
                       real& lat2, real& lon2, real& azi2, real& m12)
-      const throw() {
+      const {
       real t;
       return GenDirect(lat1, lon1, azi1, false, s12,
                        LATITUDE | LONGITUDE | AZIMUTH | REDUCEDLENGTH,
@@ -332,7 +333,7 @@ namespace GeographicLib {
     Math::real Direct(real lat1, real lon1, real azi1, real s12,
                       real& lat2, real& lon2, real& azi2,
                       real& M12, real& M21)
-      const throw() {
+      const {
       real t;
       return GenDirect(lat1, lon1, azi1, false, s12,
                        LATITUDE | LONGITUDE | AZIMUTH | GEODESICSCALE,
@@ -345,7 +346,7 @@ namespace GeographicLib {
     Math::real Direct(real lat1, real lon1, real azi1, real s12,
                       real& lat2, real& lon2, real& azi2,
                       real& m12, real& M12, real& M21)
-      const throw() {
+      const {
       real t;
       return GenDirect(lat1, lon1, azi1, false, s12,
                        LATITUDE | LONGITUDE | AZIMUTH |
@@ -395,7 +396,7 @@ namespace GeographicLib {
     void ArcDirect(real lat1, real lon1, real azi1, real a12,
                    real& lat2, real& lon2, real& azi2, real& s12,
                    real& m12, real& M12, real& M21, real& S12)
-      const throw() {
+      const {
       GenDirect(lat1, lon1, azi1, true, a12,
                 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
                 REDUCEDLENGTH | GEODESICSCALE | AREA,
@@ -406,7 +407,7 @@ namespace GeographicLib {
      * See the documentation for GeodesicExact::ArcDirect.
      **********************************************************************/
     void ArcDirect(real lat1, real lon1, real azi1, real a12,
-                   real& lat2, real& lon2) const throw() {
+                   real& lat2, real& lon2) const {
       real t;
       GenDirect(lat1, lon1, azi1, true, a12,
                 LATITUDE | LONGITUDE,
@@ -417,7 +418,7 @@ namespace GeographicLib {
      * See the documentation for GeodesicExact::ArcDirect.
      **********************************************************************/
     void ArcDirect(real lat1, real lon1, real azi1, real a12,
-                   real& lat2, real& lon2, real& azi2) const throw() {
+                   real& lat2, real& lon2, real& azi2) const {
       real t;
       GenDirect(lat1, lon1, azi1, true, a12,
                 LATITUDE | LONGITUDE | AZIMUTH,
@@ -429,7 +430,7 @@ namespace GeographicLib {
      **********************************************************************/
     void ArcDirect(real lat1, real lon1, real azi1, real a12,
                    real& lat2, real& lon2, real& azi2, real& s12)
-      const throw() {
+      const {
       real t;
       GenDirect(lat1, lon1, azi1, true, a12,
                 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE,
@@ -441,7 +442,7 @@ namespace GeographicLib {
      **********************************************************************/
     void ArcDirect(real lat1, real lon1, real azi1, real a12,
                    real& lat2, real& lon2, real& azi2,
-                   real& s12, real& m12) const throw() {
+                   real& s12, real& m12) const {
       real t;
       GenDirect(lat1, lon1, azi1, true, a12,
                 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
@@ -454,7 +455,7 @@ namespace GeographicLib {
      **********************************************************************/
     void ArcDirect(real lat1, real lon1, real azi1, real a12,
                    real& lat2, real& lon2, real& azi2, real& s12,
-                   real& M12, real& M21) const throw() {
+                   real& M12, real& M21) const {
       real t;
       GenDirect(lat1, lon1, azi1, true, a12,
                 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
@@ -467,7 +468,7 @@ namespace GeographicLib {
      **********************************************************************/
     void ArcDirect(real lat1, real lon1, real azi1, real a12,
                    real& lat2, real& lon2, real& azi2, real& s12,
-                   real& m12, real& M12, real& M21) const throw() {
+                   real& m12, real& M12, real& M21) const {
       real t;
       GenDirect(lat1, lon1, azi1, true, a12,
                 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
@@ -528,7 +529,7 @@ namespace GeographicLib {
                          bool arcmode, real s12_a12, unsigned outmask,
                          real& lat2, real& lon2, real& azi2,
                          real& s12, real& m12, real& M12, real& M21,
-                         real& S12) const throw();
+                         real& S12) const;
     ///@}
 
     /** \name Inverse geodesic problem.
@@ -567,7 +568,7 @@ namespace GeographicLib {
      **********************************************************************/
     Math::real Inverse(real lat1, real lon1, real lat2, real lon2,
                        real& s12, real& azi1, real& azi2, real& m12,
-                       real& M12, real& M21, real& S12) const throw() {
+                       real& M12, real& M21, real& S12) const {
       return GenInverse(lat1, lon1, lat2, lon2,
                         DISTANCE | AZIMUTH |
                         REDUCEDLENGTH | GEODESICSCALE | AREA,
@@ -578,7 +579,7 @@ namespace GeographicLib {
      * See the documentation for GeodesicExact::Inverse.
      **********************************************************************/
     Math::real Inverse(real lat1, real lon1, real lat2, real lon2,
-                       real& s12) const throw() {
+                       real& s12) const {
       real t;
       return GenInverse(lat1, lon1, lat2, lon2,
                         DISTANCE,
@@ -589,7 +590,7 @@ namespace GeographicLib {
      * See the documentation for GeodesicExact::Inverse.
      **********************************************************************/
     Math::real Inverse(real lat1, real lon1, real lat2, real lon2,
-                       real& azi1, real& azi2) const throw() {
+                       real& azi1, real& azi2) const {
       real t;
       return GenInverse(lat1, lon1, lat2, lon2,
                         AZIMUTH,
@@ -601,7 +602,7 @@ namespace GeographicLib {
      **********************************************************************/
     Math::real Inverse(real lat1, real lon1, real lat2, real lon2,
                        real& s12, real& azi1, real& azi2)
-      const throw() {
+      const {
       real t;
       return GenInverse(lat1, lon1, lat2, lon2,
                         DISTANCE | AZIMUTH,
@@ -613,7 +614,7 @@ namespace GeographicLib {
      **********************************************************************/
     Math::real Inverse(real lat1, real lon1, real lat2, real lon2,
                        real& s12, real& azi1, real& azi2, real& m12)
-      const throw() {
+      const {
       real t;
       return GenInverse(lat1, lon1, lat2, lon2,
                         DISTANCE | AZIMUTH | REDUCEDLENGTH,
@@ -625,7 +626,7 @@ namespace GeographicLib {
      **********************************************************************/
     Math::real Inverse(real lat1, real lon1, real lat2, real lon2,
                        real& s12, real& azi1, real& azi2,
-                       real& M12, real& M21) const throw() {
+                       real& M12, real& M21) const {
       real t;
       return GenInverse(lat1, lon1, lat2, lon2,
                         DISTANCE | AZIMUTH | GEODESICSCALE,
@@ -637,7 +638,7 @@ namespace GeographicLib {
      **********************************************************************/
     Math::real Inverse(real lat1, real lon1, real lat2, real lon2,
                        real& s12, real& azi1, real& azi2, real& m12,
-                       real& M12, real& M21) const throw() {
+                       real& M12, real& M21) const {
       real t;
       return GenInverse(lat1, lon1, lat2, lon2,
                         DISTANCE | AZIMUTH |
@@ -686,7 +687,7 @@ namespace GeographicLib {
                           unsigned outmask,
                           real& s12, real& azi1, real& azi2,
                           real& m12, real& M12, real& M21, real& S12)
-      const throw();
+      const;
     ///@}
 
     /** \name Interface to GeodesicLineExact.
@@ -732,7 +733,7 @@ namespace GeographicLib {
      * limit ε → 0+.
      **********************************************************************/
     GeodesicLineExact Line(real lat1, real lon1, real azi1, unsigned caps = ALL)
-      const throw();
+      const;
 
     ///@}
 
@@ -744,20 +745,20 @@ namespace GeographicLib {
      * @return \e a the equatorial radius of the ellipsoid (meters).  This is
      *   the value used in the constructor.
      **********************************************************************/
-    Math::real MajorRadius() const throw() { return _a; }
+    Math::real MajorRadius() const { return _a; }
 
     /**
      * @return \e f the  flattening of the ellipsoid.  This is the
      *   value used in the constructor.
      **********************************************************************/
-    Math::real Flattening() const throw() { return _f; }
+    Math::real Flattening() const { return _f; }
 
     /// \cond SKIP
     /**
      * <b>DEPRECATED</b>
      * @return \e r the inverse flattening of the ellipsoid.
      **********************************************************************/
-    Math::real InverseFlattening() const throw() { return 1/_f; }
+    Math::real InverseFlattening() const { return 1/_f; }
     /// \endcond
 
     /**
@@ -766,15 +767,15 @@ namespace GeographicLib {
      *   GeodesicExact::EllipsoidArea()/2 to the sum of \e S12 for each side of
      *   the polygon.
      **********************************************************************/
-    Math::real EllipsoidArea() const throw()
-    { return 4 * Math::pi<real>() * _c2; }
+    Math::real EllipsoidArea() const
+    { return 4 * Math::pi() * _c2; }
     ///@}
 
     /**
      * A global instantiation of GeodesicExact with the parameters for the WGS84
      * ellipsoid.
      **********************************************************************/
-    static const GeodesicExact WGS84;
+    static const GeodesicExact& WGS84();
 
   };
 
diff --git a/include/GeographicLib/GeodesicLine.hpp b/include/GeographicLib/GeodesicLine.hpp
index c901b30..2660893 100644
--- a/include/GeographicLib/GeodesicLine.hpp
+++ b/include/GeographicLib/GeodesicLine.hpp
@@ -66,6 +66,7 @@ namespace GeographicLib {
     static const int nC3_ = Geodesic::nC3_;
     static const int nC4_ = Geodesic::nC4_;
 
+    real tiny_;
     real _lat1, _lon1, _azi1;
     real _a, _f, _b, _c2, _f1, _salp0, _calp0, _k2,
       _salp1, _calp1, _ssig1, _csig1, _dn1, _stau1, _ctau1, _somg1, _comg1,
@@ -194,8 +195,7 @@ namespace GeographicLib {
      * the limit ε → 0+.
      **********************************************************************/
     GeodesicLine(const Geodesic& g, real lat1, real lon1, real azi1,
-                 unsigned caps = ALL)
-      throw();
+                 unsigned caps = ALL);
 
     /**
      * A default constructor.  If GeodesicLine::Position is called on the
@@ -203,7 +203,7 @@ namespace GeographicLib {
      * calculations).  The object can be set with a call to Geodesic::Line.
      * Use Init() to test whether object is still in this uninitialized state.
      **********************************************************************/
-    GeodesicLine() throw() : _caps(0U) {}
+    GeodesicLine() : _caps(0U) {}
     ///@}
 
     /** \name Position in terms of distance
@@ -252,7 +252,7 @@ namespace GeographicLib {
     Math::real Position(real s12,
                         real& lat2, real& lon2, real& azi2,
                         real& m12, real& M12, real& M21,
-                        real& S12) const throw() {
+                        real& S12) const {
       real t;
       return GenPosition(false, s12,
                          LATITUDE | LONGITUDE | AZIMUTH |
@@ -263,7 +263,7 @@ namespace GeographicLib {
     /**
      * See the documentation for GeodesicLine::Position.
      **********************************************************************/
-    Math::real Position(real s12, real& lat2, real& lon2) const throw() {
+    Math::real Position(real s12, real& lat2, real& lon2) const {
       real t;
       return GenPosition(false, s12,
                          LATITUDE | LONGITUDE,
@@ -274,7 +274,7 @@ namespace GeographicLib {
      * See the documentation for GeodesicLine::Position.
      **********************************************************************/
     Math::real Position(real s12, real& lat2, real& lon2,
-                        real& azi2) const throw() {
+                        real& azi2) const {
       real t;
       return GenPosition(false, s12,
                          LATITUDE | LONGITUDE | AZIMUTH,
@@ -285,7 +285,7 @@ namespace GeographicLib {
      * See the documentation for GeodesicLine::Position.
      **********************************************************************/
     Math::real Position(real s12, real& lat2, real& lon2,
-                        real& azi2, real& m12) const throw() {
+                        real& azi2, real& m12) const {
       real t;
       return GenPosition(false, s12,
                          LATITUDE | LONGITUDE |
@@ -298,7 +298,7 @@ namespace GeographicLib {
      **********************************************************************/
     Math::real Position(real s12, real& lat2, real& lon2,
                         real& azi2, real& M12, real& M21)
-      const throw() {
+      const {
       real t;
       return GenPosition(false, s12,
                          LATITUDE | LONGITUDE |
@@ -312,7 +312,7 @@ namespace GeographicLib {
     Math::real Position(real s12,
                         real& lat2, real& lon2, real& azi2,
                         real& m12, real& M12, real& M21)
-      const throw() {
+      const {
       real t;
       return GenPosition(false, s12,
                          LATITUDE | LONGITUDE | AZIMUTH |
@@ -365,7 +365,7 @@ namespace GeographicLib {
      **********************************************************************/
     void ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
                      real& s12, real& m12, real& M12, real& M21,
-                     real& S12) const throw() {
+                     real& S12) const {
       GenPosition(true, a12,
                   LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
                   REDUCEDLENGTH | GEODESICSCALE | AREA,
@@ -376,7 +376,7 @@ namespace GeographicLib {
      * See the documentation for GeodesicLine::ArcPosition.
      **********************************************************************/
     void ArcPosition(real a12, real& lat2, real& lon2)
-      const throw() {
+      const {
       real t;
       GenPosition(true, a12,
                   LATITUDE | LONGITUDE,
@@ -388,7 +388,7 @@ namespace GeographicLib {
      **********************************************************************/
     void ArcPosition(real a12,
                      real& lat2, real& lon2, real& azi2)
-      const throw() {
+      const {
       real t;
       GenPosition(true, a12,
                   LATITUDE | LONGITUDE | AZIMUTH,
@@ -399,7 +399,7 @@ namespace GeographicLib {
      * See the documentation for GeodesicLine::ArcPosition.
      **********************************************************************/
     void ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
-                     real& s12) const throw() {
+                     real& s12) const {
       real t;
       GenPosition(true, a12,
                   LATITUDE | LONGITUDE | AZIMUTH | DISTANCE,
@@ -410,7 +410,7 @@ namespace GeographicLib {
      * See the documentation for GeodesicLine::ArcPosition.
      **********************************************************************/
     void ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
-                     real& s12, real& m12) const throw() {
+                     real& s12, real& m12) const {
       real t;
       GenPosition(true, a12,
                   LATITUDE | LONGITUDE | AZIMUTH |
@@ -423,7 +423,7 @@ namespace GeographicLib {
      **********************************************************************/
     void ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
                      real& s12, real& M12, real& M21)
-      const throw() {
+      const {
       real t;
       GenPosition(true, a12,
                   LATITUDE | LONGITUDE | AZIMUTH |
@@ -436,7 +436,7 @@ namespace GeographicLib {
      **********************************************************************/
     void ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
                      real& s12, real& m12, real& M12, real& M21)
-      const throw() {
+      const {
       real t;
       GenPosition(true, a12,
                   LATITUDE | LONGITUDE | AZIMUTH |
@@ -503,7 +503,7 @@ namespace GeographicLib {
     Math::real GenPosition(bool arcmode, real s12_a12, unsigned outmask,
                            real& lat2, real& lon2, real& azi2,
                            real& s12, real& m12, real& M12, real& M21,
-                           real& S12) const throw();
+                           real& S12) const;
 
     ///@}
 
@@ -514,78 +514,80 @@ namespace GeographicLib {
     /**
      * @return true if the object has been initialized.
      **********************************************************************/
-    bool Init() const throw() { return _caps != 0U; }
+    bool Init() const { return _caps != 0U; }
 
     /**
      * @return \e lat1 the latitude of point 1 (degrees).
      **********************************************************************/
-    Math::real Latitude() const throw()
-    { return Init() ? _lat1 : Math::NaN<real>(); }
+    Math::real Latitude() const
+    { return Init() ? _lat1 : Math::NaN(); }
 
     /**
      * @return \e lon1 the longitude of point 1 (degrees).
      **********************************************************************/
-    Math::real Longitude() const throw()
-    { return Init() ? _lon1 : Math::NaN<real>(); }
+    Math::real Longitude() const
+    { return Init() ? _lon1 : Math::NaN(); }
 
     /**
      * @return \e azi1 the azimuth (degrees) of the geodesic line at point 1.
      **********************************************************************/
-    Math::real Azimuth() const throw()
-    { return Init() ? _azi1 : Math::NaN<real>(); }
+    Math::real Azimuth() const
+    { return Init() ? _azi1 : Math::NaN(); }
 
     /**
      * @return \e azi0 the azimuth (degrees) of the geodesic line as it crosses
      *   the equator in a northward direction.
      **********************************************************************/
-    Math::real EquatorialAzimuth() const throw() {
+    Math::real EquatorialAzimuth() const {
+      using std::atan2;
       return Init() ?
-        atan2(_salp0, _calp0) / Math::degree<real>() : Math::NaN<real>();
+        atan2(_salp0, _calp0) / Math::degree() : Math::NaN();
     }
 
     /**
      * @return \e a1 the arc length (degrees) between the northward equatorial
      *   crossing and point 1.
      **********************************************************************/
-    Math::real EquatorialArc() const throw() {
+    Math::real EquatorialArc() const {
+      using std::atan2;
       return Init() ?
-        atan2(_ssig1, _csig1) / Math::degree<real>() : Math::NaN<real>();
+        atan2(_ssig1, _csig1) / Math::degree() : Math::NaN();
     }
 
     /**
      * @return \e a the equatorial radius of the ellipsoid (meters).  This is
      *   the value inherited from the Geodesic object used in the constructor.
      **********************************************************************/
-    Math::real MajorRadius() const throw()
-    { return Init() ? _a : Math::NaN<real>(); }
+    Math::real MajorRadius() const
+    { return Init() ? _a : Math::NaN(); }
 
     /**
      * @return \e f the flattening of the ellipsoid.  This is the value
      *   inherited from the Geodesic object used in the constructor.
      **********************************************************************/
-    Math::real Flattening() const throw()
-    { return Init() ? _f : Math::NaN<real>(); }
+    Math::real Flattening() const
+    { return Init() ? _f : Math::NaN(); }
 
     /// \cond SKIP
     /**
      * <b>DEPRECATED</b>
      * @return \e r the inverse flattening of the ellipsoid.
      **********************************************************************/
-    Math::real InverseFlattening() const throw()
-    { return Init() ? 1/_f : Math::NaN<real>(); }
+    Math::real InverseFlattening() const
+    { return Init() ? 1/_f : Math::NaN(); }
     /// \endcond
 
     /**
      * @return \e caps the computational capabilities that this object was
      *   constructed with.  LATITUDE and AZIMUTH are always included.
      **********************************************************************/
-    unsigned Capabilities() const throw() { return _caps; }
+    unsigned Capabilities() const { return _caps; }
 
     /**
      * @param[in] testcaps a set of bitor'ed GeodesicLine::mask values.
      * @return true if the GeodesicLine object has all these capabilities.
      **********************************************************************/
-    bool Capabilities(unsigned testcaps) const throw() {
+    bool Capabilities(unsigned testcaps) const {
       testcaps &= OUT_ALL;
       return (_caps & testcaps) == testcaps;
     }
diff --git a/include/GeographicLib/GeodesicLineExact.hpp b/include/GeographicLib/GeodesicLineExact.hpp
index a2e19f8..364b6c1 100644
--- a/include/GeographicLib/GeodesicLineExact.hpp
+++ b/include/GeographicLib/GeodesicLineExact.hpp
@@ -38,6 +38,7 @@ namespace GeographicLib {
     friend class GeodesicExact;
     static const int nC4_ = GeodesicExact::nC4_;
 
+    real tiny_;
     real _lat1, _lon1, _azi1;
     real _a, _f, _b, _c2, _f1, _e2, _salp0, _calp0, _k2,
       _salp1, _calp1, _ssig1, _csig1, _dn1, _stau1, _ctau1,
@@ -167,8 +168,7 @@ namespace GeographicLib {
      * the limit ε → 0+.
      **********************************************************************/
     GeodesicLineExact(const GeodesicExact& g, real lat1, real lon1, real azi1,
-                      unsigned caps = ALL)
-      throw();
+                      unsigned caps = ALL);
 
     /**
      * A default constructor.  If GeodesicLineExact::Position is called on the
@@ -177,7 +177,7 @@ namespace GeographicLib {
      * GeodesicExact::Line.  Use Init() to test whether object is still in this
      * uninitialized state.
      **********************************************************************/
-    GeodesicLineExact() throw() : _caps(0U) {}
+    GeodesicLineExact() : _caps(0U) {}
     ///@}
 
     /** \name Position in terms of distance
@@ -226,7 +226,7 @@ namespace GeographicLib {
     Math::real Position(real s12,
                         real& lat2, real& lon2, real& azi2,
                         real& m12, real& M12, real& M21,
-                        real& S12) const throw() {
+                        real& S12) const {
       real t;
       return GenPosition(false, s12,
                          LATITUDE | LONGITUDE | AZIMUTH |
@@ -237,7 +237,7 @@ namespace GeographicLib {
     /**
      * See the documentation for GeodesicLineExact::Position.
      **********************************************************************/
-    Math::real Position(real s12, real& lat2, real& lon2) const throw() {
+    Math::real Position(real s12, real& lat2, real& lon2) const {
       real t;
       return GenPosition(false, s12,
                          LATITUDE | LONGITUDE,
@@ -248,7 +248,7 @@ namespace GeographicLib {
      * See the documentation for GeodesicLineExact::Position.
      **********************************************************************/
     Math::real Position(real s12, real& lat2, real& lon2,
-                        real& azi2) const throw() {
+                        real& azi2) const {
       real t;
       return GenPosition(false, s12,
                          LATITUDE | LONGITUDE | AZIMUTH,
@@ -259,7 +259,7 @@ namespace GeographicLib {
      * See the documentation for GeodesicLineExact::Position.
      **********************************************************************/
     Math::real Position(real s12, real& lat2, real& lon2,
-                        real& azi2, real& m12) const throw() {
+                        real& azi2, real& m12) const {
       real t;
       return GenPosition(false, s12,
                          LATITUDE | LONGITUDE |
@@ -272,7 +272,7 @@ namespace GeographicLib {
      **********************************************************************/
     Math::real Position(real s12, real& lat2, real& lon2,
                         real& azi2, real& M12, real& M21)
-      const throw() {
+      const {
       real t;
       return GenPosition(false, s12,
                          LATITUDE | LONGITUDE |
@@ -286,7 +286,7 @@ namespace GeographicLib {
     Math::real Position(real s12,
                         real& lat2, real& lon2, real& azi2,
                         real& m12, real& M12, real& M21)
-      const throw() {
+      const {
       real t;
       return GenPosition(false, s12,
                          LATITUDE | LONGITUDE | AZIMUTH |
@@ -339,7 +339,7 @@ namespace GeographicLib {
      **********************************************************************/
     void ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
                      real& s12, real& m12, real& M12, real& M21,
-                     real& S12) const throw() {
+                     real& S12) const {
       GenPosition(true, a12,
                   LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
                   REDUCEDLENGTH | GEODESICSCALE | AREA,
@@ -350,7 +350,7 @@ namespace GeographicLib {
      * See the documentation for GeodesicLineExact::ArcPosition.
      **********************************************************************/
     void ArcPosition(real a12, real& lat2, real& lon2)
-      const throw() {
+      const {
       real t;
       GenPosition(true, a12,
                   LATITUDE | LONGITUDE,
@@ -362,7 +362,7 @@ namespace GeographicLib {
      **********************************************************************/
     void ArcPosition(real a12,
                      real& lat2, real& lon2, real& azi2)
-      const throw() {
+      const {
       real t;
       GenPosition(true, a12,
                   LATITUDE | LONGITUDE | AZIMUTH,
@@ -373,7 +373,7 @@ namespace GeographicLib {
      * See the documentation for GeodesicLineExact::ArcPosition.
      **********************************************************************/
     void ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
-                     real& s12) const throw() {
+                     real& s12) const {
       real t;
       GenPosition(true, a12,
                   LATITUDE | LONGITUDE | AZIMUTH | DISTANCE,
@@ -384,7 +384,7 @@ namespace GeographicLib {
      * See the documentation for GeodesicLineExact::ArcPosition.
      **********************************************************************/
     void ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
-                     real& s12, real& m12) const throw() {
+                     real& s12, real& m12) const {
       real t;
       GenPosition(true, a12,
                   LATITUDE | LONGITUDE | AZIMUTH |
@@ -397,7 +397,7 @@ namespace GeographicLib {
      **********************************************************************/
     void ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
                      real& s12, real& M12, real& M21)
-      const throw() {
+      const {
       real t;
       GenPosition(true, a12,
                   LATITUDE | LONGITUDE | AZIMUTH |
@@ -410,7 +410,7 @@ namespace GeographicLib {
      **********************************************************************/
     void ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
                      real& s12, real& m12, real& M12, real& M21)
-      const throw() {
+      const {
       real t;
       GenPosition(true, a12,
                   LATITUDE | LONGITUDE | AZIMUTH |
@@ -477,7 +477,7 @@ namespace GeographicLib {
     Math::real GenPosition(bool arcmode, real s12_a12, unsigned outmask,
                            real& lat2, real& lon2, real& azi2,
                            real& s12, real& m12, real& M12, real& M21,
-                           real& S12) const throw();
+                           real& S12) const;
 
     ///@}
 
@@ -488,42 +488,44 @@ namespace GeographicLib {
     /**
      * @return true if the object has been initialized.
      **********************************************************************/
-    bool Init() const throw() { return _caps != 0U; }
+    bool Init() const { return _caps != 0U; }
 
     /**
      * @return \e lat1 the latitude of point 1 (degrees).
      **********************************************************************/
-    Math::real Latitude() const throw()
-    { return Init() ? _lat1 : Math::NaN<real>(); }
+    Math::real Latitude() const
+    { return Init() ? _lat1 : Math::NaN(); }
 
     /**
      * @return \e lon1 the longitude of point 1 (degrees).
      **********************************************************************/
-    Math::real Longitude() const throw()
-    { return Init() ? _lon1 : Math::NaN<real>(); }
+    Math::real Longitude() const
+    { return Init() ? _lon1 : Math::NaN(); }
 
     /**
      * @return \e azi1 the azimuth (degrees) of the geodesic line at point 1.
      **********************************************************************/
-    Math::real Azimuth() const throw()
-    { return Init() ? _azi1 : Math::NaN<real>(); }
+    Math::real Azimuth() const
+    { return Init() ? _azi1 : Math::NaN(); }
 
     /**
      * @return \e azi0 the azimuth (degrees) of the geodesic line as it crosses
      * the equator in a northward direction.
      **********************************************************************/
-    Math::real EquatorialAzimuth() const throw() {
+    Math::real EquatorialAzimuth() const {
+      using std::atan2;
       return Init() ?
-        atan2(_salp0, _calp0) / Math::degree<real>() : Math::NaN<real>();
+        atan2(_salp0, _calp0) / Math::degree() : Math::NaN();
     }
 
     /**
      * @return \e a1 the arc length (degrees) between the northward equatorial
      * crossing and point 1.
      **********************************************************************/
-    Math::real EquatorialArc() const throw() {
+    Math::real EquatorialArc() const {
+      using std::atan2;
       return Init() ?
-        atan2(_ssig1, _csig1) / Math::degree<real>() : Math::NaN<real>();
+        atan2(_ssig1, _csig1) / Math::degree() : Math::NaN();
     }
 
     /**
@@ -531,36 +533,36 @@ namespace GeographicLib {
      *   the value inherited from the GeodesicExact object used in the
      *   constructor.
      **********************************************************************/
-    Math::real MajorRadius() const throw()
-    { return Init() ? _a : Math::NaN<real>(); }
+    Math::real MajorRadius() const
+    { return Init() ? _a : Math::NaN(); }
 
     /**
      * @return \e f the flattening of the ellipsoid.  This is the value
      *   inherited from the GeodesicExact object used in the constructor.
      **********************************************************************/
-    Math::real Flattening() const throw()
-    { return Init() ? _f : Math::NaN<real>(); }
+    Math::real Flattening() const
+    { return Init() ? _f : Math::NaN(); }
 
     /// \cond SKIP
     /**
      * <b>DEPRECATED</b>
      * @return \e r the inverse flattening of the ellipsoid.
      **********************************************************************/
-    Math::real InverseFlattening() const throw()
-    { return Init() ? 1/_f : Math::NaN<real>(); }
+    Math::real InverseFlattening() const
+    { return Init() ? 1/_f : Math::NaN(); }
     /// \endcond
 
     /**
      * @return \e caps the computational capabilities that this object was
      *   constructed with.  LATITUDE and AZIMUTH are always included.
      **********************************************************************/
-    unsigned Capabilities() const throw() { return _caps; }
+    unsigned Capabilities() const { return _caps; }
 
     /**
      * @param[in] testcaps a set of bitor'ed GeodesicLineExact::mask values.
      * @return true if the GeodesicLineExact object has all these capabilities.
      **********************************************************************/
-    bool Capabilities(unsigned testcaps) const throw() {
+    bool Capabilities(unsigned testcaps) const {
       testcaps &= OUT_ALL;
       return (_caps & testcaps) == testcaps;
     }
diff --git a/include/GeographicLib/Geohash.hpp b/include/GeographicLib/Geohash.hpp
index 0533afc..f7a7d38 100644
--- a/include/GeographicLib/Geohash.hpp
+++ b/include/GeographicLib/Geohash.hpp
@@ -42,9 +42,19 @@ namespace GeographicLib {
     static const int maxlen_ = 18;
     static const unsigned long long mask_ = 1ULL << 45;
     static const int decprec_[];
-    static const real loneps_;
+    static inline real shift() {
+      using std::pow; static const real shift = pow(real(2), 45);
+      return shift;
+    }
+    static inline real loneps() {
+      static const real loneps = 180 / shift();
+      return loneps;
+    }
+    static inline real lateps() {
+      static const real lateps = 90 / shift();
+      return lateps;
+    }
     static const real lateps_;
-    static const real shift_;
     static const std::string lcdigits_;
     static const std::string ucdigits_;
     Geohash();                     // Disable constructor
@@ -98,7 +108,7 @@ namespace GeographicLib {
      *
      * Internally, \e len is first put in the range [0, 18].
      **********************************************************************/
-    static Math::real LatitudeResolution(int len) throw() {
+    static Math::real LatitudeResolution(int len) {
       len = (std::max)(0, (std::min)(int(maxlen_), len));
       return 180 * std::pow(0.5, 5 * len / 2);
     }
@@ -111,7 +121,7 @@ namespace GeographicLib {
      *
      * Internally, \e len is first put in the range [0, 18].
      **********************************************************************/
-    static Math::real LongitudeResolution(int len) throw() {
+    static Math::real LongitudeResolution(int len) {
       len = (std::max)(0, (std::min)(int(maxlen_), len));
       return 360 * std::pow(0.5, 5 * len - 5 * len / 2);
     }
@@ -125,8 +135,9 @@ namespace GeographicLib {
      *
      * The returned length is in the range [0, 18].
      **********************************************************************/
-    static int GeohashLength(real res) throw() {
-      res = std::abs(res);
+    static int GeohashLength(real res) {
+      using std::abs;
+      res = abs(res);
       for (int len = 0; len < maxlen_; ++len)
         if (LongitudeResolution(len) <= res)
           return len;
@@ -142,9 +153,10 @@ namespace GeographicLib {
      *
      * The returned length is in the range [0, 18].
      **********************************************************************/
-    static int GeohashLength(real latres, real lonres) throw() {
-      latres = std::abs(latres);
-      lonres = std::abs(lonres);
+    static int GeohashLength(real latres, real lonres) {
+      using std::abs;
+      latres = abs(latres);
+      lonres = abs(lonres);
       for (int len = 0; len < maxlen_; ++len)
         if (LatitudeResolution(len) <= latres &&
             LongitudeResolution(len) <= lonres)
@@ -163,9 +175,9 @@ namespace GeographicLib {
      * Internally, \e len is first put in the range [0, 18].  The returned
      * decimal precision is in the range [−2, 12].
      **********************************************************************/
-    static int DecimalPrecision(int len) throw() {
-      return -int(std::floor(std::log(LatitudeResolution(len))/
-                             std::log(Math::real(10))));
+    static int DecimalPrecision(int len) {
+      using std::floor; using std::log;
+      return -int(floor(log(LatitudeResolution(len))/log(Math::real(10))));
     }
 
   };
diff --git a/include/GeographicLib/Geoid.hpp b/include/GeographicLib/Geoid.hpp
index 0a45372..9bd4727 100644
--- a/include/GeographicLib/Geoid.hpp
+++ b/include/GeographicLib/Geoid.hpp
@@ -20,7 +20,7 @@
 #  pragma warning (disable: 4251 4127)
 #endif
 
-#if !defined(PGM_PIXEL_WIDTH)
+#if !defined(GEOGRAPHICLIB_GEOID_PGM_PIXEL_WIDTH)
 /**
  * The size of the pixel data in the pgm data files for the geoids.  2 is the
  * standard size corresponding to a maxval 2<sup>16</sup>−1.  Setting it
@@ -28,7 +28,7 @@
  * the data files from .pgm to .pgm4.  Note that the format of these pgm4 files
  * is a non-standard extension of the pgm format.
  **********************************************************************/
-#  define PGM_PIXEL_WIDTH 2
+#  define GEOGRAPHICLIB_GEOID_PGM_PIXEL_WIDTH 2
 #endif
 
 namespace GeographicLib {
@@ -83,7 +83,7 @@ namespace GeographicLib {
   class GEOGRAPHICLIB_EXPORT Geoid {
   private:
     typedef Math::real real;
-#if PGM_PIXEL_WIDTH != 4
+#if GEOGRAPHICLIB_GEOID_PGM_PIXEL_WIDTH != 4
     typedef unsigned short pixel_t;
     static const unsigned pixel_size_ = 2;
     static const unsigned pixel_max_ = 0xffffu;
@@ -94,12 +94,12 @@ namespace GeographicLib {
 #endif
     static const unsigned stencilsize_ = 12;
     static const unsigned nterms_ = ((3 + 1) * (3 + 2))/2; // for a cubic fit
-    static const real c0_;
-    static const real c0n_;
-    static const real c0s_;
-    static const real c3_[stencilsize_ * nterms_];
-    static const real c3n_[stencilsize_ * nterms_];
-    static const real c3s_[stencilsize_ * nterms_];
+    static const int c0_;
+    static const int c0n_;
+    static const int c0s_;
+    static const int c3_[stencilsize_ * nterms_];
+    static const int c3n_[stencilsize_ * nterms_];
+    static const int c3s_[stencilsize_ * nterms_];
 
     std::string _name, _dir, _filename;
     const bool _cubic;
@@ -266,7 +266,7 @@ namespace GeographicLib {
      * Clear the cache.  This never throws an error.  (This does nothing with a
      * thread safe Geoid.)
      **********************************************************************/
-    void CacheClear() const throw();
+    void CacheClear() const;
 
     ///@}
 
@@ -343,28 +343,28 @@ namespace GeographicLib {
      * @return geoid description, if available, in the data file; if
      *   absent, return "NONE".
      **********************************************************************/
-    const std::string& Description() const throw() { return _description; }
+    const std::string& Description() const { return _description; }
 
     /**
      * @return date of the data file; if absent, return "UNKNOWN".
      **********************************************************************/
-    const std::string& DateTime() const throw() { return _datetime; }
+    const std::string& DateTime() const { return _datetime; }
 
     /**
      * @return full file name used to load the geoid data.
      **********************************************************************/
-    const std::string& GeoidFile() const throw() { return _filename; }
+    const std::string& GeoidFile() const { return _filename; }
 
     /**
      * @return "name" used to load the geoid data (from the first argument of
      *   the constructor).
      **********************************************************************/
-    const std::string& GeoidName() const throw() { return _name; }
+    const std::string& GeoidName() const { return _name; }
 
     /**
      * @return directory used to load the geoid data.
      **********************************************************************/
-    const std::string& GeoidDirectory() const throw() { return _dir; }
+    const std::string& GeoidDirectory() const { return _dir; }
 
     /**
      * @return interpolation method ("cubic" or "bilinear").
@@ -379,7 +379,7 @@ namespace GeographicLib {
      * This relies on the value being stored in the data file.  If the value is
      * absent, return −1.
      **********************************************************************/
-    Math::real MaxError() const throw() { return _maxerror; }
+    Math::real MaxError() const { return _maxerror; }
 
     /**
      * @return estimate of the RMS interpolation and quantization error
@@ -388,7 +388,7 @@ namespace GeographicLib {
      * This relies on the value being stored in the data file.  If the value is
      * absent, return −1.
      **********************************************************************/
-    Math::real RMSError() const throw() { return _rmserror; }
+    Math::real RMSError() const { return _rmserror; }
 
     /**
      * @return offset (meters).
@@ -396,7 +396,7 @@ namespace GeographicLib {
      * This in used in converting from the pixel values in the data file to
      * geoid heights.
      **********************************************************************/
-    Math::real Offset() const throw() { return _offset; }
+    Math::real Offset() const { return _offset; }
 
     /**
      * @return scale (meters).
@@ -404,22 +404,22 @@ namespace GeographicLib {
      * This in used in converting from the pixel values in the data file to
      * geoid heights.
      **********************************************************************/
-    Math::real Scale() const throw() { return _scale; }
+    Math::real Scale() const { return _scale; }
 
     /**
      * @return true if the object is constructed to be thread safe.
      **********************************************************************/
-    bool ThreadSafe() const throw() { return _threadsafe; }
+    bool ThreadSafe() const { return _threadsafe; }
 
     /**
      * @return true if a data cache is active.
      **********************************************************************/
-    bool Cache() const throw() { return _cache; }
+    bool Cache() const { return _cache; }
 
     /**
      * @return west edge of the cached area; the cache includes this edge.
      **********************************************************************/
-    Math::real CacheWest() const throw() {
+    Math::real CacheWest() const {
       return _cache ? ((_xoffset + (_xsize == _width ? 0 : _cubic)
                         + _width/2) % _width - _width/2) / _rlonres :
         0;
@@ -428,7 +428,7 @@ namespace GeographicLib {
     /**
      * @return east edge of the cached area; the cache excludes this edge.
      **********************************************************************/
-    Math::real CacheEast() const throw() {
+    Math::real CacheEast() const {
       return  _cache ?
         CacheWest() +
         (_xsize - (_xsize == _width ? 0 : 1 + 2 * _cubic)) / _rlonres :
@@ -438,7 +438,7 @@ namespace GeographicLib {
     /**
      * @return north edge of the cached area; the cache includes this edge.
      **********************************************************************/
-    Math::real CacheNorth() const throw() {
+    Math::real CacheNorth() const {
       return _cache ? 90 - (_yoffset + _cubic) / _rlatres : 0;
     }
 
@@ -446,7 +446,7 @@ namespace GeographicLib {
      * @return south edge of the cached area; the cache excludes this edge
      *   unless it's the south pole.
      **********************************************************************/
-    Math::real CacheSouth() const throw() {
+    Math::real CacheSouth() const {
       return _cache ? 90 - ( _yoffset + _ysize - 1 - _cubic) / _rlatres : 0;
     }
 
@@ -456,8 +456,8 @@ namespace GeographicLib {
      * (The WGS84 value is returned because the supported geoid models are all
      * based on this ellipsoid.)
      **********************************************************************/
-    Math::real MajorRadius() const throw()
-    { return Constants::WGS84_a<real>(); }
+    Math::real MajorRadius() const
+    { return Constants::WGS84_a(); }
 
     /**
      * @return \e f the flattening of the WGS84 ellipsoid.
@@ -465,7 +465,7 @@ namespace GeographicLib {
      * (The WGS84 value is returned because the supported geoid models are all
      * based on this ellipsoid.)
      **********************************************************************/
-    Math::real Flattening() const throw() { return Constants::WGS84_f<real>(); }
+    Math::real Flattening() const { return Constants::WGS84_f(); }
     ///@}
 
     /// \cond SKIP
@@ -473,29 +473,28 @@ namespace GeographicLib {
      * <b>DEPRECATED</b>
      * @return \e r the inverse flattening of the WGS84 ellipsoid.
      **********************************************************************/
-    Math::real InverseFlattening() const throw()
-    { return 1/Constants::WGS84_f<real>(); }
+    Math::real InverseFlattening() const
+    { return 1/Constants::WGS84_f(); }
     /// \endcond
 
     /**
      * @return the default path for geoid data files.
      *
-     * This is the value of the environment variable GEOID_PATH, if set;
-     * otherwise, it is $GEOGRAPHICLIB_DATA/geoids if the environment variable
-     * GEOGRAPHICLIB_DATA is set; otherwise, it is a compile-time default
-     * (/usr/local/share/GeographicLib/geoids on non-Windows systems and
-     * C:/Documents and Settings/All Users/Application
-     * Data/GeographicLib/geoids on Windows systems).
+     * This is the value of the environment variable GEOGRAPHICLIB_GEOID_PATH,
+     * if set; otherwise, it is $GEOGRAPHICLIB_DATA/geoids if the environment
+     * variable GEOGRAPHICLIB_DATA is set; otherwise, it is a compile-time
+     * default (/usr/local/share/GeographicLib/geoids on non-Windows systems
+     * and C:/ProgramData/GeographicLib/geoids on Windows systems).
      **********************************************************************/
     static std::string DefaultGeoidPath();
 
     /**
      * @return the default name for the geoid.
      *
-     * This is the value of the environment variable GEOID_NAME, if set,
-     * otherwise, it is "egm96-5".  The Geoid class does not use this function;
-     * it is just provided as a convenience for a calling program when
-     * constructing a Geoid object.
+     * This is the value of the environment variable GEOGRAPHICLIB_GEOID_NAME,
+     * if set; otherwise, it is "egm96-5".  The Geoid class does not use this
+     * function; it is just provided as a convenience for a calling program
+     * when constructing a Geoid object.
      **********************************************************************/
     static std::string DefaultGeoidName();
 
diff --git a/include/GeographicLib/Gnomonic.hpp b/include/GeographicLib/Gnomonic.hpp
index 4b41d4a..86e5a93 100644
--- a/include/GeographicLib/Gnomonic.hpp
+++ b/include/GeographicLib/Gnomonic.hpp
@@ -66,7 +66,7 @@ namespace GeographicLib {
    * (<i>r</i>/2<i>a</i>)<sup>3</sup> \e r.
    *
    * The conversions all take place using a Geodesic object (by default
-   * Geodesic::WGS84).  For more information on geodesics see \ref geodesic.
+   * Geodesic::WGS84()).  For more information on geodesics see \ref geodesic.
    *
    * <b>CAUTION:</b> The definition of this projection for a sphere is
    * standard.  However, there is no standard for how it should be extended to
@@ -101,10 +101,9 @@ namespace GeographicLib {
   class GEOGRAPHICLIB_EXPORT Gnomonic {
   private:
     typedef Math::real real;
+    real eps0_, eps_;
     Geodesic _earth;
     real _a, _f;
-    static const real eps0_;
-    static const real eps_;
     static const int numit_ = 10;
   public:
 
@@ -114,12 +113,7 @@ namespace GeographicLib {
      * @param[in] earth the Geodesic object to use for geodesic calculations.
      *   By default this uses the WGS84 ellipsoid.
      **********************************************************************/
-    explicit Gnomonic(const Geodesic& earth = Geodesic::WGS84)
-      throw()
-      : _earth(earth)
-      , _a(_earth.MajorRadius())
-      , _f(_earth.Flattening())
-    {}
+    explicit Gnomonic(const Geodesic& earth = Geodesic::WGS84());
 
     /**
      * Forward projection, from geographic to gnomonic.
@@ -144,7 +138,7 @@ namespace GeographicLib {
      * (to within roundoff) provided the point in not over the horizon.
      **********************************************************************/
     void Forward(real lat0, real lon0, real lat, real lon,
-                 real& x, real& y, real& azi, real& rk) const throw();
+                 real& x, real& y, real& azi, real& rk) const;
 
     /**
      * Reverse projection, from gnomonic to geographic.
@@ -162,7 +156,7 @@ namespace GeographicLib {
      * lon0 should be in the range [−540°, 540°).  \e lat
      * will be in the range [−90°, 90°] and \e lon will
      * be in the range [−180°, 180°).  The scale of the
-     * projection is 1/\e rk<sup>2</sup> in the "radial" direction, \e azi
+     * projection is 1/<i>rk</i><sup>2</sup> in the "radial" direction, \e azi
      * clockwise from true north, and is 1/\e rk in the direction perpendicular
      * to this.  Even though all inputs should return a valid \e lat and \e
      * lon, it's possible that the procedure fails to converge for very large
@@ -171,13 +165,13 @@ namespace GeographicLib {
      * the original (\e x, \e y) (to roundoff).
      **********************************************************************/
     void Reverse(real lat0, real lon0, real x, real y,
-                 real& lat, real& lon, real& azi, real& rk) const throw();
+                 real& lat, real& lon, real& azi, real& rk) const;
 
     /**
      * Gnomonic::Forward without returning the azimuth and scale.
      **********************************************************************/
     void Forward(real lat0, real lon0, real lat, real lon,
-                 real& x, real& y) const throw() {
+                 real& x, real& y) const {
       real azi, rk;
       Forward(lat0, lon0, lat, lon, x, y, azi, rk);
     }
@@ -186,7 +180,7 @@ namespace GeographicLib {
      * Gnomonic::Reverse without returning the azimuth and scale.
      **********************************************************************/
     void Reverse(real lat0, real lon0, real x, real y,
-                 real& lat, real& lon) const throw() {
+                 real& lat, real& lon) const {
       real azi, rk;
       Reverse(lat0, lon0, x, y, lat, lon, azi, rk);
     }
@@ -198,13 +192,13 @@ namespace GeographicLib {
      * @return \e a the equatorial radius of the ellipsoid (meters).  This is
      *   the value inherited from the Geodesic object used in the constructor.
      **********************************************************************/
-    Math::real MajorRadius() const throw() { return _earth.MajorRadius(); }
+    Math::real MajorRadius() const { return _earth.MajorRadius(); }
 
     /**
      * @return \e f the flattening of the ellipsoid.  This is the value
      *   inherited from the Geodesic object used in the constructor.
      **********************************************************************/
-    Math::real Flattening() const throw() { return _earth.Flattening(); }
+    Math::real Flattening() const { return _earth.Flattening(); }
     ///@}
 
     /// \cond SKIP
@@ -212,7 +206,7 @@ namespace GeographicLib {
      * <b>DEPRECATED</b>
      * @return \e r the inverse flattening of the ellipsoid.
      **********************************************************************/
-    Math::real InverseFlattening() const throw()
+    Math::real InverseFlattening() const
     { return _earth.InverseFlattening(); }
     /// \endcond
   };
diff --git a/include/GeographicLib/GravityCircle.hpp b/include/GeographicLib/GravityCircle.hpp
index d11f98b..731b700 100644
--- a/include/GeographicLib/GravityCircle.hpp
+++ b/include/GeographicLib/GravityCircle.hpp
@@ -90,12 +90,12 @@ namespace GeographicLib {
 
     friend class GravityModel; // GravityModel calls the private constructor
     Math::real W(real clam, real slam,
-                 real& gX, real& gY, real& gZ) const throw();
+                 real& gX, real& gY, real& gZ) const;
     Math::real V(real clam, real slam,
-                 real& gX, real& gY, real& gZ) const throw();
+                 real& gX, real& gY, real& gZ) const;
     Math::real InternalT(real clam, real slam,
                          real& deltaX, real& deltaY, real& deltaZ,
-                         bool gradp, bool correct) const throw();
+                         bool gradp, bool correct) const;
   public:
     /**
      * A default constructor for the normal gravity.  This sets up an
@@ -121,7 +121,7 @@ namespace GeographicLib {
      *
      * The function includes the effects of the earth's rotation.
      **********************************************************************/
-    Math::real Gravity(real lon, real& gx, real& gy, real& gz) const throw();
+    Math::real Gravity(real lon, real& gx, real& gy, real& gz) const;
 
     /**
      * Evaluate the gravity disturbance vector.
@@ -136,7 +136,7 @@ namespace GeographicLib {
      * @return \e T the corresponding disturbing potential.
      **********************************************************************/
     Math::real Disturbance(real lon, real& deltax, real& deltay, real& deltaz)
-      const throw();
+      const;
 
     /**
      * Evaluate the geoid height.
@@ -149,7 +149,7 @@ namespace GeographicLib {
      * results of the NGA codes are reproduced accurately.  Details are given
      * in \ref gravitygeoid.
      **********************************************************************/
-    Math::real GeoidHeight(real lon) const throw();
+    Math::real GeoidHeight(real lon) const;
 
     /**
      * Evaluate the components of the gravity anomaly vector using the
@@ -167,7 +167,7 @@ namespace GeographicLib {
      * approximations used here.  Details are given in \ref gravitygeoid.
      **********************************************************************/
     void SphericalAnomaly(real lon, real& Dg01, real& xi, real& eta)
-      const throw();
+      const;
 
     /**
      * Evaluate the components of the acceleration due to gravity and the
@@ -183,7 +183,7 @@ namespace GeographicLib {
      * @return \e W = \e V + Φ the sum of the gravitational and
      *   centrifugal potentials (m<sup>2</sup> s<sup>−2</sup>).
      **********************************************************************/
-    Math::real W(real lon, real& gX, real& gY, real& gZ) const throw() {
+    Math::real W(real lon, real& gX, real& gY, real& gZ) const {
       real clam, slam;
       CircularEngine::cossin(lon, clam, slam);
       return W(clam, slam, gX, gY, gZ);
@@ -203,7 +203,7 @@ namespace GeographicLib {
      * @return \e V = \e W - Φ the gravitational potential
      *   (m<sup>2</sup> s<sup>−2</sup>).
      **********************************************************************/
-    Math::real V(real lon, real& GX, real& GY, real& GZ) const throw() {
+    Math::real V(real lon, real& GX, real& GY, real& GZ) const {
       real clam, slam;
       CircularEngine::cossin(lon, clam, slam);
       return V(clam, slam, GX, GY, GZ);
@@ -224,7 +224,7 @@ namespace GeographicLib {
      *   anomalous potential) (m<sup>2</sup> s<sup>−2</sup>).
      **********************************************************************/
     Math::real T(real lon, real& deltaX, real& deltaY, real& deltaZ)
-      const throw() {
+      const {
       real clam, slam;
       CircularEngine::cossin(lon, clam, slam);
       return InternalT(clam, slam, deltaX, deltaY, deltaZ, true, true);
@@ -237,7 +237,7 @@ namespace GeographicLib {
      * @return \e T = \e W - \e U the disturbing potential (also called the
      *   anomalous potential) (m<sup>2</sup> s<sup>−2</sup>).
      **********************************************************************/
-    Math::real T(real lon) const throw() {
+    Math::real T(real lon) const {
       real clam, slam, dummy;
       CircularEngine::cossin(lon, clam, slam);
       return InternalT(clam, slam, dummy, dummy, dummy, false, true);
@@ -251,46 +251,46 @@ namespace GeographicLib {
     /**
      * @return true if the object has been initialized.
      **********************************************************************/
-    bool Init() const throw() { return _a > 0; }
+    bool Init() const { return _a > 0; }
 
     /**
      * @return \e a the equatorial radius of the ellipsoid (meters).  This is
      *   the value inherited from the GravityModel object used in the
      *   constructor.
      **********************************************************************/
-    Math::real MajorRadius() const throw()
-    { return Init() ? _a : Math::NaN<real>(); }
+    Math::real MajorRadius() const
+    { return Init() ? _a : Math::NaN(); }
 
     /**
      * @return \e f the flattening of the ellipsoid.  This is the value
      *   inherited from the GravityModel object used in the constructor.
      **********************************************************************/
-    Math::real Flattening() const throw()
-    { return Init() ? _f : Math::NaN<real>(); }
+    Math::real Flattening() const
+    { return Init() ? _f : Math::NaN(); }
 
     /**
      * @return the latitude of the circle (degrees).
      **********************************************************************/
-    Math::real Latitude() const throw()
-    { return Init() ? _lat : Math::NaN<real>(); }
+    Math::real Latitude() const
+    { return Init() ? _lat : Math::NaN(); }
 
     /**
      * @return the height of the circle (meters).
      **********************************************************************/
-    Math::real Height() const throw()
-    { return Init() ? _h : Math::NaN<real>(); }
+    Math::real Height() const
+    { return Init() ? _h : Math::NaN(); }
 
     /**
      * @return \e caps the computational capabilities that this object was
      *   constructed with.
      **********************************************************************/
-    unsigned Capabilities() const throw() { return _caps; }
+    unsigned Capabilities() const { return _caps; }
 
     /**
      * @param[in] testcaps a set of bitor'ed GeodesicLine::mask values.
      * @return true if the GeodesicLine object has all these capabilities.
      **********************************************************************/
-    bool Capabilities(unsigned testcaps) const throw() {
+    bool Capabilities(unsigned testcaps) const {
       return (_caps & testcaps) == testcaps;
     }
     ///@}
diff --git a/include/GeographicLib/GravityModel.hpp b/include/GeographicLib/GravityModel.hpp
index e958eb6..ab924cd 100644
--- a/include/GeographicLib/GravityModel.hpp
+++ b/include/GeographicLib/GravityModel.hpp
@@ -51,13 +51,13 @@ namespace GeographicLib {
    * - <b>γ</b> = ∇\e U;
    * - <b>δ</b> = ∇\e T = gravity disturbance vector
    *   = <b>g</b><sub><i>P</i></sub> − <b>γ</b><sub><i>P</i></sub>;
-   * - δ\e g = gravity disturbance = \e g<sub><i>P</i></sub> −
+   * - δ\e g = gravity disturbance = <i>g</i><sub><i>P</i></sub> −
    *   γ<sub><i>P</i></sub>;
    * - Δ<b>g</b> = gravity anomaly vector = <b>g</b><sub><i>P</i></sub>
    *   − <b>γ</b><sub><i>Q</i></sub>; here the line \e PQ is
    *   perpendicular to ellipsoid and the potential at \e P equals the normal
    *   potential at \e Q;
-   * - Δ\e g = gravity anomaly = \e g<sub><i>P</i></sub> −
+   * - Δ\e g = gravity anomaly = <i>g</i><sub><i>P</i></sub> −
    *   γ<sub><i>Q</i></sub>;
    * - (ξ, η) deflection of the vertical, the difference in
    *   directions of <b>g</b><sub><i>P</i></sub> and
@@ -97,7 +97,7 @@ namespace GeographicLib {
     void ReadMetadata(const std::string& name);
     Math::real InternalT(real X, real Y, real Z,
                          real& deltaX, real& deltaY, real& deltaZ,
-                         bool gradp, bool correct) const throw();
+                         bool gradp, bool correct) const;
     GravityModel(const GravityModel&); // copy constructor not allowed
     GravityModel& operator=(const GravityModel&); // nor copy assignment
 
@@ -205,7 +205,7 @@ namespace GeographicLib {
      * The function includes the effects of the earth's rotation.
      **********************************************************************/
     Math::real Gravity(real lat, real lon, real h,
-                       real& gx, real& gy, real& gz) const throw();
+                       real& gx, real& gy, real& gz) const;
 
     /**
      * Evaluate the gravity disturbance vector at an arbitrary point above (or
@@ -224,7 +224,7 @@ namespace GeographicLib {
      **********************************************************************/
     Math::real Disturbance(real lat, real lon, real h,
                            real& deltax, real& deltay, real& deltaz)
-      const throw();
+      const;
 
     /**
      * Evaluate the geoid height.
@@ -239,7 +239,7 @@ namespace GeographicLib {
      * results of the NGA codes are reproduced accurately.  Details are given
      * in \ref gravitygeoid.
      **********************************************************************/
-    Math::real GeoidHeight(real lat, real lon) const throw();
+    Math::real GeoidHeight(real lat, real lon) const;
 
     /**
      * Evaluate the components of the gravity anomaly vector using the
@@ -259,7 +259,7 @@ namespace GeographicLib {
      * approximations used here.  Details are given in \ref gravitygeoid.
      **********************************************************************/
     void SphericalAnomaly(real lat, real lon, real h,
-                          real& Dg01, real& xi, real& eta) const throw();
+                          real& Dg01, real& xi, real& eta) const;
     ///@}
 
     /** \name Compute gravity in geocentric coordinates
@@ -284,7 +284,7 @@ namespace GeographicLib {
      * This calls NormalGravity::U for  ReferenceEllipsoid().
      **********************************************************************/
     Math::real W(real X, real Y, real Z,
-                 real& gX, real& gY, real& gZ) const throw();
+                 real& gX, real& gY, real& gZ) const;
 
     /**
      * Evaluate the components of the acceleration due to gravity in geocentric
@@ -303,7 +303,7 @@ namespace GeographicLib {
      *   (m<sup>2</sup> s<sup>−2</sup>).
      **********************************************************************/
     Math::real V(real X, real Y, real Z,
-                 real& GX, real& GY, real& GZ) const throw();
+                 real& GX, real& GY, real& GZ) const;
 
     /**
      * Evaluate the components of the gravity disturbance in geocentric
@@ -322,7 +322,7 @@ namespace GeographicLib {
      *   anomalous potential) (m<sup>2</sup> s<sup>−2</sup>).
      **********************************************************************/
     Math::real T(real X, real Y, real Z,
-                 real& deltaX, real& deltaY, real& deltaZ) const throw()
+                 real& deltaX, real& deltaY, real& deltaZ) const
     { return InternalT(X, Y, Z, deltaX, deltaY, deltaZ, true, true); }
 
     /**
@@ -334,7 +334,7 @@ namespace GeographicLib {
      * @return \e T = \e W - \e U the disturbing potential (also called the
      *   anomalous potential) (m<sup>2</sup> s<sup>−2</sup>).
      **********************************************************************/
-    Math::real T(real X, real Y, real Z) const throw() {
+    Math::real T(real X, real Y, real Z) const {
       real dummy;
       return InternalT(X, Y, Z, dummy, dummy, dummy, false, true);
     }
@@ -359,7 +359,7 @@ namespace GeographicLib {
      * This calls NormalGravity::U for  ReferenceEllipsoid().
      **********************************************************************/
     Math::real U(real X, real Y, real Z,
-                 real& gammaX, real& gammaY, real& gammaZ) const throw()
+                 real& gammaX, real& gammaY, real& gammaZ) const
     { return _earth.U(X, Y, Z, gammaX, gammaY, gammaZ); }
 
     /**
@@ -376,7 +376,7 @@ namespace GeographicLib {
      *
      * This calls NormalGravity::Phi for  ReferenceEllipsoid().
      **********************************************************************/
-    Math::real Phi(real X, real Y, real& fX, real& fY) const throw()
+    Math::real Phi(real X, real Y, real& fX, real& fY) const
     { return _earth.Phi(X, Y, fX, fY); }
     ///@}
 
@@ -425,39 +425,39 @@ namespace GeographicLib {
     /**
      * @return the NormalGravity object for the reference ellipsoid.
      **********************************************************************/
-    const NormalGravity& ReferenceEllipsoid() const throw() { return _earth; }
+    const NormalGravity& ReferenceEllipsoid() const { return _earth; }
 
     /**
      * @return the description of the gravity model, if available, in the data
      *   file; if absent, return "NONE".
      **********************************************************************/
-    const std::string& Description() const throw() { return _description; }
+    const std::string& Description() const { return _description; }
 
     /**
      * @return date of the model; if absent, return "UNKNOWN".
      **********************************************************************/
-    const std::string& DateTime() const throw() { return _date; }
+    const std::string& DateTime() const { return _date; }
 
     /**
      * @return full file name used to load the gravity model.
      **********************************************************************/
-    const std::string& GravityFile() const throw() { return _filename; }
+    const std::string& GravityFile() const { return _filename; }
 
     /**
      * @return "name" used to load the gravity model (from the first argument
      *   of the constructor, but this may be overridden by the model file).
      **********************************************************************/
-    const std::string& GravityModelName() const throw() { return _name; }
+    const std::string& GravityModelName() const { return _name; }
 
     /**
      * @return directory used to load the gravity model.
      **********************************************************************/
-    const std::string& GravityModelDirectory() const throw() { return _dir; }
+    const std::string& GravityModelDirectory() const { return _dir; }
 
     /**
      * @return \e a the equatorial radius of the ellipsoid (meters).
      **********************************************************************/
-    Math::real MajorRadius() const throw() { return _earth.MajorRadius(); }
+    Math::real MajorRadius() const { return _earth.MajorRadius(); }
 
     /**
      * @return \e GM the mass constant of the model (m<sup>3</sup>
@@ -465,47 +465,48 @@ namespace GeographicLib {
      *   constant and \e M the mass of the earth (usually including the mass of
      *   the earth's atmosphere).
      **********************************************************************/
-    Math::real MassConstant() const throw() { return _GMmodel; }
+    Math::real MassConstant() const { return _GMmodel; }
 
     /**
      * @return \e GM the mass constant of the ReferenceEllipsoid()
      *   (m<sup>3</sup> s<sup>−2</sup>).
      **********************************************************************/
-    Math::real ReferenceMassConstant() const throw()
+    Math::real ReferenceMassConstant() const
     { return _earth.MassConstant(); }
 
     /**
      * @return ω the angular velocity of the model and the
      *   ReferenceEllipsoid() (rad s<sup>−1</sup>).
      **********************************************************************/
-    Math::real AngularVelocity() const throw()
+    Math::real AngularVelocity() const
     { return _earth.AngularVelocity(); }
 
     /**
      * @return \e f the flattening of the ellipsoid.
      **********************************************************************/
-    Math::real Flattening() const throw() { return _earth.Flattening(); }
+    Math::real Flattening() const { return _earth.Flattening(); }
     ///@}
 
     /**
      * @return the default path for gravity model data files.
      *
-     * This is the value of the environment variable GRAVITY_PATH, if set;
-     * otherwise, it is $GEOGRAPHICLIB_DATA/gravity if the environment variable
+     * This is the value of the environment variable
+     * GEOGRAPHICLIB_GRAVITY_PATH, if set; otherwise, it is
+     * $GEOGRAPHICLIB_DATA/gravity if the environment variable
      * GEOGRAPHICLIB_DATA is set; otherwise, it is a compile-time default
      * (/usr/local/share/GeographicLib/gravity on non-Windows systems and
-     * C:/Documents and Settings/All Users/Application
-     * Data/GeographicLib/gravity on Windows systems).
+     * C:/ProgramData/GeographicLib/gravity on Windows systems).
      **********************************************************************/
     static std::string DefaultGravityPath();
 
     /**
      * @return the default name for the gravity model.
      *
-     * This is the value of the environment variable GRAVITY_NAME, if set,
-     * otherwise, it is "egm96".  The GravityModel class does not use
-     * this function; it is just provided as a convenience for a calling
-     * program when constructing a GravityModel object.
+     * This is the value of the environment variable
+     * GEOGRAPHICLIB_GRAVITY_NAME, if set; otherwise, it is "egm96".  The
+     * GravityModel class does not use this function; it is just provided as a
+     * convenience for a calling program when constructing a GravityModel
+     * object.
      **********************************************************************/
     static std::string DefaultGravityName();
   };
diff --git a/include/GeographicLib/LambertConformalConic.hpp b/include/GeographicLib/LambertConformalConic.hpp
index 5f656f0..7d93076 100644
--- a/include/GeographicLib/LambertConformalConic.hpp
+++ b/include/GeographicLib/LambertConformalConic.hpp
@@ -57,19 +57,18 @@ namespace GeographicLib {
   class GEOGRAPHICLIB_EXPORT LambertConformalConic {
   private:
     typedef Math::real real;
+    real eps_, epsx_, tol_, ahypover_;
     real _a, _f, _fm, _e2, _e, _e2m;
     real _sign, _n, _nc, _t0nm1, _scale, _lat0, _k0;
     real _scbet0, _tchi0, _scchi0, _psi0, _nrho0, _drhomax;
-    static const real eps_;
-    static const real epsx_;
-    static const real tol_;
-    static const real ahypover_;
     static const int numit_ = 5;
-    static inline real hyp(real x) throw() { return Math::hypot(real(1), x); }
+    static inline real hyp(real x) { return Math::hypot(real(1), x); }
     // e * atanh(e * x) = log( ((1 + e*x)/(1 - e*x))^(e/2) ) if f >= 0
     // - sqrt(-e2) * atan( sqrt(-e2) * x)                    if f < 0
-    inline real eatanhe(real x) const throw()
-    { return _f >= 0 ? _e * Math::atanh(_e * x) : - _e * std::atan(_e * x); }
+    inline real eatanhe(real x) const {
+      using std::atan;
+      return _f >= 0 ? _e * Math::atanh(_e * x) : - _e * atan(_e * x);
+    }
     // Divided differences
     // Definition: Df(x,y) = (f(x)-f(y))/(x-y)
     // See:
@@ -87,53 +86,55 @@ namespace GeographicLib {
     //                = Df(x,y)*(g(x)+g(y))/2 + Dg(x,y)*(f(x)+f(y))/2
     //
     // hyp(x) = sqrt(1+x^2): Dhyp(x,y) = (x+y)/(hyp(x)+hyp(y))
-    static inline real Dhyp(real x, real y, real hx, real hy) throw()
+    static inline real Dhyp(real x, real y, real hx, real hy)
     // hx = hyp(x)
     { return (x + y) / (hx + hy); }
     // sn(x) = x/sqrt(1+x^2): Dsn(x,y) = (x+y)/((sn(x)+sn(y))*(1+x^2)*(1+y^2))
-    static inline real Dsn(real x, real y, real sx, real sy) throw() {
+    static inline real Dsn(real x, real y, real sx, real sy) {
       // sx = x/hyp(x)
       real t = x * y;
       return t > 0 ? (x + y) * Math::sq( (sx * sy)/t ) / (sx + sy) :
         (x - y != 0 ? (sx - sy) / (x - y) : 1);
     }
     // Dlog1p(x,y) = log1p((x-y)/(1+y)/(x-y)
-    static inline real Dlog1p(real x, real y) throw() {
+    static inline real Dlog1p(real x, real y) {
       real t = x - y; if (t < 0) { t = -t; y = x; }
-      return t != 0 ? Math::log1p(t / (1 + y)) / t : 1 / (1 + x);
+      return t ? Math::log1p(t / (1 + y)) / t : 1 / (1 + x);
     }
     // Dexp(x,y) = exp((x+y)/2) * 2*sinh((x-y)/2)/(x-y)
-    static inline real Dexp(real x, real y) throw() {
+    static inline real Dexp(real x, real y) {
+      using std::sinh; using std::exp;
       real t = (x - y)/2;
-      return (t != 0 ? sinh(t)/t : real(1)) * exp((x + y)/2);
+      return (t ? sinh(t)/t : 1) * exp((x + y)/2);
     }
     // Dsinh(x,y) = 2*sinh((x-y)/2)/(x-y) * cosh((x+y)/2)
     //   cosh((x+y)/2) = (c+sinh(x)*sinh(y)/c)/2
     //   c=sqrt((1+cosh(x))*(1+cosh(y)))
     //   cosh((x+y)/2) = sqrt( (sinh(x)*sinh(y) + cosh(x)*cosh(y) + 1)/2 )
     static inline real Dsinh(real x, real y, real sx, real sy, real cx, real cy)
-      // sx = sinh(x), cx = cosh(x)
-      throw() {
+    // sx = sinh(x), cx = cosh(x)
+    {
       // real t = (x - y)/2, c = sqrt((1 + cx) * (1 + cy));
-      // return (t != 0 ? sinh(t)/t : real(1)) * (c + sx * sy / c) /2;
+      // return (t ? sinh(t)/t : real(1)) * (c + sx * sy / c) /2;
+      using std::sinh; using std::sqrt;
       real t = (x - y)/2;
-      return (t != 0 ? sinh(t)/t : real(1)) * sqrt((sx * sy + cx * cy + 1) /2);
+      return (t ? sinh(t)/t : 1) * sqrt((sx * sy + cx * cy + 1) /2);
     }
     // Dasinh(x,y) = asinh((x-y)*(x+y)/(x*sqrt(1+y^2)+y*sqrt(1+x^2)))/(x-y)
     //             = asinh((x*sqrt(1+y^2)-y*sqrt(1+x^2)))/(x-y)
-    static inline real Dasinh(real x, real y, real hx, real hy) throw() {
+    static inline real Dasinh(real x, real y, real hx, real hy) {
       // hx = hyp(x)
       real t = x - y;
-      return t != 0 ?
+      return t ?
         Math::asinh(x*y > 0 ? t * (x+y) / (x*hy + y*hx) : x*hy - y*hx) / t :
         1/hx;
     }
     // Deatanhe(x,y) = eatanhe((x-y)/(1-e^2*x*y))/(x-y)
-    inline real Deatanhe(real x, real y) const throw() {
+    inline real Deatanhe(real x, real y) const {
       real t = x - y, d = 1 - _e2 * x * y;
-      return t != 0 ? eatanhe(t / d) / t : _e2 / d;
+      return t ? eatanhe(t / d) / t : _e2 / d;
     }
-    void Init(real sphi1, real cphi1, real sphi2, real cphi2, real k1) throw();
+    void Init(real sphi1, real cphi1, real sphi2, real cphi2, real k1);
   public:
 
     /**
@@ -141,11 +142,11 @@ namespace GeographicLib {
      *
      * @param[in] a equatorial radius of ellipsoid (meters).
      * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
-     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
-     *   to 1/\e f.
+     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set
+     *   flattening to 1/\e f.
      * @param[in] stdlat standard parallel (degrees), the circle of tangency.
      * @param[in] k0 scale on the standard parallel.
-     * @exception GeographicErr if \e a, (1 − \e f ) \e a, or \e k0 is
+     * @exception GeographicErr if \e a, (1 − \e f) \e a, or \e k0 is
      *   not positive.
      * @exception GeographicErr if \e stdlat is not in [−90°,
      *   90°].
@@ -157,12 +158,12 @@ namespace GeographicLib {
      *
      * @param[in] a equatorial radius of ellipsoid (meters).
      * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
-     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
-     *   to 1/\e f.
+     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set
+     *   flattening to 1/\e f.
      * @param[in] stdlat1 first standard parallel (degrees).
      * @param[in] stdlat2 second standard parallel (degrees).
      * @param[in] k1 scale on the standard parallels.
-     * @exception GeographicErr if \e a, (1 − \e f ) \e a, or \e k1 is
+     * @exception GeographicErr if \e a, (1 − \e f) \e a, or \e k1 is
      *   not positive.
      * @exception GeographicErr if \e stdlat1 or \e stdlat2 is not in
      *   [−90°, 90°], or if either \e stdlat1 or \e
@@ -175,14 +176,14 @@ namespace GeographicLib {
      *
      * @param[in] a equatorial radius of ellipsoid (meters).
      * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
-     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
-     *   to 1/\e f.
+     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set
+     *   flattening to 1/\e f.
      * @param[in] sinlat1 sine of first standard parallel.
      * @param[in] coslat1 cosine of first standard parallel.
      * @param[in] sinlat2 sine of second standard parallel.
      * @param[in] coslat2 cosine of second standard parallel.
      * @param[in] k1 scale on the standard parallels.
-     * @exception GeographicErr if \e a, (1 − \e f ) \e a, or \e k1 is
+     * @exception GeographicErr if \e a, (1 − \e f) \e a, or \e k1 is
      *   not positive.
      * @exception GeographicErr if \e stdlat1 or \e stdlat2 is not in
      *   [−90°, 90°], or if either \e stdlat1 or \e
@@ -236,7 +237,7 @@ namespace GeographicLib {
      * (i.e., one or both of the poles) will be large but finite.
      **********************************************************************/
     void Forward(real lon0, real lat, real lon,
-                 real& x, real& y, real& gamma, real& k) const throw();
+                 real& x, real& y, real& gamma, real& k) const;
 
     /**
      * Reverse projection, from Lambert conformal conic to geographic.
@@ -258,14 +259,14 @@ namespace GeographicLib {
      * this.
      **********************************************************************/
     void Reverse(real lon0, real x, real y,
-                 real& lat, real& lon, real& gamma, real& k) const throw();
+                 real& lat, real& lon, real& gamma, real& k) const;
 
     /**
      * LambertConformalConic::Forward without returning the convergence and
      * scale.
      **********************************************************************/
     void Forward(real lon0, real lat, real lon,
-                 real& x, real& y) const throw() {
+                 real& x, real& y) const {
       real gamma, k;
       Forward(lon0, lat, lon, x, y, gamma, k);
     }
@@ -275,7 +276,7 @@ namespace GeographicLib {
      * scale.
      **********************************************************************/
     void Reverse(real lon0, real x, real y,
-                 real& lat, real& lon) const throw() {
+                 real& lat, real& lon) const {
       real gamma, k;
       Reverse(lon0, x, y, lat, lon, gamma, k);
     }
@@ -287,20 +288,20 @@ namespace GeographicLib {
      * @return \e a the equatorial radius of the ellipsoid (meters).  This is
      *   the value used in the constructor.
      **********************************************************************/
-    Math::real MajorRadius() const throw() { return _a; }
+    Math::real MajorRadius() const { return _a; }
 
     /**
      * @return \e f the flattening of the ellipsoid.  This is the
      *   value used in the constructor.
      **********************************************************************/
-    Math::real Flattening() const throw() { return _f; }
+    Math::real Flattening() const { return _f; }
 
     /// \cond SKIP
     /**
      * <b>DEPRECATED</b>
      * @return \e r the inverse flattening of the ellipsoid.
      **********************************************************************/
-    Math::real InverseFlattening() const throw() { return 1/_f; }
+    Math::real InverseFlattening() const { return 1/_f; }
     /// \endcond
 
     /**
@@ -310,13 +311,13 @@ namespace GeographicLib {
      * 1-parallel constructor and lies between \e stdlat1 and \e stdlat2 in the
      * 2-parallel constructors.
      **********************************************************************/
-    Math::real OriginLatitude() const throw() { return _lat0; }
+    Math::real OriginLatitude() const { return _lat0; }
 
     /**
      * @return central scale for the projection.  This is the scale on the
      *   latitude of origin.
      **********************************************************************/
-    Math::real CentralScale() const throw() { return _k0; }
+    Math::real CentralScale() const { return _k0; }
     ///@}
 
     /**
@@ -324,7 +325,7 @@ namespace GeographicLib {
      * ellipsoid, \e stdlat = 0, and \e k0 = 1.  This degenerates to the
      * Mercator projection.
      **********************************************************************/
-    static const LambertConformalConic Mercator;
+    static const LambertConformalConic& Mercator();
   };
 
 } // namespace GeographicLib
diff --git a/include/GeographicLib/LocalCartesian.hpp b/include/GeographicLib/LocalCartesian.hpp
index 9ce0b38..9a7b3f0 100644
--- a/include/GeographicLib/LocalCartesian.hpp
+++ b/include/GeographicLib/LocalCartesian.hpp
@@ -26,7 +26,7 @@ namespace GeographicLib {
    * due north.  The plane \e z = - \e h0 is tangent to the ellipsoid.
    *
    * The conversions all take place via geocentric coordinates using a
-   * Geocentric object (by default Geocentric::WGS84).
+   * Geocentric object (by default Geocentric::WGS84()).
    *
    * Example of use:
    * \include example-LocalCartesian.cpp
@@ -44,10 +44,10 @@ namespace GeographicLib {
     real _lat0, _lon0, _h0;
     real _x0, _y0, _z0, _r[dim2_];
     void IntForward(real lat, real lon, real h, real& x, real& y, real& z,
-                    real M[dim2_]) const throw();
+                    real M[dim2_]) const;
     void IntReverse(real x, real y, real z, real& lat, real& lon, real& h,
-                    real M[dim2_]) const throw();
-    void MatrixMultiply(real M[dim2_]) const throw();
+                    real M[dim2_]) const;
+    void MatrixMultiply(real M[dim2_]) const;
   public:
 
     /**
@@ -57,13 +57,13 @@ namespace GeographicLib {
      * @param[in] lon0 longitude at origin (degrees).
      * @param[in] h0 height above ellipsoid at origin (meters); default 0.
      * @param[in] earth Geocentric object for the transformation; default
-     *   Geocentric::WGS84.
+     *   Geocentric::WGS84().
      *
      * \e lat0 should be in the range [−90°, 90°]; \e
      * lon0 should be in the range [−540°, 540°).
      **********************************************************************/
     LocalCartesian(real lat0, real lon0, real h0 = 0,
-                   const Geocentric& earth = Geocentric::WGS84) throw()
+                   const Geocentric& earth = Geocentric::WGS84())
       : _earth(earth)
     { Reset(lat0, lon0, h0); }
 
@@ -71,12 +71,11 @@ namespace GeographicLib {
      * Default constructor.
      *
      * @param[in] earth Geocentric object for the transformation; default
-     *   Geocentric::WGS84.
+     *   Geocentric::WGS84().
      *
      * Sets \e lat0 = 0, \e lon0 = 0, \e h0 = 0.
      **********************************************************************/
-    explicit LocalCartesian(const Geocentric& earth = Geocentric::WGS84)
-      throw()
+    explicit LocalCartesian(const Geocentric& earth = Geocentric::WGS84())
       : _earth(earth)
     { Reset(real(0), real(0), real(0)); }
 
@@ -90,7 +89,7 @@ namespace GeographicLib {
      * \e lat0 should be in the range [−90°, 90°]; \e
      * lon0 should be in the range [−540°, 540°).
      **********************************************************************/
-    void Reset(real lat0, real lon0, real h0 = 0) throw();
+    void Reset(real lat0, real lon0, real h0 = 0);
 
     /**
      * Convert from geodetic to local cartesian coordinates.
@@ -106,7 +105,7 @@ namespace GeographicLib {
      * should be in the range [−540°, 540°).
      **********************************************************************/
     void Forward(real lat, real lon, real h, real& x, real& y, real& z)
-      const throw() {
+      const {
       IntForward(lat, lon, h, x, y, z, NULL);
     }
 
@@ -139,11 +138,11 @@ namespace GeographicLib {
      **********************************************************************/
     void Forward(real lat, real lon, real h, real& x, real& y, real& z,
                  std::vector<real>& M)
-      const throw()  {
+      const  {
       if (M.end() == M.begin() + dim2_) {
         real t[dim2_];
         IntForward(lat, lon, h, x, y, z, t);
-        copy(t, t + dim2_, M.begin());
+        std::copy(t, t + dim2_, M.begin());
       } else
         IntForward(lat, lon, h, x, y, z, NULL);
     }
@@ -162,7 +161,7 @@ namespace GeographicLib {
      * 180°).
      **********************************************************************/
     void Reverse(real x, real y, real z, real& lat, real& lon, real& h)
-      const throw() {
+      const {
       IntReverse(x, y, z, lat, lon, h, NULL);
     }
 
@@ -188,16 +187,16 @@ namespace GeographicLib {
      *   the local coordinate system at (\e lat0, \e lon0, \e h0)); call this
      *   representation \e v0.
      * .
-     * Then we have \e v1 = \e M<sup>T</sup> ⋅ \e v0, where \e
-     * M<sup>T</sup> is the transpose of \e M.
+     * Then we have \e v1 = <i>M</i><sup>T</sup> ⋅ \e v0, where
+     * <i>M</i><sup>T</sup> is the transpose of \e M.
      **********************************************************************/
     void Reverse(real x, real y, real z, real& lat, real& lon, real& h,
                  std::vector<real>& M)
-      const throw() {
+      const {
       if (M.end() == M.begin() + dim2_) {
         real t[dim2_];
         IntReverse(x, y, z, lat, lon, h, t);
-        copy(t, t + dim2_, M.begin());
+        std::copy(t, t + dim2_, M.begin());
       } else
         IntReverse(x, y, z, lat, lon, h, NULL);
     }
@@ -208,30 +207,30 @@ namespace GeographicLib {
     /**
      * @return latitude of the origin (degrees).
      **********************************************************************/
-    Math::real LatitudeOrigin() const throw() { return _lat0; }
+    Math::real LatitudeOrigin() const { return _lat0; }
 
     /**
      * @return longitude of the origin (degrees).
      **********************************************************************/
-    Math::real LongitudeOrigin() const throw() { return _lon0; }
+    Math::real LongitudeOrigin() const { return _lon0; }
 
     /**
      * @return height of the origin (meters).
      **********************************************************************/
-    Math::real HeightOrigin() const throw() { return _h0; }
+    Math::real HeightOrigin() const { return _h0; }
 
     /**
      * @return \e a the equatorial radius of the ellipsoid (meters).  This is
      *   the value of \e a inherited from the Geocentric object used in the
      *   constructor.
      **********************************************************************/
-    Math::real MajorRadius() const throw() { return _earth.MajorRadius(); }
+    Math::real MajorRadius() const { return _earth.MajorRadius(); }
 
     /**
      * @return \e f the flattening of the ellipsoid.  This is the value
      *   inherited from the Geocentric object used in the constructor.
      **********************************************************************/
-    Math::real Flattening() const throw() { return _earth.Flattening(); }
+    Math::real Flattening() const { return _earth.Flattening(); }
     ///@}
 
     /// \cond SKIP
@@ -239,7 +238,7 @@ namespace GeographicLib {
      * <b>DEPRECATED</b>
      * @return \e r the inverse flattening of the ellipsoid.
      **********************************************************************/
-    Math::real InverseFlattening() const throw()
+    Math::real InverseFlattening() const
     { return _earth.InverseFlattening(); }
     /// \endcond
   };
diff --git a/include/GeographicLib/MGRS.hpp b/include/GeographicLib/MGRS.hpp
index e8ff0cb..f71908b 100644
--- a/include/GeographicLib/MGRS.hpp
+++ b/include/GeographicLib/MGRS.hpp
@@ -27,9 +27,16 @@ namespace GeographicLib {
    * MGRS is defined in Chapter 3 of
    * - J. W. Hager, L. L. Fry, S. S. Jacks, D. R. Hill,
    *   <a href="http://earth-info.nga.mil/GandG/publications/tm8358.1/pdf/TM8358_1.pdf">
-
    *   Datums, Ellipsoids, Grids, and Grid Reference Systems</a>,
    *   Defense Mapping Agency, Technical Manual TM8358.1 (1990).
+   * .
+   * This document has been updated by the two NGA documents
+   * - <a href="http://earth-info.nga.mil/GandG/publications/NGA_STND_0037_2_0_0_GRIDS/NGA.STND.0037_2.0.0_GRIDS.pdf">
+   *   Universal Grids and Grid Reference Systems</a>,
+   *   NGA.STND.0037_2.0.0_GRIDS (2014).
+   * - <a href="http://earth-info.nga.mil/GandG/publications/NGA_SIG_0012_2_0_0_UTMUPS/NGA.SIG.0012_2.0.0_UTMUPS.pdf">
+   *   The Universal Grids and the Transverse Mercator and Polar Stereographic
+   *   Map Projections</a>, NGA.SIG.0012_2.0.0_UTMUPS (2014).
    *
    * This implementation has the following properties:
    * - The conversions are closed, i.e., output from Forward is legal input for
@@ -62,10 +69,21 @@ namespace GeographicLib {
   class GEOGRAPHICLIB_EXPORT MGRS {
   private:
     typedef Math::real real;
-    // The smallest length s.t., 1.0e7 - eps_ < 1.0e7 (approx 1.9 nm)
-    static const real eps_;
-    // The smallest angle s.t., 90 - eps_ < 90 (approx 50e-12 arcsec)
-    static const real angeps_;
+    // The smallest length s.t., 1.0e7 - eps() < 1.0e7 (approx 1.9 nm)
+    static inline real eps() {
+      using std::pow;
+      // 25 = ceil(log_2(2e7)) -- use half circumference here because
+      // northing 195e5 is a legal in the "southern" hemisphere.
+      static const real eps = pow(real(0.5), Math::digits() - 25);
+      return eps;
+    }
+    // The smallest angle s.t., 90 - angeps() < 90 (approx 50e-12 arcsec)
+    static inline real angeps() {
+      using std::pow;
+      // 7 = ceil(log_2(90))
+      static const real angeps = pow(real(0.5), Math::digits() - 7);
+      return angeps;
+    }
     static const std::string hemispheres_;
     static const std::string utmcols_[3];
     static const std::string utmrow_;
@@ -91,26 +109,28 @@ namespace GeographicLib {
       maxprec_ = 5 + 6,
     };
     static void CheckCoords(bool utmp, bool& northp, real& x, real& y);
-    static int UTMRow(int iband, int icol, int irow) throw();
+    static int UTMRow(int iband, int icol, int irow);
 
     friend class UTMUPS;        // UTMUPS::StandardZone calls LatitudeBand
     // Return latitude band number [-10, 10) for the given latitude (degrees).
     // The bands are reckoned in include their southern edges.
-    static int LatitudeBand(real lat) throw() {
-      int ilat = int(std::floor(lat));
+    static int LatitudeBand(real lat) {
+      using std::floor;
+      int ilat = int(floor(lat));
       return (std::max)(-10, (std::min)(9, (ilat + 80)/8 - 10));
     }
     // Return approximate latitude band number [-10, 10) for the given northing
     // (meters).  With this rule, each 100km tile would have a unique band
     // letter corresponding to the latitude at the center of the tile.  This
     // function isn't currently used.
-    static int ApproxLatitudeBand(real y) throw() {
+    static int ApproxLatitudeBand(real y) {
       // northing at tile center in units of tile = 100km
-      real ya = std::floor( (std::min)(real(88), std::abs(y/tile_)) ) +
+      using std::floor; using std::abs;
+      real ya = floor( (std::min)(real(88), abs(y/tile_)) ) +
         real(0.5);
       // convert to lat (mult by 90/100) and then to band (divide by 8)
       // the +1 fine tunes the boundary between bands 3 and 4
-      int b = int(std::floor( ((ya * 9 + 1) / 10) / 8 ));
+      int b = int(floor( ((ya * 9 + 1) / 10) / 8 ));
       // For the northern hemisphere we have
       // band rows  num
       // N 0   0:8    9
@@ -162,6 +182,7 @@ namespace GeographicLib {
      *   allocated.
      *
      * \e prec specifies the precision of the MGRS string as follows:
+     * - prec = −1 (min), only the grid zone is returned
      * - prec = 0 (min), 100 km
      * - prec = 1, 10 km
      * - prec = 2, 1 km
@@ -197,7 +218,7 @@ namespace GeographicLib {
      * them \e within the allowed range.  (This includes reducing a southern
      * hemisphere northing of 10000 km by 4 nm so that it is placed in latitude
      * band M.)  The UTM or UPS coordinates are truncated to requested
-     * precision to determine the MGRS coordinate.  Thus in UTM zone 38N, the
+     * precision to determine the MGRS coordinate.  Thus in UTM zone 38n, the
      * square area with easting in [444 km, 445 km) and northing in [3688 km,
      * 3689 km) maps to MGRS coordinate 38SMB4488 (at \e prec = 2, 1 km),
      * Khulani Sq., Baghdad.
@@ -214,6 +235,11 @@ namespace GeographicLib {
      * of a band boundary.  For prec in [6, 11], the conversion is accurate to
      * roundoff.
      *
+     * If \e prec = -1, then the "grid zone designation", e.g., 18T, is
+     * returned.  This consists of the UTM zone number (absent for UPS) and the
+     * first letter of the MGRS string which labels the latitude band for UTM
+     * and the hemisphere for UPS.
+     *
      * If \e x or \e y is NaN or if \e zone is UTMUPS::INVALID, the returned
      * MGRS string is "INVALID".
      *
@@ -281,6 +307,12 @@ namespace GeographicLib {
      * centerp = true the conversion from MGRS to geographic and back is
      * stable.  This is not assured if \e centerp = false.
      *
+     * If a "grid zone designation" (for example, 18T or A) is given, then some
+     * suitable (but essentially arbitrary) point within that grid zone is
+     * returned.  The main utility of the conversion is to allow \e zone and \e
+     * northp to be determined.  In this case, the \e centerp parameter is
+     * ignored.
+     *
      * If the first 3 characters of \e mgrs are "INV", then \e x and \e y are
      * set to NaN and \e zone is set to UTMUPS::INVALID.
      *
@@ -299,7 +331,7 @@ namespace GeographicLib {
      * (The WGS84 value is returned because the UTM and UPS projections are
      * based on this ellipsoid.)
      **********************************************************************/
-    static Math::real MajorRadius() throw() { return UTMUPS::MajorRadius(); }
+    static Math::real MajorRadius() { return UTMUPS::MajorRadius(); }
 
     /**
      * @return \e f the flattening of the WGS84 ellipsoid.
@@ -307,7 +339,7 @@ namespace GeographicLib {
      * (The WGS84 value is returned because the UTM and UPS projections are
      * based on this ellipsoid.)
      **********************************************************************/
-    static Math::real Flattening() throw() { return UTMUPS::Flattening(); }
+    static Math::real Flattening() { return UTMUPS::Flattening(); }
     ///@}
 
     /// \cond SKIP
@@ -315,7 +347,7 @@ namespace GeographicLib {
      * <b>DEPRECATED</b>
      * @return \e r the inverse flattening of the WGS84 ellipsoid.
      **********************************************************************/
-    static Math::real InverseFlattening() throw()
+    static Math::real InverseFlattening()
     { return UTMUPS::InverseFlattening(); }
     /// \endcond
   };
diff --git a/include/GeographicLib/MagneticCircle.hpp b/include/GeographicLib/MagneticCircle.hpp
index fd43043..366c4de 100644
--- a/include/GeographicLib/MagneticCircle.hpp
+++ b/include/GeographicLib/MagneticCircle.hpp
@@ -62,7 +62,7 @@ namespace GeographicLib {
 
     void Field(real lon, bool diffp,
                real& Bx, real& By, real& Bz,
-               real& Bxt, real& Byt, real& Bzt) const throw();
+               real& Bxt, real& Byt, real& Bzt) const;
 
     friend class MagneticModel; // MagneticModel calls the private constructor
 
@@ -88,7 +88,7 @@ namespace GeographicLib {
      * @param[out] Bz the vertical (up) component of the magnetic field
      *   (nanotesla).
      **********************************************************************/
-    void operator()(real lon, real& Bx, real& By, real& Bz) const throw() {
+    void operator()(real lon, real& Bx, real& By, real& Bz) const {
       real dummy;
       Field(lon, false, Bx, By, Bz, dummy, dummy, dummy);
     }
@@ -107,7 +107,7 @@ namespace GeographicLib {
      * @param[out] Bzt the rate of change of \e Bz (nT/yr).
      **********************************************************************/
     void operator()(real lon, real& Bx, real& By, real& Bz,
-                    real& Bxt, real& Byt, real& Bzt) const throw() {
+                    real& Bxt, real& Byt, real& Bzt) const {
       Field(lon, true, Bx, By, Bz, Bxt, Byt, Bzt);
     }
     ///@}
@@ -118,35 +118,35 @@ namespace GeographicLib {
     /**
      * @return true if the object has been initialized.
      **********************************************************************/
-    bool Init() const throw() { return _a > 0; }
+    bool Init() const { return _a > 0; }
     /**
      * @return \e a the equatorial radius of the ellipsoid (meters).  This is
      *   the value inherited from the MagneticModel object used in the
      *   constructor.
      **********************************************************************/
-    Math::real MajorRadius() const throw()
-    { return Init() ? _a : Math::NaN<real>(); }
+    Math::real MajorRadius() const
+    { return Init() ? _a : Math::NaN(); }
     /**
      * @return \e f the flattening of the ellipsoid.  This is the value
      *   inherited from the MagneticModel object used in the constructor.
      **********************************************************************/
-    Math::real Flattening() const throw()
-    { return Init() ? _f : Math::NaN<real>(); }
+    Math::real Flattening() const
+    { return Init() ? _f : Math::NaN(); }
     /**
      * @return the latitude of the circle (degrees).
      **********************************************************************/
-    Math::real Latitude() const throw()
-    { return Init() ? _lat : Math::NaN<real>(); }
+    Math::real Latitude() const
+    { return Init() ? _lat : Math::NaN(); }
     /**
      * @return the height of the circle (meters).
      **********************************************************************/
-    Math::real Height() const throw()
-    { return Init() ? _h : Math::NaN<real>(); }
+    Math::real Height() const
+    { return Init() ? _h : Math::NaN(); }
     /**
      * @return the time (fractional years).
      **********************************************************************/
-    Math::real Time() const throw()
-    { return Init() ? _t : Math::NaN<real>(); }
+    Math::real Time() const
+    { return Init() ? _t : Math::NaN(); }
 
     ///@}
   };
diff --git a/include/GeographicLib/MagneticModel.hpp b/include/GeographicLib/MagneticModel.hpp
index b0e0aaf..544a15d 100644
--- a/include/GeographicLib/MagneticModel.hpp
+++ b/include/GeographicLib/MagneticModel.hpp
@@ -71,7 +71,7 @@ namespace GeographicLib {
     std::vector<SphericalHarmonic> _harm;
     void Field(real t, real lat, real lon, real h, bool diffp,
                real& Bx, real& By, real& Bz,
-               real& Bxt, real& Byt, real& Bzt) const throw();
+               real& Bxt, real& Byt, real& Bzt) const;
     void ReadMetadata(const std::string& name);
     MagneticModel(const MagneticModel&); // copy constructor not allowed
     MagneticModel& operator=(const MagneticModel&); // nor copy assignment
@@ -86,7 +86,7 @@ namespace GeographicLib {
      * @param[in] name the name of the model.
      * @param[in] path (optional) directory for data file.
      * @param[in] earth (optional) Geocentric object for converting
-     *   coordinates; default Geocentric::WGS84.
+     *   coordinates; default Geocentric::WGS84().
      * @exception GeographicErr if the data file cannot be found, is
      *   unreadable, or is corrupt.
      * @exception std::bad_alloc if the memory necessary for storing the model
@@ -109,7 +109,7 @@ namespace GeographicLib {
      **********************************************************************/
     explicit MagneticModel(const std::string& name,
                            const std::string& path = "",
-                           const Geocentric& earth = Geocentric::WGS84);
+                           const Geocentric& earth = Geocentric::WGS84());
     ///@}
 
     /** \name Compute the magnetic field
@@ -128,7 +128,7 @@ namespace GeographicLib {
      *   (nanotesla).
      **********************************************************************/
     void operator()(real t, real lat, real lon, real h,
-                    real& Bx, real& By, real& Bz) const throw() {
+                    real& Bx, real& By, real& Bz) const {
       real dummy;
       Field(t, lat, lon, h, false, Bx, By, Bz, dummy, dummy, dummy);
     }
@@ -151,7 +151,7 @@ namespace GeographicLib {
      **********************************************************************/
     void operator()(real t, real lat, real lon, real h,
                     real& Bx, real& By, real& Bz,
-                    real& Bxt, real& Byt, real& Bzt) const throw() {
+                    real& Bxt, real& Byt, real& Bzt) const {
       Field(t, lat, lon, h, true, Bx, By, Bz, Bxt, Byt, Bzt);
     }
 
@@ -189,7 +189,7 @@ namespace GeographicLib {
      *   horizontal).
      **********************************************************************/
     static void FieldComponents(real Bx, real By, real Bz,
-                                real& H, real& F, real& D, real& I) throw() {
+                                real& H, real& F, real& D, real& I) {
       real Ht, Ft, Dt, It;
       FieldComponents(Bx, By, Bz, real(0), real(1), real(0),
                       H, F, D, I, Ht, Ft, Dt, It);
@@ -219,7 +219,7 @@ namespace GeographicLib {
     static void FieldComponents(real Bx, real By, real Bz,
                                 real Bxt, real Byt, real Bzt,
                                 real& H, real& F, real& D, real& I,
-                                real& Ht, real& Ft, real& Dt, real& It) throw();
+                                real& Ht, real& Ft, real& Dt, real& It);
     ///@}
 
     /** \name Inspector functions
@@ -229,29 +229,29 @@ namespace GeographicLib {
      * @return the description of the magnetic model, if available, from the
      *   Description file in the data file; if absent, return "NONE".
      **********************************************************************/
-    const std::string& Description() const throw() { return _description; }
+    const std::string& Description() const { return _description; }
 
     /**
      * @return date of the model, if available, from the ReleaseDate field in
      *   the data file; if absent, return "UNKNOWN".
      **********************************************************************/
-    const std::string& DateTime() const throw() { return _date; }
+    const std::string& DateTime() const { return _date; }
 
     /**
      * @return full file name used to load the magnetic model.
      **********************************************************************/
-    const std::string& MagneticFile() const throw() { return _filename; }
+    const std::string& MagneticFile() const { return _filename; }
 
     /**
      * @return "name" used to load the magnetic model (from the first argument
      *   of the constructor, but this may be overridden by the model file).
      **********************************************************************/
-    const std::string& MagneticModelName() const throw() { return _name; }
+    const std::string& MagneticModelName() const { return _name; }
 
     /**
      * @return directory used to load the magnetic model.
      **********************************************************************/
-    const std::string& MagneticModelDirectory() const throw() { return _dir; }
+    const std::string& MagneticModelDirectory() const { return _dir; }
 
     /**
      * @return the minimum height above the ellipsoid (in meters) for which
@@ -262,7 +262,7 @@ namespace GeographicLib {
      * argument is made by MagneticModel::operator()() or
      * MagneticModel::Circle.
      **********************************************************************/
-    Math::real MinHeight() const throw() { return _hmin; }
+    Math::real MinHeight() const { return _hmin; }
 
     /**
      * @return the maximum height above the ellipsoid (in meters) for which
@@ -273,7 +273,7 @@ namespace GeographicLib {
      * argument is made by MagneticModel::operator()() or
      * MagneticModel::Circle.
      **********************************************************************/
-    Math::real MaxHeight() const throw() { return _hmax; }
+    Math::real MaxHeight() const { return _hmax; }
 
     /**
      * @return the minimum time (in years) for which this MagneticModel should
@@ -284,7 +284,7 @@ namespace GeographicLib {
      * argument is made by MagneticModel::operator()() or
      * MagneticModel::Circle.
      **********************************************************************/
-    Math::real MinTime() const throw() { return _tmin; }
+    Math::real MinTime() const { return _tmin; }
 
     /**
      * @return the maximum time (in years) for which this MagneticModel should
@@ -295,41 +295,42 @@ namespace GeographicLib {
      * argument is made by MagneticModel::operator()() or
      * MagneticModel::Circle.
      **********************************************************************/
-    Math::real MaxTime() const throw() { return _tmax; }
+    Math::real MaxTime() const { return _tmax; }
 
     /**
      * @return \e a the equatorial radius of the ellipsoid (meters).  This is
      *   the value of \e a inherited from the Geocentric object used in the
      *   constructor.
      **********************************************************************/
-    Math::real MajorRadius() const throw() { return _earth.MajorRadius(); }
+    Math::real MajorRadius() const { return _earth.MajorRadius(); }
 
     /**
      * @return \e f the flattening of the ellipsoid.  This is the value
      *   inherited from the Geocentric object used in the constructor.
      **********************************************************************/
-    Math::real Flattening() const throw() { return _earth.Flattening(); }
+    Math::real Flattening() const { return _earth.Flattening(); }
     ///@}
 
     /**
      * @return the default path for magnetic model data files.
      *
-     * This is the value of the environment variable MAGNETIC_PATH, if set;
-     * otherwise, it is $GEOGRAPHICLIB_DATA/magnetic if the environment
-     * variable GEOGRAPHICLIB_DATA is set; otherwise, it is a compile-time
-     * default (/usr/local/share/GeographicLib/magnetic on non-Windows systems
-     * and C:/Documents and Settings/All Users/Application
-     * Data/GeographicLib/magnetic on Windows systems).
+     * This is the value of the environment variable
+     * GEOGRAPHICLIB_MAGNETIC_PATH, if set; otherwise, it is
+     * $GEOGRAPHICLIB_DATA/magnetic if the environment variable
+     * GEOGRAPHICLIB_DATA is set; otherwise, it is a compile-time default
+     * (/usr/local/share/GeographicLib/magnetic on non-Windows systems and
+     * C:/ProgramData/GeographicLib/magnetic on Windows systems).
      **********************************************************************/
     static std::string DefaultMagneticPath();
 
     /**
      * @return the default name for the magnetic model.
      *
-     * This is the value of the environment variable MAGNETIC_NAME, if set,
-     * otherwise, it is "wmm2010".  The MagneticModel class does not use this
-     * function; it is just provided as a convenience for a calling program
-     * when constructing a MagneticModel object.
+     * This is the value of the environment variable
+     * GEOGRAPHICLIB_MAGNETIC_NAME, if set; otherwise, it is "wmm2010".  The
+     * MagneticModel class does not use this function; it is just provided as a
+     * convenience for a calling program when constructing a MagneticModel
+     * object.
      **********************************************************************/
     static std::string DefaultMagneticName();
   };
diff --git a/include/GeographicLib/Math.hpp b/include/GeographicLib/Math.hpp
index 2ef649e..12e0ea9 100644
--- a/include/GeographicLib/Math.hpp
+++ b/include/GeographicLib/Math.hpp
@@ -17,26 +17,30 @@
 /**
  * Are C++11 math functions available?
  **********************************************************************/
-#if !defined(GEOGRAPHICLIB_CPLUSPLUS11_MATH)
+#if !defined(GEOGRAPHICLIB_CXX11_MATH)
+// Recent versions of g++ -std=c++11 (4.7 and later?) set __cplusplus to 201103
+// and support the new C++11 mathematical functions, std::atanh, etc.  However
+// the Android toolchain, which uses g++ -std=c++11 (4.8 as of 2014-03-11,
+// according to Pullan Lu), does not support std::atanh.  Android toolchains
+// might define __ANDROID__ or ANDROID; so need to check both.
 #  if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ >= 7 \
-  && __cplusplus >= 201103 && !(defined(__ANDROID__) || defined(ANDROID))
-// The android toolchain uses g++ and supports C++11, but not, apparently, the
-// new mathematical functions introduced with C++11.  Android toolchains might
-// define __ANDROID__ or ANDROID; so need to check both.
-#    define GEOGRAPHICLIB_CPLUSPLUS11_MATH 1
+  && __cplusplus >= 201103 && \
+  !(defined(__ANDROID__) || defined(ANDROID) || defined(__CYGWIN__))
+#    define GEOGRAPHICLIB_CXX11_MATH 1
+// Visual C++ 12 supports these functions
 #  elif defined(_MSC_VER) && _MSC_VER >= 1800
-#    define GEOGRAPHICLIB_CPLUSPLUS11_MATH 1
+#    define GEOGRAPHICLIB_CXX11_MATH 1
 #  else
-#    define GEOGRAPHICLIB_CPLUSPLUS11_MATH 0
+#    define GEOGRAPHICLIB_CXX11_MATH 0
 #  endif
 #endif
 
-#if !defined(WORDS_BIGENDIAN)
-#  define WORDS_BIGENDIAN 0
+#if !defined(GEOGRAPHICLIB_WORDS_BIGENDIAN)
+#  define GEOGRAPHICLIB_WORDS_BIGENDIAN 0
 #endif
 
-#if !defined(HAVE_LONG_DOUBLE)
-#  define HAVE_LONG_DOUBLE 0
+#if !defined(GEOGRAPHICLIB_HAVE_LONG_DOUBLE)
+#  define GEOGRAPHICLIB_HAVE_LONG_DOUBLE 0
 #endif
 
 #if !defined(GEOGRAPHICLIB_PRECISION)
@@ -45,8 +49,9 @@
  * float (single precision); 2 (the default) means double; 3 means long double;
  * 4 is reserved for quadruple precision.  Nearly all the testing has been
  * carried out with doubles and that's the recommended configuration.  In order
- * for long double to be used, HAVE_LONG_DOUBLE needs to be defined.  Note that
- * with Microsoft Visual Studio, long double is the same as double.
+ * for long double to be used, GEOGRAPHICLIB_HAVE_LONG_DOUBLE needs to be
+ * defined.  Note that with Microsoft Visual Studio, long double is the same as
+ * double.
  **********************************************************************/
 #  define GEOGRAPHICLIB_PRECISION 2
 #endif
@@ -54,8 +59,31 @@
 #include <cmath>
 #include <algorithm>
 #include <limits>
-#if defined(_LIBCPP_VERSION)
-#include <type_traits>
+
+#if GEOGRAPHICLIB_PRECISION == 4
+#include <boost/multiprecision/float128.hpp>
+#include <boost/math/special_functions/hypot.hpp>
+#include <boost/math/special_functions/expm1.hpp>
+#include <boost/math/special_functions/log1p.hpp>
+#include <boost/math/special_functions/atanh.hpp>
+#include <boost/math/special_functions/asinh.hpp>
+#include <boost/math/special_functions/cbrt.hpp>
+#elif GEOGRAPHICLIB_PRECISION == 5
+#include <mpreal.h>
+#endif
+
+#if GEOGRAPHICLIB_PRECISION > 3
+// volatile keyword makes no sense for multiprec types
+#define GEOGRAPHICLIB_VOLATILE
+// Signal a convergence failure with multiprec types by throwing an exception
+// at loop exit.
+#define GEOGRAPHICLIB_PANIC \
+  (throw GeographicLib::GeographicErr("Convergence failure"), false)
+#else
+#define GEOGRAPHICLIB_VOLATILE volatile
+// Ignore convergence failures with standard floating points types by allowing
+// loop to exit cleanly.
+#define GEOGRAPHICLIB_PANIC false
 #endif
 
 namespace GeographicLib {
@@ -73,14 +101,14 @@ namespace GeographicLib {
   class GEOGRAPHICLIB_EXPORT Math {
   private:
     void dummy() {
-      STATIC_ASSERT(GEOGRAPHICLIB_PRECISION >= 1 &&
-                    GEOGRAPHICLIB_PRECISION <= 3,
-                    "Bad value of precision");
+      GEOGRAPHICLIB_STATIC_ASSERT(GEOGRAPHICLIB_PRECISION >= 1 &&
+                                  GEOGRAPHICLIB_PRECISION <= 5,
+                                  "Bad value of precision");
     }
     Math();                     // Disable constructor
   public:
 
-#if HAVE_LONG_DOUBLE
+#if GEOGRAPHICLIB_HAVE_LONG_DOUBLE
     /**
      * The extended precision type for real numbers, used for some testing.
      * This is long double on computers with this type; otherwise it is double.
@@ -102,46 +130,108 @@ namespace GeographicLib {
     typedef float real;
 #elif GEOGRAPHICLIB_PRECISION == 3
     typedef extended real;
+#elif GEOGRAPHICLIB_PRECISION == 4
+    typedef boost::multiprecision::float128 real;
+#elif GEOGRAPHICLIB_PRECISION == 5
+    typedef mpfr::mpreal real;
 #else
     typedef double real;
 #endif
 
     /**
+     * @return the number of bits of precision in a real number.
+     **********************************************************************/
+    static inline int digits() {
+#if GEOGRAPHICLIB_PRECISION != 5
+      return std::numeric_limits<real>::digits;
+#else
+      return std::numeric_limits<real>::digits();
+#endif
+    }
+
+    /**
+     * Set the binary precision of a real number.
+     *
+     * @param[in] ndigits the number of bits of precision.
+     * @return the resulting number of bits of precision.
+     *
+     * This only has an effect when GEOGRAPHICLIB_PRECISION == 5.
+     **********************************************************************/
+    static inline int set_digits(int ndigits) {
+#if GEOGRAPHICLIB_PRECISION != 5
+      (void)ndigits;
+#else
+      mpfr::mpreal::set_default_prec(ndigits >= 2 ? ndigits : 2);
+#endif
+      return digits();
+    }
+
+    /**
+     * @return the number of decimal digits of precision in a real number.
+     **********************************************************************/
+    static inline int digits10() {
+#if GEOGRAPHICLIB_PRECISION != 5
+      return std::numeric_limits<real>::digits10;
+#else
+      return std::numeric_limits<real>::digits10();
+#endif
+    }
+
+    /**
+     * Number of additional decimal digits of precision for real relative to
+     * double (0 for float).
+     **********************************************************************/
+    static inline int extra_digits() {
+      return
+        digits10() > std::numeric_limits<double>::digits10 ?
+        digits10() - std::numeric_limits<double>::digits10 : 0;
+    }
+
+#if GEOGRAPHICLIB_PRECISION <= 3
+    /**
      * Number of additional decimal digits of precision of real relative to
      * double (0 for float).
+     *
+     * <b>DEPRECATED</b>: use extra_digits() instead
      **********************************************************************/
     static const int extradigits =
       std::numeric_limits<real>::digits10 >
       std::numeric_limits<double>::digits10 ?
       std::numeric_limits<real>::digits10 -
       std::numeric_limits<double>::digits10 : 0;
+#endif
 
     /**
      * true if the machine is big-endian.
      **********************************************************************/
-    static const bool bigendian = WORDS_BIGENDIAN;
+    static const bool bigendian = GEOGRAPHICLIB_WORDS_BIGENDIAN;
 
     /**
      * @tparam T the type of the returned value.
      * @return π.
      **********************************************************************/
-    template<typename T> static inline T pi() throw()
-    { return std::atan2(T(0), -T(1)); }
+    template<typename T> static inline T pi() {
+      using std::atan2;
+      static const T pi = atan2(T(0), T(-1));
+      return pi;
+    }
     /**
      * A synonym for pi<real>().
      **********************************************************************/
-    static inline real pi() throw() { return pi<real>(); }
+    static inline real pi() { return pi<real>(); }
 
     /**
      * @tparam T the type of the returned value.
      * @return the number of radians in a degree.
      **********************************************************************/
-    template<typename T> static inline T degree() throw()
-    { return pi<T>() / T(180); }
+    template<typename T> static inline T degree() {
+      static const T degree = pi<T>() / 180;
+      return degree;
+    }
     /**
      * A synonym for degree<real>().
      **********************************************************************/
-    static inline real degree() throw() { return degree<real>(); }
+    static inline real degree() { return degree<real>(); }
 
     /**
      * Square a number.
@@ -150,10 +240,9 @@ namespace GeographicLib {
      * @param[in] x
      * @return <i>x</i><sup>2</sup>.
      **********************************************************************/
-    template<typename T> static inline T sq(T x) throw()
+    template<typename T> static inline T sq(T x)
     { return x * x; }
 
-#if defined(DOXYGEN)
     /**
      * The hypotenuse function avoiding underflow and overflow.
      *
@@ -162,98 +251,56 @@ namespace GeographicLib {
      * @param[in] y
      * @return sqrt(<i>x</i><sup>2</sup> + <i>y</i><sup>2</sup>).
      **********************************************************************/
-    template<typename T> static inline T hypot(T x, T y) throw() {
-      x = std::abs(x); y = std::abs(y);
-      T a = (std::max)(x, y), b = (std::min)(x, y) / (a ? a : 1);
-      return a * std::sqrt(1 + b * b);
+    template<typename T> static inline T hypot(T x, T y) {
+#if GEOGRAPHICLIB_CXX11_MATH
+      using std::hypot; return hypot(x, y);
+#else
+      using std::abs; using std::sqrt;
+      x = abs(x); y = abs(y);
+      if (x < y) std::swap(x, y); // Now x >= y >= 0
+      y /= (x ? x : 1);
+      return x * sqrt(1 + y * y);
       // For an alternative (square-root free) method see
       // C. Moler and D. Morrision (1983) http://dx.doi.org/10.1147/rd.276.0577
       // and A. A. Dubrulle (1983) http://dx.doi.org/10.1147/rd.276.0582
-    }
-#elif GEOGRAPHICLIB_CPLUSPLUS11_MATH || (defined(_MSC_VER) && _MSC_VER >= 1700)
-    template<typename T> static inline T hypot(T x, T y) throw()
-    { return std::hypot(x, y); }
-#  if HAVE_LONG_DOUBLE && defined(_MSC_VER) && _MSC_VER == 1700
-    // Visual C++ 11 doesn't have a long double overload for std::hypot --
-    // reported to MS on 2013-07-18
-    // http://connect.microsoft.com/VisualStudio/feedback/details/794416
-    // suppress the resulting "loss of data warning" with
-    static inline long double hypot(long double x, long double y) throw()
-    { return std::hypot(double(x), double(y)); }
-#  endif
-#elif defined(_MSC_VER)
-    static inline double hypot(double x, double y) throw()
-    { return _hypot(x, y); }
-#  if _MSC_VER < 1400
-    // Visual C++ 7.1/VS .NET 2003 does not have _hypotf()
-    static inline float hypot(float x, float y) throw()
-    { return float(_hypot(x, y)); }
-#  else
-    static inline float hypot(float x, float y) throw()
-    { return _hypotf(x, y); }
-#  endif
-#  if HAVE_LONG_DOUBLE
-    static inline long double hypot(long double x, long double y) throw()
-    { return _hypot(double(x), double(y)); } // Suppress loss of data warning
-#  endif
-#else
-    // Use overloading to define generic versions
-    static inline double hypot(double x, double y) throw()
-    { return ::hypot(x, y); }
-    static inline float hypot(float x, float y) throw()
-    { return ::hypotf(x, y); }
-#  if HAVE_LONG_DOUBLE
-    static inline long double hypot(long double x, long double y) throw()
-    { return ::hypotl(x, y); }
-#  endif
 #endif
+    }
 
-#if defined(DOXYGEN) || (defined(_MSC_VER) && !GEOGRAPHICLIB_CPLUSPLUS11_MATH)
     /**
-     * exp(\e x) − 1 accurate near \e x = 0.  This is taken from
-     * N. J. Higham, Accuracy and Stability of Numerical Algorithms, 2nd
-     * Edition (SIAM, 2002), Sec 1.14.1, p 19.
+     * exp(\e x) − 1 accurate near \e x = 0.
      *
      * @tparam T the type of the argument and the returned value.
      * @param[in] x
      * @return exp(\e x) − 1.
      **********************************************************************/
-    template<typename T> static inline T expm1(T x) throw() {
+    template<typename T> static inline T expm1(T x) {
+#if GEOGRAPHICLIB_CXX11_MATH
+      using std::expm1; return expm1(x);
+#else
+      using std::exp; using std::abs; using std::log;
       volatile T
-        y = std::exp(x),
+        y = exp(x),
         z = y - 1;
       // The reasoning here is similar to that for log1p.  The expression
       // mathematically reduces to exp(x) - 1, and the factor z/log(y) = (y -
       // 1)/log(y) is a slowly varying quantity near y = 1 and is accurately
       // computed.
-      return std::abs(x) > 1 ? z : (z == 0 ? x : x * z / std::log(y));
-    }
-#elif GEOGRAPHICLIB_CPLUSPLUS11_MATH
-    template<typename T> static inline T expm1(T x) throw()
-    { return std::expm1(x); }
-#else
-    static inline double expm1(double x) throw() { return ::expm1(x); }
-    static inline float expm1(float x) throw() { return ::expm1f(x); }
-#  if HAVE_LONG_DOUBLE
-    static inline long double expm1(long double x) throw()
-    { return ::expm1l(x); }
-#  endif
+      return abs(x) > 1 ? z : (z == 0 ? x : x * z / log(y));
 #endif
+    }
 
-#if defined(DOXYGEN) || (defined(_MSC_VER) && !GEOGRAPHICLIB_CPLUSPLUS11_MATH)
     /**
      * log(1 + \e x) accurate near \e x = 0.
      *
-     * This is taken from D. Goldberg,
-     * <a href="http://dx.doi.org/10.1145/103162.103163">What every computer
-     * scientist should know about floating-point arithmetic</a> (1991),
-     * Theorem 4.  See also, Higham (op. cit.), Answer to Problem 1.5, p 528.
-     *
      * @tparam T the type of the argument and the returned value.
      * @param[in] x
      * @return log(1 + \e x).
      **********************************************************************/
-    template<typename T> static inline T log1p(T x) throw() {
+    template<typename T> static inline T log1p(T x) {
+#if GEOGRAPHICLIB_CXX11_MATH
+      using std::log1p; return log1p(x);
+#else
+      using std::log;
       volatile T
         y = 1 + x,
         z = y - 1;
@@ -261,75 +308,44 @@ namespace GeographicLib {
       // approx x, thus log(y)/z (which is nearly constant near z = 0) returns
       // a good approximation to the true log(1 + x)/x.  The multiplication x *
       // (log(y)/z) introduces little additional error.
-      return z == 0 ? x : x * std::log(y) / z;
-    }
-#elif GEOGRAPHICLIB_CPLUSPLUS11_MATH
-    template<typename T> static inline T log1p(T x) throw()
-    { return std::log1p(x); }
-#else
-    static inline double log1p(double x) throw() { return ::log1p(x); }
-    static inline float log1p(float x) throw() { return ::log1pf(x); }
-#  if HAVE_LONG_DOUBLE
-    static inline long double log1p(long double x) throw()
-    { return ::log1pl(x); }
-#  endif
+      return z == 0 ? x : x * log(y) / z;
 #endif
+    }
 
-#if defined(DOXYGEN) || (defined(_MSC_VER) && !GEOGRAPHICLIB_CPLUSPLUS11_MATH)
     /**
-     * The inverse hyperbolic sine function.  This is defined in terms of
-     * Math::log1p(\e x) in order to maintain accuracy near \e x = 0.  In
-     * addition, the odd parity of the function is enforced.
+     * The inverse hyperbolic sine function.
      *
      * @tparam T the type of the argument and the returned value.
      * @param[in] x
      * @return asinh(\e x).
      **********************************************************************/
-    template<typename T> static inline T asinh(T x) throw() {
-      T y = std::abs(x);     // Enforce odd parity
+    template<typename T> static inline T asinh(T x) {
+#if GEOGRAPHICLIB_CXX11_MATH
+      using std::asinh; return asinh(x);
+#else
+      using std::abs; T y = abs(x); // Enforce odd parity
       y = log1p(y * (1 + y/(hypot(T(1), y) + 1)));
       return x < 0 ? -y : y;
-    }
-#elif GEOGRAPHICLIB_CPLUSPLUS11_MATH
-    template<typename T> static inline T asinh(T x) throw()
-    { return std::asinh(x); }
-#else
-    static inline double asinh(double x) throw() { return ::asinh(x); }
-    static inline float asinh(float x) throw() { return ::asinhf(x); }
-#  if HAVE_LONG_DOUBLE
-    static inline long double asinh(long double x) throw()
-    { return ::asinhl(x); }
-#  endif
 #endif
+    }
 
-#if defined(DOXYGEN) || (defined(_MSC_VER) && !GEOGRAPHICLIB_CPLUSPLUS11_MATH)
     /**
-     * The inverse hyperbolic tangent function.  This is defined in terms of
-     * Math::log1p(\e x) in order to maintain accuracy near \e x = 0.  In
-     * addition, the odd parity of the function is enforced.
+     * The inverse hyperbolic tangent function.
      *
      * @tparam T the type of the argument and the returned value.
      * @param[in] x
      * @return atanh(\e x).
      **********************************************************************/
-    template<typename T> static inline T atanh(T x) throw() {
-      T y = std::abs(x);     // Enforce odd parity
+    template<typename T> static inline T atanh(T x) {
+#if GEOGRAPHICLIB_CXX11_MATH
+      using std::atanh; return atanh(x);
+#else
+      using std::abs; T y = abs(x); // Enforce odd parity
       y = log1p(2 * y/(1 - y))/2;
       return x < 0 ? -y : y;
-    }
-#elif GEOGRAPHICLIB_CPLUSPLUS11_MATH
-    template<typename T> static inline T atanh(T x) throw()
-    { return std::atanh(x); }
-#else
-    static inline double atanh(double x) throw() { return ::atanh(x); }
-    static inline float atanh(float x) throw() { return ::atanhf(x); }
-#  if HAVE_LONG_DOUBLE
-    static inline long double atanh(long double x) throw()
-    { return ::atanhl(x); }
-#  endif
 #endif
+    }
 
-#if defined(DOXYGEN) || (defined(_MSC_VER) && !GEOGRAPHICLIB_CPLUSPLUS11_MATH)
     /**
      * The cube root function.
      *
@@ -337,20 +353,15 @@ namespace GeographicLib {
      * @param[in] x
      * @return the real cube root of \e x.
      **********************************************************************/
-    template<typename T> static inline T cbrt(T x) throw() {
-      T y = std::pow(std::abs(x), 1/T(3)); // Return the real cube root
-      return x < 0 ? -y : y;
-    }
-#elif GEOGRAPHICLIB_CPLUSPLUS11_MATH
-    template<typename T> static inline T cbrt(T x) throw()
-    { return std::cbrt(x); }
+    template<typename T> static inline T cbrt(T x) {
+#if GEOGRAPHICLIB_CXX11_MATH
+      using std::cbrt; return cbrt(x);
 #else
-    static inline double cbrt(double x) throw() { return ::cbrt(x); }
-    static inline float cbrt(float x) throw() { return ::cbrtf(x); }
-#  if HAVE_LONG_DOUBLE
-    static inline long double cbrt(long double x) throw() { return ::cbrtl(x); }
-#  endif
+      using std::abs; using std::pow;
+      T y = pow(abs(x), 1/T(3)); // Return the real cube root
+      return x < 0 ? -y : y;
 #endif
+    }
 
     /**
      * The error-free sum of two numbers.
@@ -364,10 +375,10 @@ namespace GeographicLib {
      * See D. E. Knuth, TAOCP, Vol 2, 4.2.2, Theorem B.  (Note that \e t can be
      * the same as one of the first two arguments.)
      **********************************************************************/
-    template<typename T> static inline T sum(T u, T v, T& t) throw() {
-      volatile T s = u + v;
-      volatile T up = s - v;
-      volatile T vpp = s - up;
+    template<typename T> static inline T sum(T u, T v, T& t) {
+      GEOGRAPHICLIB_VOLATILE T s = u + v;
+      GEOGRAPHICLIB_VOLATILE T up = s - v;
+      GEOGRAPHICLIB_VOLATILE T vpp = s - up;
       up -= u;
       vpp -= v;
       t = -(up + vpp);
@@ -385,7 +396,7 @@ namespace GeographicLib {
      *
      * \e x must lie in [−540°, 540°).
      **********************************************************************/
-    template<typename T> static inline T AngNormalize(T x) throw()
+    template<typename T> static inline T AngNormalize(T x)
     { return x >= 180 ? x - 360 : (x < -180 ? x + 360 : x); }
 
     /**
@@ -397,8 +408,8 @@ namespace GeographicLib {
      *
      * The range of \e x is unrestricted.
      **********************************************************************/
-    template<typename T> static inline T AngNormalize2(T x) throw()
-    { return AngNormalize<T>(std::fmod(x, T(360))); }
+    template<typename T> static inline T AngNormalize2(T x)
+    { using std::fmod; return AngNormalize<T>(fmod(x, T(360))); }
 
     /**
      * Difference of two angles reduced to [−180°, 180°]
@@ -415,7 +426,7 @@ namespace GeographicLib {
      * prescription allows −180° to be returned (e.g., if \e x is
      * tiny and negative and \e y = 180°).
      **********************************************************************/
-    template<typename T> static inline T AngDiff(T x, T y) throw() {
+    template<typename T> static inline T AngDiff(T x, T y) {
       T t, d = sum(-x, y, t);
       if ((d - T(180)) + t > T(0)) // y - x > 180
         d -= T(360);            // exact
@@ -424,7 +435,6 @@ namespace GeographicLib {
       return d + t;
     }
 
-#if defined(DOXYGEN)
     /**
      * Test for finiteness.
      *
@@ -432,33 +442,14 @@ namespace GeographicLib {
      * @param[in] x
      * @return true if number is finite, false if NaN or infinite.
      **********************************************************************/
-    template<typename T> static inline bool isfinite(T x) throw() {
-      return std::abs(x) <= (std::numeric_limits<T>::max)();
-    }
-#elif (defined(_MSC_VER) && !GEOGRAPHICLIB_CPLUSPLUS11_MATH)
-    template<typename T> static inline bool isfinite(T x) throw() {
-      return _finite(double(x)) != 0;
-    }
-#elif defined(_LIBCPP_VERSION)
-    // libc++ implements std::isfinite() as a template that only allows
-    // floating-point types.  isfinite is invoked by Utility::str to format
-    // numbers conveniently and this allows integer arguments, so we need to
-    // allow Math::isfinite to work on integers.
-    template<typename T> static inline
-    typename std::enable_if<std::is_floating_point<T>::value, bool>::type
-      isfinite(T x) throw() {
-      return std::isfinite(x);
-    }
-    template<typename T> static inline
-    typename std::enable_if<!std::is_floating_point<T>::value, bool>::type
-      isfinite(T /*x*/) throw() {
-      return true;
-    }
+    template<typename T> static inline bool isfinite(T x) {
+#if GEOGRAPHICLIB_CXX11_MATH
+      using std::isfinite; return isfinite(x);
 #else
-    template<typename T> static inline bool isfinite(T x) throw() {
-      return std::isfinite(x);
-    }
+      using std::abs;
+      return abs(x) <= (std::numeric_limits<T>::max)();
 #endif
+    }
 
     /**
      * The NaN (not a number)
@@ -466,7 +457,7 @@ namespace GeographicLib {
      * @tparam T the type of the returned value.
      * @return NaN if available, otherwise return the max real of type T.
      **********************************************************************/
-    template<typename T> static inline T NaN() throw() {
+    template<typename T> static inline T NaN() {
       return std::numeric_limits<T>::has_quiet_NaN ?
         std::numeric_limits<T>::quiet_NaN() :
         (std::numeric_limits<T>::max)();
@@ -474,7 +465,7 @@ namespace GeographicLib {
     /**
      * A synonym for NaN<real>().
      **********************************************************************/
-    static inline real NaN() throw() { return NaN<real>(); }
+    static inline real NaN() { return NaN<real>(); }
 
     /**
      * Test for NaN.
@@ -483,11 +474,11 @@ namespace GeographicLib {
      * @param[in] x
      * @return true if argument is a NaN.
      **********************************************************************/
-    template<typename T> static inline bool isnan(T x) throw() {
-#if defined(DOXYGEN) || (defined(_MSC_VER) && !GEOGRAPHICLIB_CPLUSPLUS11_MATH)
-      return x != x;
+    template<typename T> static inline bool isnan(T x) {
+#if GEOGRAPHICLIB_CXX11_MATH
+      using std::isnan; return isnan(x);
 #else
-      return std::isnan(x);
+      return x != x;
 #endif
     }
 
@@ -497,7 +488,7 @@ namespace GeographicLib {
      * @tparam T the type of the returned value.
      * @return infinity if available, otherwise return the max real.
      **********************************************************************/
-    template<typename T> static inline T infinity() throw() {
+    template<typename T> static inline T infinity() {
       return std::numeric_limits<T>::has_infinity ?
         std::numeric_limits<T>::infinity() :
         (std::numeric_limits<T>::max)();
@@ -505,7 +496,7 @@ namespace GeographicLib {
     /**
      * A synonym for infinity<real>().
      **********************************************************************/
-    static inline real infinity() throw() { return infinity<real>(); }
+    static inline real infinity() { return infinity<real>(); }
 
     /**
      * Swap the bytes of a quantity
@@ -524,6 +515,41 @@ namespace GeographicLib {
         std::swap(b.c[i], b.c[sizeof(T) - 1 - i]);
       return b.r;
     }
+
+#if GEOGRAPHICLIB_PRECISION == 4
+    typedef boost::math::policies::policy
+      < boost::math::policies::domain_error
+        <boost::math::policies::errno_on_error>,
+        boost::math::policies::pole_error
+        <boost::math::policies::errno_on_error>,
+        boost::math::policies::overflow_error
+        <boost::math::policies::errno_on_error>,
+        boost::math::policies::evaluation_error
+        <boost::math::policies::errno_on_error> >
+      boost_special_functions_policy;
+
+    static inline real hypot(real x, real y)
+    { return boost::math::hypot(x, y, boost_special_functions_policy()); }
+
+    static inline real expm1(real x)
+    { return boost::math::expm1(x, boost_special_functions_policy()); }
+
+    static inline real log1p(real x)
+    { return boost::math::log1p(x, boost_special_functions_policy()); }
+
+    static inline real asinh(real x)
+    { return boost::math::asinh(x, boost_special_functions_policy()); }
+
+    static inline real atanh(real x)
+    { return boost::math::atanh(x, boost_special_functions_policy()); }
+
+    static inline real cbrt(real x)
+    { return boost::math::cbrt(x, boost_special_functions_policy()); }
+
+    static inline bool isnan(real x) { return boost::math::isnan(x); }
+
+    static inline bool isfinite(real x) { return boost::math::isfinite(x); }
+#endif
   };
 
 } // namespace GeographicLib
diff --git a/include/GeographicLib/NormalGravity.hpp b/include/GeographicLib/NormalGravity.hpp
index 538422c..4e6df63 100644
--- a/include/GeographicLib/NormalGravity.hpp
+++ b/include/GeographicLib/NormalGravity.hpp
@@ -2,8 +2,8 @@
  * \file NormalGravity.hpp
  * \brief Header for GeographicLib::NormalGravity class
  *
- * Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed under
- * the MIT/X11 License.  For more information, see
+ * Copyright (c) Charles Karney (2011-2014) <charles at karney.com> and licensed
+ * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
 
@@ -65,9 +65,14 @@ namespace GeographicLib {
     real _a, _GM, _omega, _f, _J2, _omega2, _aomega2;
     real _e2, _ep2, _b, _E, _U0, _gammae, _gammap, _q0, _m, _k, _fstar;
     Geocentric _earth;
-    static Math::real qf(real ep2) throw();
-    static Math::real qpf(real ep2) throw();
-    Math::real Jn(int n) const throw();
+    // (atan(y)-(y-y^3/3))/y^5 (y = sqrt(x)) = 1/5-y/7+y^2/9-y^3/11...
+    static real atan5(real x);
+    // (atan(y)-(y-y^3/3+y^5/5))/y^7 (y = sqrt(x)) = -1/7+x/9-x^2/11+x^3/13...
+    static real atan7(real x);
+    static real qf(real ep2);
+    static real dq(real ep2);
+    static real qpf(real ep2);
+    real Jn(int n) const;
   public:
 
     /** \name Setting up the normal gravity
@@ -83,13 +88,13 @@ namespace GeographicLib {
      *   including the mass of the earth's atmosphere).
      * @param[in] omega the angular velocity (rad s<sup>−1</sup>).
      * @param[in] f the flattening of the ellipsoid.
-     * @param[in] J2 dynamical form factor.
+     * @param[in] J2 the dynamical form factor.
      * @exception if \e a is not positive or the other constants are
      *   inconsistent (see below).
      *
-     * Exactly one of \e f and \e J2 should be positive and this will be used
-     * to define the ellipsoid.  The shape of the ellipsoid can be given in one
-     * of two ways:
+     * If \e omega is non-zero, then exactly one of \e f and \e J2 should be
+     * positive and this will be used to define the ellipsoid.  The shape of
+     * the ellipsoid can be given in one of two ways:
      * - geometrically, the ellipsoid is defined by the flattening \e f = (\e a
      *   − \e b) / \e a, where \e a and \e b are the equatorial radius
      *   and the polar semi-axis.
@@ -97,6 +102,9 @@ namespace GeographicLib {
      *   <i>J</i><sub>2</sub> = (\e C − \e A) / <i>Ma</i><sup>2</sup>,
      *   where \e A and \e C are the equatorial and polar moments of inertia
      *   and \e M is the mass of the earth.
+     * .
+     * If \e omega, \e f, and \e J2 are all zero, then the ellipsoid becomes a
+     * sphere.
      **********************************************************************/
     NormalGravity(real a, real GM, real omega, real f, real J2);
 
@@ -123,7 +131,7 @@ namespace GeographicLib {
      * surface of the ellipsoid.  It includes the effects of the earth's
      * rotation.
      **********************************************************************/
-    Math::real SurfaceGravity(real lat) const throw();
+    Math::real SurfaceGravity(real lat) const;
 
     /**
      * Evaluate the gravity at an arbitrary point above (or below) the
@@ -144,7 +152,7 @@ namespace GeographicLib {
      * 0 and the returned value matches that of NormalGravity::SurfaceGravity.
      **********************************************************************/
     Math::real Gravity(real lat, real h, real& gammay, real& gammaz)
-      const throw();
+      const;
 
     /**
      * Evaluate the components of the acceleration due to gravity and the
@@ -167,7 +175,7 @@ namespace GeographicLib {
      * ∇<i>V</i><sub>0</sub> + ∇Φ = <b>Γ</b> + <b>f</b>.
      **********************************************************************/
     Math::real U(real X, real Y, real Z,
-                 real& gammaX, real& gammaY, real& gammaZ) const throw();
+                 real& gammaX, real& gammaY, real& gammaZ) const;
 
     /**
      * Evaluate the components of the acceleration due to gravity alone in
@@ -191,7 +199,7 @@ namespace GeographicLib {
      * used.
      **********************************************************************/
     Math::real V0(real X, real Y, real Z,
-                  real& GammaX, real& GammaY, real& GammaZ) const throw();
+                  real& GammaX, real& GammaY, real& GammaZ) const;
 
     /**
      * Evaluate the centrifugal acceleration in geocentric coordinates.
@@ -209,7 +217,7 @@ namespace GeographicLib {
      * NormalGravity::U sums the results of NormalGravity::V0 and
      * NormalGravity::Phi.
      **********************************************************************/
-    Math::real Phi(real X, real Y, real& fX, real& fY) const throw();
+    Math::real Phi(real X, real Y, real& fX, real& fY) const;
     ///@}
 
     /** \name Inspector functions
@@ -218,94 +226,123 @@ namespace GeographicLib {
     /**
      * @return true if the object has been initialized.
      **********************************************************************/
-    bool Init() const throw() { return _a > 0; }
+    bool Init() const { return _a > 0; }
 
     /**
      * @return \e a the equatorial radius of the ellipsoid (meters).  This is
      *   the value used in the constructor.
      **********************************************************************/
-    Math::real MajorRadius() const throw()
-    { return Init() ? _a : Math::NaN<real>(); }
+    Math::real MajorRadius() const
+    { return Init() ? _a : Math::NaN(); }
 
     /**
      * @return \e GM the mass constant of the ellipsoid
      *   (m<sup>3</sup> s<sup>−2</sup>).  This is the value used in the
      *   constructor.
      **********************************************************************/
-    Math::real MassConstant() const throw()
-    { return Init() ? _GM : Math::NaN<real>(); }
+    Math::real MassConstant() const
+    { return Init() ? _GM : Math::NaN(); }
 
     /**
-     * @return \e J<sub>n</sub> the dynamical form factors of the ellipsoid.
+     * @return <i>J</i><sub><i>n</i></sub> the dynamical form factors of the
+     *   ellipsoid.
      *
      * If \e n = 2 (the default), this is the value of <i>J</i><sub>2</sub>
      * used in the constructor.  Otherwise it is the zonal coefficient of the
      * Legendre harmonic sum of the normal gravitational potential.  Note that
-     * \e J<sub>n</sub> = 0 if \e n is odd.  In most gravity applications,
-     * fully normalized Legendre functions are used and the corresponding
-     * coefficient is <i>C</i><sub><i>n</i>0</sub> = −\e J<sub>n</sub> /
-     * sqrt(2 \e n + 1).
+     * <i>J</i><sub><i>n</i></sub> = 0 if \e n is odd.  In most gravity
+     * applications, fully normalized Legendre functions are used and the
+     * corresponding coefficient is <i>C</i><sub><i>n</i>0</sub> =
+     * −<i>J</i><sub><i>n</i></sub> / sqrt(2 \e n + 1).
      **********************************************************************/
-    Math::real DynamicalFormFactor(int n = 2) const throw()
-    { return Init() ? ( n == 2 ? _J2 : Jn(n)) : Math::NaN<real>(); }
+    Math::real DynamicalFormFactor(int n = 2) const
+    { return Init() ? ( n == 2 ? _J2 : Jn(n)) : Math::NaN(); }
 
     /**
      * @return ω the angular velocity of the ellipsoid (rad
      *   s<sup>−1</sup>).  This is the value used in the constructor.
      **********************************************************************/
-    Math::real AngularVelocity() const throw()
-    { return Init() ? _omega : Math::NaN<real>(); }
+    Math::real AngularVelocity() const
+    { return Init() ? _omega : Math::NaN(); }
 
     /**
      * @return <i>f</i> the flattening of the ellipsoid (\e a − \e b)/\e
      *   a.
      **********************************************************************/
-    Math::real Flattening() const throw()
-    { return Init() ? _f : Math::NaN<real>(); }
+    Math::real Flattening() const
+    { return Init() ? _f : Math::NaN(); }
 
     /**
      * @return γ<sub>e</sub> the normal gravity at equator (m
      *   s<sup>−2</sup>).
      **********************************************************************/
-    Math::real EquatorialGravity() const throw()
-    { return Init() ? _gammae : Math::NaN<real>(); }
+    Math::real EquatorialGravity() const
+    { return Init() ? _gammae : Math::NaN(); }
 
     /**
      * @return γ<sub>p</sub> the normal gravity at poles (m
      *   s<sup>−2</sup>).
      **********************************************************************/
-    Math::real PolarGravity() const throw()
-    { return Init() ? _gammap : Math::NaN<real>(); }
+    Math::real PolarGravity() const
+    { return Init() ? _gammap : Math::NaN(); }
 
     /**
      * @return <i>f*</i> the gravity flattening (γ<sub>p</sub> −
      *   γ<sub>e</sub>) / γ<sub>e</sub>.
      **********************************************************************/
-    Math::real GravityFlattening() const throw()
-    { return Init() ? _fstar : Math::NaN<real>(); }
+    Math::real GravityFlattening() const
+    { return Init() ? _fstar : Math::NaN(); }
 
     /**
      * @return <i>U</i><sub>0</sub> the constant normal potential for the
      *   surface of the ellipsoid (m<sup>2</sup> s<sup>−2</sup>).
      **********************************************************************/
-    Math::real SurfacePotential() const throw()
-    { return Init() ? _U0 : Math::NaN<real>(); }
+    Math::real SurfacePotential() const
+    { return Init() ? _U0 : Math::NaN(); }
 
     /**
      * @return the Geocentric object used by this instance.
      **********************************************************************/
-    const Geocentric& Earth() const throw() { return _earth; }
+    const Geocentric& Earth() const { return _earth; }
     ///@}
 
     /**
      * A global instantiation of NormalGravity for the WGS84 ellipsoid.
      **********************************************************************/
-    static const NormalGravity WGS84;
+    static const NormalGravity& WGS84();
 
     /**
      * A global instantiation of NormalGravity for the GRS80 ellipsoid.
      **********************************************************************/
-    static const NormalGravity GRS80;
+    static const NormalGravity& GRS80();
+
+    /**
+     * Compute the flattening from the dynamical form factor.
+     *
+     * @param[in] a equatorial radius (meters).
+     * @param[in] GM mass constant of the ellipsoid
+     *   (meters<sup>3</sup>/seconds<sup>2</sup>); this is the product of \e G
+     *   the gravitational constant and \e M the mass of the earth (usually
+     *   including the mass of the earth's atmosphere).
+     * @param[in] omega the angular velocity (rad s<sup>−1</sup>).
+     * @param[in] J2 the dynamical form factor.
+     * @return \e f the flattening of the ellipsoid.
+     **********************************************************************/
+    static Math::real J2ToFlattening(real a, real GM, real omega, real J2);
+
+    /**
+     * Compute the dynamical form factor from the flattening.
+     *
+     * @param[in] a equatorial radius (meters).
+     * @param[in] GM mass constant of the ellipsoid
+     *   (meters<sup>3</sup>/seconds<sup>2</sup>); this is the product of \e G
+     *   the gravitational constant and \e M the mass of the earth (usually
+     *   including the mass of the earth's atmosphere).
+     * @param[in] omega the angular velocity (rad s<sup>−1</sup>).
+     * @param[in] f the flattening of the ellipsoid.
+     * @return \e J2 the dynamical form factor.
+     **********************************************************************/
+    static Math::real FlatteningToJ2(real a, real GM, real omega, real f);
   };
 
 } // namespace GeographicLib
diff --git a/include/GeographicLib/OSGB.hpp b/include/GeographicLib/OSGB.hpp
index c055dd8..a7cb8d6 100644
--- a/include/GeographicLib/OSGB.hpp
+++ b/include/GeographicLib/OSGB.hpp
@@ -46,7 +46,7 @@ namespace GeographicLib {
     typedef Math::real real;
     static const std::string letters_;
     static const std::string digits_;
-    static const TransverseMercator OSGBTM_;
+    static const TransverseMercator& OSGBTM();
     static real northoffset_;
     static bool init_;
     enum {
@@ -63,7 +63,7 @@ namespace GeographicLib {
       // Maximum precision is um
       maxprec_ = 5 + 6,
     };
-    static real computenorthoffset() throw();
+    static real computenorthoffset();
     static void CheckCoords(real x, real y);
     OSGB();                     // Disable constructor
   public:
@@ -82,8 +82,8 @@ namespace GeographicLib {
      * should be in the range [−540°, 540°).
      **********************************************************************/
     static void Forward(real lat, real lon,
-                        real& x, real& y, real& gamma, real& k) throw() {
-      OSGBTM_.Forward(OriginLongitude(), lat, lon, x, y, gamma, k);
+                        real& x, real& y, real& gamma, real& k) {
+      OSGBTM().Forward(OriginLongitude(), lat, lon, x, y, gamma, k);
       x += FalseEasting();
       y += computenorthoffset();
     }
@@ -103,16 +103,16 @@ namespace GeographicLib {
      **********************************************************************/
 
     static void Reverse(real x, real y,
-                        real& lat, real& lon, real& gamma, real& k) throw() {
+                        real& lat, real& lon, real& gamma, real& k) {
       x -= FalseEasting();
       y -= computenorthoffset();
-      OSGBTM_.Reverse(OriginLongitude(), x, y, lat, lon, gamma, k);
+      OSGBTM().Reverse(OriginLongitude(), x, y, lat, lon, gamma, k);
     }
 
     /**
      * OSGB::Forward without returning the convergence and scale.
      **********************************************************************/
-    static void Forward(real lat, real lon, real& x, real& y) throw() {
+    static void Forward(real lat, real lon, real& x, real& y) {
       real gamma, k;
       Forward(lat, lon, x, y, gamma, k);
     }
@@ -120,7 +120,7 @@ namespace GeographicLib {
     /**
      * OSGB::Reverse without returning the convergence and scale.
      **********************************************************************/
-    static void Reverse(real x, real y, real& lat, real& lon) throw() {
+    static void Reverse(real x, real y, real& lat, real& lon) {
       real gamma, k;
       Reverse(x, y, lat, lon, gamma, k);
     }
@@ -182,9 +182,12 @@ namespace GeographicLib {
      * 10<sup>9.48401603−10</sup> m.  (The Airy 1830 value is returned
      * because the OSGB projection is based on this ellipsoid.)
      **********************************************************************/
-    static Math::real MajorRadius() throw()
+    static Math::real MajorRadius() {
     // result is about 6377563.3960320664406 m
-    { return real(20923713) * std::pow(real(10), real(0.48401603L) - 1); }
+      using std::pow;
+      return pow(real(10), real(48401603 - 100000000) / 100000000)
+        * 20923713;
+    }
 
     /**
      * @return \e f the inverse flattening of the Airy 1830 ellipsoid.
@@ -194,15 +197,15 @@ namespace GeographicLib {
      * 7767/2324857 = 1/299.32496459...  (The Airy 1830 value is returned
      * because the OSGB projection is based on this ellipsoid.)
      **********************************************************************/
-    static Math::real Flattening() throw()
-    { return real(20923713 - 20853810) / real(20923713); }
+    static Math::real Flattening()
+    { return real(20923713 - 20853810) / 20923713; }
 
     /// \cond SKIP
     /**
      * <b>DEPRECATED</b>
      * @return \e r the inverse flattening of the Airy 1830 ellipsoid.
      **********************************************************************/
-    static Math::real InverseFlattening() throw() { return 1/Flattening(); }
+    static Math::real InverseFlattening() { return 1/Flattening(); }
     /// \endcond
 
     /**
@@ -211,29 +214,31 @@ namespace GeographicLib {
      * C. J. Mugnier, Grids & Datums, PE&RS, Oct. 2003, states that
      * this is defined as 10<sup>9.9998268−10</sup>.
      **********************************************************************/
-    static Math::real CentralScale() throw()
-    { return std::pow(real(10), real(9998268 - 10000000) / real(10000000)); }
+    static Math::real CentralScale() {
+      using std::pow;
+      return pow(real(10), real(9998268 - 10000000) / 10000000);
+    }
 
     /**
      * @return latitude of the origin for the OSGB projection (49 degrees).
      **********************************************************************/
-    static Math::real OriginLatitude() throw() { return real(49); }
+    static Math::real OriginLatitude() { return real(49); }
 
     /**
      * @return longitude of the origin for the OSGB projection (−2
      *   degrees).
      **********************************************************************/
-    static Math::real OriginLongitude() throw() { return real(-2); }
+    static Math::real OriginLongitude() { return real(-2); }
 
     /**
      * @return false northing the OSGB projection (−100000 meters).
      **********************************************************************/
-    static Math::real FalseNorthing() throw() { return real(-100000); }
+    static Math::real FalseNorthing() { return real(-100000); }
 
     /**
      * @return false easting the OSGB projection (400000 meters).
      **********************************************************************/
-    static Math::real FalseEasting() throw() { return real(400000); }
+    static Math::real FalseEasting() { return real(400000); }
     ///@}
 
   };
diff --git a/include/GeographicLib/PolarStereographic.hpp b/include/GeographicLib/PolarStereographic.hpp
index 0ff0d73..a8b70ca 100644
--- a/include/GeographicLib/PolarStereographic.hpp
+++ b/include/GeographicLib/PolarStereographic.hpp
@@ -32,22 +32,32 @@ namespace GeographicLib {
   class GEOGRAPHICLIB_EXPORT PolarStereographic {
   private:
     typedef Math::real real;
+    real tol_;
     // _Cx used to be _C but g++ 3.4 has a macro of that name
     real _a, _f, _e2, _e, _e2m, _Cx, _c;
     real _k0;
-    static const real tol_;
-    static const real overflow_;
     static const int numit_ = 5;
+    static inline real overflow() {
+    // Overflow value s.t. atan(overflow_) = pi/2
+      static const real
+        overflow = 1 / Math::sq(std::numeric_limits<real>::epsilon());
+      return overflow;
+    }
     // tan(x) for x in [-pi/2, pi/2] ensuring that the sign is right
-    static inline real tanx(real x) throw() {
-      real t = std::tan(x);
+    static inline real tanx(real x) {
+      using std::tan;
+      real t = tan(x);
       // Write the tests this way to ensure that tanx(NaN()) is NaN()
-      return x >= 0 ? (!(t < 0) ? t : overflow_) : (!(t >= 0) ? t : -overflow_);
+      return x >= 0 ?
+        (!(t <  0) ? t :  overflow()) :
+        (!(t >= 0) ? t : -overflow());
     }
     // Return e * atanh(e * x) for f >= 0, else return
     // - sqrt(-e2) * atan( sqrt(-e2) * x) for f < 0
-    inline real eatanhe(real x) const throw()
-    { return _f >= 0 ? _e * Math::atanh(_e * x) : - _e * std::atan(_e * x); }
+    inline real eatanhe(real x) const {
+      using std::atan;
+      return _f >= 0 ? _e * Math::atanh(_e * x) : - _e * atan(_e * x);
+    }
   public:
 
     /**
@@ -55,10 +65,10 @@ namespace GeographicLib {
      *
      * @param[in] a equatorial radius (meters).
      * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
-     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
-     *   to 1/\e f.
+     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set
+     *   flattening to 1/\e f.
      * @param[in] k0 central scale factor.
-     * @exception GeographicErr if \e a, (1 − \e f ) \e a, or \e k0 is
+     * @exception GeographicErr if \e a, (1 − \e f) \e a, or \e k0 is
      *   not positive.
      **********************************************************************/
     PolarStereographic(real a, real f, real k0);
@@ -92,7 +102,7 @@ namespace GeographicLib {
      * be in the range [−540°, 540°).
      **********************************************************************/
     void Forward(bool northp, real lat, real lon,
-                 real& x, real& y, real& gamma, real& k) const throw();
+                 real& x, real& y, real& gamma, real& k) const;
 
     /**
      * Reverse projection, from polar stereographic to geographic.
@@ -110,13 +120,13 @@ namespace GeographicLib {
      * in the range [−180°, 180°).
      **********************************************************************/
     void Reverse(bool northp, real x, real y,
-                 real& lat, real& lon, real& gamma, real& k) const throw();
+                 real& lat, real& lon, real& gamma, real& k) const;
 
     /**
      * PolarStereographic::Forward without returning the convergence and scale.
      **********************************************************************/
     void Forward(bool northp, real lat, real lon,
-                 real& x, real& y) const throw() {
+                 real& x, real& y) const {
       real gamma, k;
       Forward(northp, lat, lon, x, y, gamma, k);
     }
@@ -125,7 +135,7 @@ namespace GeographicLib {
      * PolarStereographic::Reverse without returning the convergence and scale.
      **********************************************************************/
     void Reverse(bool northp, real x, real y,
-                 real& lat, real& lon) const throw() {
+                 real& lat, real& lon) const {
       real gamma, k;
       Reverse(northp, x, y, lat, lon, gamma, k);
     }
@@ -137,20 +147,20 @@ namespace GeographicLib {
      * @return \e a the equatorial radius of the ellipsoid (meters).  This is
      *   the value used in the constructor.
      **********************************************************************/
-    Math::real MajorRadius() const throw() { return _a; }
+    Math::real MajorRadius() const { return _a; }
 
     /**
      * @return \e f the flattening of the ellipsoid.  This is the value used in
      *   the constructor.
      **********************************************************************/
-    Math::real Flattening() const throw() { return _f; }
+    Math::real Flattening() const { return _f; }
 
     /// \cond SKIP
     /**
      * <b>DEPRECATED</b>
      * @return \e r the inverse flattening of the ellipsoid.
      **********************************************************************/
-    Math::real InverseFlattening() const throw() { return 1/_f; }
+    Math::real InverseFlattening() const { return 1/_f; }
     /// \endcond
 
     /**
@@ -158,7 +168,7 @@ namespace GeographicLib {
      * in the constructor and is the scale at the pole unless overridden by
      * PolarStereographic::SetScale.
      **********************************************************************/
-    Math::real CentralScale() const throw() { return _k0; }
+    Math::real CentralScale() const { return _k0; }
     ///@}
 
     /**
@@ -166,7 +176,7 @@ namespace GeographicLib {
      * and the UPS scale factor.  However, unlike UPS, no false easting or
      * northing is added.
      **********************************************************************/
-    static const PolarStereographic UPS;
+    static const PolarStereographic& UPS();
   };
 
 } // namespace GeographicLib
diff --git a/include/GeographicLib/PolygonArea.hpp b/include/GeographicLib/PolygonArea.hpp
index cc1edf1..aad39ae 100644
--- a/include/GeographicLib/PolygonArea.hpp
+++ b/include/GeographicLib/PolygonArea.hpp
@@ -2,7 +2,7 @@
  * \file PolygonArea.hpp
  * \brief Header for GeographicLib::PolygonArea class
  *
- * Copyright (c) Charles Karney (2010-2011) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2010-2014) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
@@ -11,7 +11,7 @@
 #define GEOGRAPHICLIB_POLYGONAREA_HPP 1
 
 #include <GeographicLib/Geodesic.hpp>
-#include <GeographicLib/Constants.hpp>
+#include <GeographicLib/GeodesicExact.hpp>
 #include <GeographicLib/Accumulator.hpp>
 
 namespace GeographicLib {
@@ -45,6 +45,12 @@ namespace GeographicLib {
    * There's an option to treat the points as defining a polyline instead of a
    * polygon; in that case, only the perimeter is computed.
    *
+   * This is a templated class to allow it to be used with either Geodesic and
+   * GeodesicExact.  GeographicLib::PolygonArea and
+   * GeographicLib::PolygonAreaExact are typedefs for these two cases.
+   *
+   * @tparam GeodType the geodesic class to use.
+   *
    * Example of use:
    * \include example-PolygonArea.cpp
    *
@@ -52,18 +58,19 @@ namespace GeographicLib {
    * providing access to the functionality of PolygonArea.
    **********************************************************************/
 
-  class GEOGRAPHICLIB_EXPORT PolygonArea {
+  template <class GeodType = Geodesic>
+  class PolygonAreaT {
   private:
     typedef Math::real real;
-    Geodesic _earth;
+    GeodType _earth;
     real _area0;                // Full ellipsoid area
     bool _polyline;             // Assume polyline (don't close and skip area)
     unsigned _mask;
     unsigned _num;
     int _crossings;
-    Accumulator<real> _areasum, _perimetersum;
+    Accumulator<> _areasum, _perimetersum;
     real _lat0, _lon0, _lat1, _lon1;
-    static inline int transit(real lon1, real lon2) throw() {
+    static inline int transit(real lon1, real lon2) {
       // Return 1 or -1 if crossing prime meridian in east or west direction.
       // Otherwise return zero.
       // Compute lon12 the same way as Geodesic::Inverse.
@@ -78,30 +85,29 @@ namespace GeographicLib {
   public:
 
     /**
-     * Constructor for PolygonArea.
+     * Constructor for PolygonAreaT.
      *
      * @param[in] earth the Geodesic object to use for geodesic calculations.
-     *   By default this uses the WGS84 ellipsoid.
      * @param[in] polyline if true that treat the points as defining a polyline
      *   instead of a polygon (default = false).
      **********************************************************************/
-    PolygonArea(const Geodesic& earth, bool polyline = false) throw()
+    PolygonAreaT(const GeodType& earth, bool polyline = false)
       : _earth(earth)
       , _area0(_earth.EllipsoidArea())
       , _polyline(polyline)
-      , _mask(Geodesic::LATITUDE | Geodesic::LONGITUDE | Geodesic::DISTANCE |
-              (_polyline ? Geodesic::NONE : Geodesic::AREA))
+      , _mask(GeodType::LATITUDE | GeodType::LONGITUDE | GeodType::DISTANCE |
+              (_polyline ? GeodType::NONE : GeodType::AREA))
     { Clear(); }
 
     /**
-     * Clear PolygonArea, allowing a new polygon to be started.
+     * Clear PolygonAreaT, allowing a new polygon to be started.
      **********************************************************************/
-    void Clear() throw() {
+    void Clear() {
       _num = 0;
       _crossings = 0;
       _areasum = 0;
       _perimetersum = 0;
-      _lat0 = _lon0 = _lat1 = _lon1 = Math::NaN<real>();
+      _lat0 = _lon0 = _lat1 = _lon1 = Math::NaN();
     }
 
     /**
@@ -113,7 +119,7 @@ namespace GeographicLib {
      * \e lat should be in the range [−90°, 90°] and \e
      * lon should be in the range [−540°, 540°).
      **********************************************************************/
-    void AddPoint(real lat, real lon) throw();
+    void AddPoint(real lat, real lon);
 
     /**
      * Add an edge to the polygon or polyline.
@@ -122,10 +128,10 @@ namespace GeographicLib {
      * @param[in] s distance from current point to next point (meters).
      *
      * \e azi should be in the range [−540°, 540°).  This does
-     * nothing if no points have been added yet.  Use PolygonArea::CurrentPoint
+     * nothing if no points have been added yet.  Use PolygonAreaT::CurrentPoint
      * to determine the position of the new vertex.
      **********************************************************************/
-    void AddEdge(real azi, real s) throw();
+    void AddEdge(real azi, real s);
 
     /**
      * Return the results so far.
@@ -142,7 +148,7 @@ namespace GeographicLib {
      * @return the number of points.
      **********************************************************************/
     unsigned Compute(bool reverse, bool sign,
-                     real& perimeter, real& area) const throw();
+                     real& perimeter, real& area) const;
 
     /**
      * Return the results assuming a tentative final test point is added;
@@ -150,7 +156,7 @@ namespace GeographicLib {
      * a running result for the perimeter and area as the user moves the mouse
      * cursor.  Ordinary floating point arithmetic is used to accumulate the
      * data for the test point; thus the area and perimeter returned are less
-     * accurate than if PolygonArea::AddPoint and PolygonArea::Compute are
+     * accurate than if PolygonAreaT::AddPoint and PolygonAreaT::Compute are
      * used.
      *
      * @param[in] lat the latitude of the test point (degrees).
@@ -171,7 +177,7 @@ namespace GeographicLib {
      * lon should be in the range [−540°, 540°).
      **********************************************************************/
     unsigned TestPoint(real lat, real lon, bool reverse, bool sign,
-                       real& perimeter, real& area) const throw();
+                       real& perimeter, real& area) const;
 
     /**
      * Return the results assuming a tentative final test point is added via an
@@ -179,8 +185,8 @@ namespace GeographicLib {
      * This lets you report a running result for the perimeter and area as the
      * user moves the mouse cursor.  Ordinary floating point arithmetic is used
      * to accumulate the data for the test point; thus the area and perimeter
-     * returned are less accurate than if PolygonArea::AddEdge and
-     * PolygonArea::Compute are used.
+     * returned are less accurate than if PolygonAreaT::AddEdge and
+     * PolygonAreaT::Compute are used.
      *
      * @param[in] azi azimuth at current point (degrees).
      * @param[in] s distance from current point to final test point (meters).
@@ -199,15 +205,15 @@ namespace GeographicLib {
      * \e azi should be in the range [−540°, 540°).
      **********************************************************************/
     unsigned TestEdge(real azi, real s, bool reverse, bool sign,
-                      real& perimeter, real& area) const throw();
+                      real& perimeter, real& area) const;
 
     /// \cond SKIP
     /**
      * <b>DEPRECATED</b>
-     * The old name for PolygonArea::TestPoint.
+     * The old name for PolygonAreaT::TestPoint.
      **********************************************************************/
     unsigned TestCompute(real lat, real lon, bool reverse, bool sign,
-                         real& perimeter, real& area) const throw() {
+                         real& perimeter, real& area) const {
       return TestPoint(lat, lon, reverse, sign, perimeter, area);
     }
     /// \endcond
@@ -220,13 +226,13 @@ namespace GeographicLib {
      *   the value inherited from the Geodesic object used in the constructor.
      **********************************************************************/
 
-    Math::real MajorRadius() const throw() { return _earth.MajorRadius(); }
+    Math::real MajorRadius() const { return _earth.MajorRadius(); }
 
     /**
      * @return \e f the flattening of the ellipsoid.  This is the value
      *   inherited from the Geodesic object used in the constructor.
      **********************************************************************/
-    Math::real Flattening() const throw() { return _earth.Flattening(); }
+    Math::real Flattening() const { return _earth.Flattening(); }
 
     /**
      * Report the previous vertex added to the polygon or polyline.
@@ -237,11 +243,28 @@ namespace GeographicLib {
      * If no points have been added, then NaNs are returned.  Otherwise, \e lon
      * will be in the range [−180°, 180°).
      **********************************************************************/
-    void CurrentPoint(real& lat, real& lon) const throw()
+    void CurrentPoint(real& lat, real& lon) const
     { lat = _lat1; lon = _lon1; }
     ///@}
   };
 
+  /**
+   * @relates PolygonAreaT
+   *
+   * Polygon areas using Geodesic.  This should be used if the flattening is
+   * small.
+   **********************************************************************/
+  typedef PolygonAreaT<Geodesic> PolygonArea;
+
+  /**
+   * @relates PolygonAreaT
+   *
+   * Polygon areas using GeodesicExact.  (But note that the implementation of
+   * areas in GeodesicExact uses a high order series and this is only accurate
+   * for modest flattenings.)
+   **********************************************************************/
+  typedef PolygonAreaT<GeodesicExact> PolygonAreaExact;
+
 } // namespace GeographicLib
 
 #endif  // GEOGRAPHICLIB_POLYGONAREA_HPP
diff --git a/include/GeographicLib/Rhumb.hpp b/include/GeographicLib/Rhumb.hpp
new file mode 100644
index 0000000..499e12a
--- /dev/null
+++ b/include/GeographicLib/Rhumb.hpp
@@ -0,0 +1,337 @@
+/**
+ * \file Rhumb.hpp
+ * \brief Header for GeographicLib::Rhumb and GeographicLib::RhumbLine classes
+ *
+ * Copyright (c) Charles Karney (2012) <charles at karney.com> and licensed under
+ * the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+#if !defined(GEOGRAPHICLIB_RHUMB_HPP)
+#define GEOGRAPHICLIB_RHUMB_HPP 1
+
+#include <GeographicLib/Constants.hpp>
+#include <GeographicLib/Ellipsoid.hpp>
+
+namespace GeographicLib {
+
+  class RhumbLine;
+
+  /**
+   * \brief Solve of the direct and inverse rhumb problems.
+   *
+   * The path of constant azimuth between two points on a ellipsoid at (\e
+   * lat1, \e lon1) and (\e lat2, \e lon2) is called the rhumb line (also
+   * called the loxodrome).  Its length is \e s12 and its azimuth is \e azi12
+   * and \e azi2.  (The azimuth is the heading measured clockwise from north.)
+   *
+   * Given \e lat1, \e lon1, \e azi12, and \e s12, we can determine \e lat2,
+   * and \e lon2.  This is the \e direct rhumb problem and its solution is
+   * given by the function Rhumb::Direct.
+   *
+   * Given \e lat1, \e lon1, \e lat2, and \e lon2, we can determine \e azi12
+   * and \e s12.  This is the \e inverse rhumb problem, whose solution is
+   * given by Rhumb::Inverse.  This finds the shortest such rhumb line, i.e.,
+   * the one that wraps no more than half way around the earth .
+   *
+   * Note that rhumb lines may be appreciably longer (up to 50%) than the
+   * corresponding Geodesic.  For example the distance between London Heathrow
+   * and Tokyo Narita via the rhumb line is 11400 km which is 18% longer than
+   * the geodesic distance 9600 km.
+   *
+   * For more information on rhumb lines see \ref rhumb.
+   *
+   * Example of use:
+   * \include example-Rhumb.cpp
+   **********************************************************************/
+
+  class  GEOGRAPHICLIB_EXPORT Rhumb {
+  private:
+    typedef Math::real real;
+    friend class RhumbLine;
+    Ellipsoid _ell;
+    bool _exact;
+    static const int tm_maxord = GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER;
+    static inline real overflow() {
+      // Overflow value s.t. atan(overflow_) = pi/2
+      static const real
+        overflow = 1 / Math::sq(std::numeric_limits<real>::epsilon());
+      return overflow;
+    }
+    static inline real tano(real x) {
+      using std::abs; using std::tan;
+      return
+        2 * abs(x) == Math::pi() ? (x < 0 ? - overflow() : overflow()) :
+        tan(x);
+    }
+    static inline real gd(real x)
+    { using std::atan; using std::sinh; return atan(sinh(x)); }
+
+    // Use divided differences to determine (mu2 - mu1) / (psi2 - psi1)
+    // accurately
+    //
+    // Definition: Df(x,y,d) = (f(x) - f(y)) / (x - y)
+    // See:
+    //   W. M. Kahan and R. J. Fateman,
+    //   Symbolic computation of divided differences,
+    //   SIGSAM Bull. 33(3), 7-28 (1999)
+    //   http://dx.doi.org/10.1145/334714.334716
+    //   http://www.cs.berkeley.edu/~fateman/papers/divdiff.pdf
+
+    static inline real Dtan(real x, real y) {
+      real d = x - y, tx = tano(x), ty = tano(y), txy = tx * ty;
+      return d ? (2 * txy > -1 ? (1 + txy) * tano(d) : tx - ty) / d :
+        1 + txy;
+    }
+    static inline real Datan(real x, real y) {
+      using std::atan;
+      real d = x - y, xy = x * y;
+      return d ? (2 * xy > -1 ? atan( d / (1 + xy) ) : atan(x) - atan(y)) / d :
+        1 / (1 + xy);
+    }
+    static inline real Dsin(real x, real y) {
+      using std::sin; using std::cos;
+      real d = (x - y)/2;
+      return cos((x + y)/2) * (d ? sin(d) / d : 1);
+    }
+    static inline real Dsinh(real x, real y) {
+      using std::sinh; using std::cosh;
+      real d = (x - y)/2;
+      return cosh((x + y)/2) * (d ? sinh(d) / d : 1);
+    }
+    static inline real Dasinh(real x, real y) {
+      real d = x - y,
+        hx = Math::hypot(real(1), x), hy = Math::hypot(real(1), y);
+      return d ? Math::asinh(x*y > 0 ? d * (x + y) / (x*hy + y*hx) :
+                             x*hy - y*hx) / d :
+        1 / hx;
+    }
+    static inline real Dgd(real x, real y) {
+      using std::sinh;
+      return Datan(sinh(x), sinh(y)) * Dsinh(x, y);
+    }
+    static inline real Dgdinv(real x, real y) {
+      return Dasinh(tano(x), tano(y)) * Dtan(x, y);
+    }
+    // Copied from LambertConformalConic...
+    // e * atanh(e * x) = log( ((1 + e*x)/(1 - e*x))^(e/2) ) if f >= 0
+    // - sqrt(-e2) * atan( sqrt(-e2) * x)                    if f < 0
+    inline real eatanhe(real x) const {
+      using std::atan;
+      return _ell._f >= 0 ? _ell._e * Math::atanh(_ell._e * x) :
+        - _ell._e * atan(_ell._e * x);
+    }
+    // Copied from LambertConformalConic...
+    // Deatanhe(x,y) = eatanhe((x-y)/(1-e^2*x*y))/(x-y)
+    inline real Deatanhe(real x, real y) const {
+      real t = x - y, d = 1 - _ell._e2 * x * y;
+      return t ? eatanhe(t / d) / t : _ell._e2 / d;
+    }
+    // (E(x) - E(y)) / (x - y) -- E = incomplete elliptic integral of 2nd kind
+    real DE(real x, real y) const;
+    // (mux - muy) / (phix - phiy) using elliptic integrals
+    real DRectifying(real latx, real laty) const;
+    // (psix - psiy) / (phix - phiy)
+    real DIsometric(real latx, real laty) const;
+
+    // (sum(c[j]*sin(2*j*x),j=1..n) - sum(c[j]*sin(2*j*x),j=1..n)) / (x - y)
+    static real SinSeries(real x, real y, const real c[], int n);
+    // (mux - muy) / (chix - chiy) using Krueger's series
+    real DConformalToRectifying(real chix, real chiy) const;
+    // (chix - chiy) / (mux - muy) using Krueger's series
+    real DRectifyingToConformal(real mux, real muy) const;
+
+    // (mux - muy) / (psix - psiy)
+    real DIsometricToRectifying(real psix, real psiy) const;
+    // (psix - psiy) / (mux - muy)
+    real DRectifyingToIsometric(real mux, real muy) const;
+
+  public:
+
+    /**
+     * Constructor for a ellipsoid with
+     *
+     * @param[in] a equatorial radius (meters).
+     * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
+     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set
+     *   flattening to 1/\e f.
+     * @param[in] exact if true (the default) use an addition theorem for
+     *   elliptic integrals to compute divided differences; otherwise use
+     *   series expansion (accurate for |<i>f</i>| < 0.01).
+     * @exception GeographicErr if \e a or (1 − \e f) \e a is not
+     *   positive.
+     *
+     * See \ref rhumb, for a detailed description of the \e exact parameter.
+     **********************************************************************/
+    Rhumb(real a, real f, bool exact = true) : _ell(a, f), _exact(exact) {}
+
+    /**
+     * Solve the direct rhumb problem.
+     *
+     * @param[in] lat1 latitude of point 1 (degrees).
+     * @param[in] lon1 longitude of point 1 (degrees).
+     * @param[in] azi12 azimuth of the rhumb line (degrees).
+     * @param[in] s12 distance between point 1 and point 2 (meters); it can be
+     *   negative.
+     * @param[out] lat2 latitude of point 2 (degrees).
+     * @param[out] lon2 longitude of point 2 (degrees).
+     *
+     * \e lat1 should be in the range [−90°, 90°]; \e lon1 and \e
+     * azi1 should be in the range [−540°, 540°).  The values of
+     * \e lon2 and \e azi2 returned are in the range [−180°,
+     * 180°).
+     *
+     * If point 1 is a pole, the cosine of its latitude is taken to be
+     * 1/ε<sup>2</sup> (where ε is 2<sup>-52</sup>).  This
+     * position, which is extremely close to the actual pole, allows the
+     * calculation to be carried out in finite terms.  If \e s12 is large
+     * enough that the rhumb line crosses a pole, the longitude of point 2
+     * is indeterminate (a NaN is returned for \e lon2).
+     **********************************************************************/
+    void Direct(real lat1, real lon1, real azi12, real s12,
+                real& lat2, real& lon2) const;
+
+    /**
+     * Solve the inverse rhumb problem.
+     *
+     * @param[in] lat1 latitude of point 1 (degrees).
+     * @param[in] lon1 longitude of point 1 (degrees).
+     * @param[in] lat2 latitude of point 2 (degrees).
+     * @param[in] lon2 longitude of point 2 (degrees).
+     * @param[out] s12 rhumb distance between point 1 and point 2 (meters).
+     * @param[out] azi12 azimuth of the rhumb line (degrees).
+     *
+     * The shortest rhumb line is found.  \e lat1 and \e lat2 should be in the
+     * range [−90°, 90°]; \e lon1 and \e lon2 should be in the
+     * range [−540°, 540°).  The value of \e azi12 returned is in
+     * the range [−180°, 180°).
+     *
+     * If either point is a pole, the cosine of its latitude is taken to be
+     * 1/ε<sup>2</sup> (where ε is 2<sup>-52</sup>).  This
+     * position, which is extremely close to the actual pole, allows the
+     * calculation to be carried out in finite terms.
+     **********************************************************************/
+    void Inverse(real lat1, real lon1, real lat2, real lon2,
+                 real& s12, real& azi12) const;
+
+    /**
+     * Set up to compute several points on a single rhumb line.
+     *
+     * @param[in] lat1 latitude of point 1 (degrees).
+     * @param[in] lon1 longitude of point 1 (degrees).
+     * @param[in] azi12 azimuth of the rhumb line (degrees).
+     * @return a RhumbLine object.
+     *
+     * \e lat1 should be in the range [−90°, 90°]; \e lon1 and \e
+     * azi12 should be in the range [−540°, 540°).
+     *
+     * If point 1 is a pole, the cosine of its latitude is taken to be
+     * 1/ε<sup>2</sup> (where ε is 2<sup>-52</sup>).  This
+     * position, which is extremely close to the actual pole, allows the
+     * calculation to be carried out in finite terms.
+     **********************************************************************/
+    RhumbLine Line(real lat1, real lon1, real azi12) const;
+
+    /** \name Inspector functions.
+     **********************************************************************/
+    ///@{
+
+    /**
+     * @return \e a the equatorial radius of the ellipsoid (meters).  This is
+     *   the value used in the constructor.
+     **********************************************************************/
+    Math::real MajorRadius() const { return _ell.MajorRadius(); }
+
+    /**
+     * @return \e f the  flattening of the ellipsoid.  This is the
+     *   value used in the constructor.
+     **********************************************************************/
+    Math::real Flattening() const { return _ell.Flattening(); }
+
+    /**
+     * A global instantiation of Rhumb with the parameters for the WGS84
+     * ellipsoid.
+     **********************************************************************/
+    static const Rhumb& WGS84();
+  };
+
+  /**
+   * \brief Find a sequence of points on a single rhumb line.
+   *
+   * RhumbLine facilitates the determination of a series of points on a single
+   * rhumb line.  The starting point (\e lat1, \e lon1) and the azimuth \e
+   * azi12 are specified in the call to Rhumb::Line which returns a RhumbLine
+   * object.  RhumbLine.Position returns the location of point 2 a distance \e
+   * s12 along the rhumb line.
+
+   * There is no public constructor for this class.  (Use Rhumb::Line to create
+   * an instance.)  The Rhumb object used to create a RhumbLine must stay in
+   * scope as long as the RhumbLine.
+   *
+   * Example of use:
+   * \include example-RhumbLine.cpp
+   **********************************************************************/
+
+  class  GEOGRAPHICLIB_EXPORT RhumbLine {
+  private:
+    typedef Math::real real;
+    friend class Rhumb;
+    const Rhumb& _rh;
+    bool _exact;
+    real _lat1, _lon1, _azi12, _salp, _calp, _mu1, _psi1, _r1;
+    RhumbLine& operator=(const RhumbLine&); // copy assignment not allowed
+    RhumbLine(const Rhumb& rh, real lat1, real lon1, real azi12,
+              bool exact);
+  public:
+    /**
+     * Compute the position of point 2 which is a distance \e s12 (meters) from
+     * point 1.
+     *
+     * @param[in] s12 distance between point 1 and point 2 (meters); it can be
+     *   negative.
+     * @param[out] lat2 latitude of point 2 (degrees).
+     * @param[out] lon2 longitude of point 2 (degrees).
+     *
+     * The values of \e lon2 and \e azi2 returned are in the range
+     * [−180°, 180°).
+     *
+     * If \e s12 is large enough that the rhumb line crosses a pole, the
+     * longitude of point 2 is indeterminate (a NaN is returned for \e lon2).
+     **********************************************************************/
+    void Position(real s12, real& lat2, real& lon2) const;
+
+    /** \name Inspector functions
+     **********************************************************************/
+    ///@{
+
+    /**
+     * @return \e lat1 the latitude of point 1 (degrees).
+     **********************************************************************/
+    Math::real Latitude() const { return _lat1; }
+
+    /**
+     * @return \e lon1 the longitude of point 1 (degrees).
+     **********************************************************************/
+    Math::real Longitude() const { return _lon1; }
+
+    /**
+     * @return \e azi12 the azimuth of the rhumb line (degrees).
+     **********************************************************************/
+    Math::real Azimuth() const { return  _azi12; }
+
+    /**
+     * @return \e a the equatorial radius of the ellipsoid (meters).  This is
+     *   the value inherited from the Rhumb object used in the constructor.
+     **********************************************************************/
+    Math::real MajorRadius() const { return _rh.MajorRadius(); }
+
+    /**
+     * @return \e f the flattening of the ellipsoid.  This is the value
+     *   inherited from the Rhumb object used in the constructor.
+     **********************************************************************/
+    Math::real Flattening() const { return _rh.Flattening(); }
+  };
+
+} // namespace GeographicLib
+
+#endif  // GEOGRAPHICLIB_RHUMB_HPP
diff --git a/include/GeographicLib/SphericalEngine.hpp b/include/GeographicLib/SphericalEngine.hpp
index 62b53c4..994ae30 100644
--- a/include/GeographicLib/SphericalEngine.hpp
+++ b/include/GeographicLib/SphericalEngine.hpp
@@ -45,9 +45,18 @@ namespace GeographicLib {
     friend class CircularEngine; // CircularEngine needs access to root_, scale_
     // An internal scaling of the coefficients to avoid overflow in
     // intermediate calculations.
-    static const real scale_;
+    static real scale() {
+      using std::pow;
+      return pow(real(std::numeric_limits<real>::radix),
+                 -3 * (std::numeric_limits<real>::max_exponent < (1<<14) ?
+                       std::numeric_limits<real>::max_exponent : (1<<14)) / 5);
+    }
     // Move latitudes near the pole off the axis by this amount.
-    static const real eps_;
+    static real eps() {
+      using std::sqrt;
+      return std::numeric_limits<real>::epsilon() *
+        sqrt(std::numeric_limits<real>::epsilon());
+    }
     static const std::vector<real> Z_;
     SphericalEngine();          // Disable constructor
   public:
@@ -165,15 +174,15 @@ namespace GeographicLib {
       /**
        * @return \e N the degree giving storage layout for \e C and \e S.
        **********************************************************************/
-      inline int N() const throw() { return _Nx; }
+      inline int N() const { return _Nx; }
       /**
        * @return \e nmx the maximum degree to be used.
        **********************************************************************/
-      inline int nmx() const throw() { return _nmx; }
+      inline int nmx() const { return _nmx; }
       /**
        * @return \e mmx the maximum order to be used.
        **********************************************************************/
-      inline int mmx() const throw() { return _mmx; }
+      inline int mmx() const { return _mmx; }
       /**
        * The one-dimensional index into \e C and \e S.
        *
@@ -181,7 +190,7 @@ namespace GeographicLib {
        * @param[in] m the order.
        * @return the one-dimensional index.
        **********************************************************************/
-      inline int index(int n, int m) const throw()
+      inline int index(int n, int m) const
       { return m * _Nx - m * (m - 1) / 2 + n; }
       /**
        * An element of \e C.
@@ -230,7 +239,7 @@ namespace GeographicLib {
        * @return the size of the vector of cosine terms as stored in column
        *   major order.
        **********************************************************************/
-      static inline int Csize(int N, int M) throw()
+      static inline int Csize(int N, int M)
       { return (M + 1) * (2 * N - M + 2) / 2; }
 
       /**
@@ -241,7 +250,7 @@ namespace GeographicLib {
        * @return the size of the vector of cosine terms as stored in column
        *   major order.
        **********************************************************************/
-      static inline int Ssize(int N, int M) throw ()
+      static inline int Ssize(int N, int M)
       { return Csize(N, M) - (N + 1); }
 
       /**
@@ -301,7 +310,7 @@ namespace GeographicLib {
     template<bool gradp, normalization norm, int L>
       static Math::real Value(const coeff c[], const real f[],
                               real x, real y, real z, real a,
-                              real& gradx, real& grady, real& gradz) throw();
+                              real& gradx, real& grady, real& gradz);
 
     /**
      * Create a CircularEngine object
diff --git a/include/GeographicLib/SphericalHarmonic.hpp b/include/GeographicLib/SphericalHarmonic.hpp
index a030c69..4077cf4 100644
--- a/include/GeographicLib/SphericalHarmonic.hpp
+++ b/include/GeographicLib/SphericalHarmonic.hpp
@@ -32,10 +32,10 @@ namespace GeographicLib {
    * - \e q = <i>a</i>/<i>r</i>,
    * - θ = atan2(\e p, \e z) = the spherical \e colatitude,
    * - λ = atan2(\e y, \e x) = the longitude.
-   * - P<sub>\e nm</sub>(\e t) is the associated Legendre polynomial of degree
-   *   \e n and order \e m.
+   * - P<sub><i>nm</i></sub>(\e t) is the associated Legendre polynomial of
+   *   degree \e n and order \e m.
    *
-   * Two normalizations are supported for P<sub>\e nm</sub>
+   * Two normalizations are supported for P<sub><i>nm</i></sub>
    * - fully normalized denoted by SphericalHarmonic::FULL.
    * - Schmidt semi-normalized denoted by SphericalHarmonic::SCHMIDT.
    *
@@ -71,9 +71,10 @@ namespace GeographicLib {
       /**
        * Fully normalized associated Legendre polynomials.
        *
-       * These are defined by <i>P</i><sub><i>nm</i></sub><sup>full</sup>(\e z)
-       * = (−1)<sup><i>m</i></sup> sqrt(\e k (2\e n + 1) (\e n − \e
-       * m)! / (\e n + \e m)!)
+       * These are defined by
+       * <i>P</i><sub><i>nm</i></sub><sup>full</sup>(\e z)
+       * = (−1)<sup><i>m</i></sup>
+       * sqrt(\e k (2\e n + 1) (\e n − \e m)! / (\e n + \e m)!)
        * <b>P</b><sub><i>n</i></sub><sup><i>m</i></sup>(\e z), where
        * <b>P</b><sub><i>n</i></sub><sup><i>m</i></sup>(\e z) is Ferrers
        * function (also known as the Legendre function on the cut or the
@@ -92,10 +93,12 @@ namespace GeographicLib {
       /**
        * Schmidt semi-normalized associated Legendre polynomials.
        *
-       * These are defined by <i>P</i><sub><i>nm</i></sub><sup>schmidt</sup>(\e
-       * z) = (−1)<sup><i>m</i></sup> sqrt(\e k (\e n − \e m)! /
-       * (\e n + \e m)!)  <b>P</b><sub><i>n</i></sub><sup><i>m</i></sup>(\e z),
-       * where <b>P</b><sub><i>n</i></sub><sup><i>m</i></sup>(\e z) is Ferrers
+       * These are defined by
+       * <i>P</i><sub><i>nm</i></sub><sup>schmidt</sup>(\e z)
+       * = (−1)<sup><i>m</i></sup>
+       * sqrt(\e k (\e n − \e m)! / (\e n + \e m)!)
+       * <b>P</b><sub><i>n</i></sub><sup><i>m</i></sup>(\e z), where
+       * <b>P</b><sub><i>n</i></sub><sup><i>m</i></sup>(\e z) is Ferrers
        * function (also known as the Legendre function on the cut or the
        * associated Legendre polynomial) http://dlmf.nist.gov/14.7.E10 and \e k
        * = 1 for \e m = 0 and \e k = 2 otherwise.
@@ -126,8 +129,8 @@ namespace GeographicLib {
     /**
      * Constructor with a full set of coefficients specified.
      *
-     * @param[in] C the coefficients \e C<sub>\e nm</sub>.
-     * @param[in] S the coefficients \e S<sub>\e nm</sub>.
+     * @param[in] C the coefficients <i>C</i><sub><i>nm</i></sub>.
+     * @param[in] S the coefficients <i>S</i><sub><i>nm</i></sub>.
      * @param[in] N the maximum degree and order of the sum
      * @param[in] a the reference radius appearing in the definition of the
      *   sum.
@@ -138,10 +141,11 @@ namespace GeographicLib {
      * @exception GeographicErr if \e C or \e S is not big enough to hold the
      *   coefficients.
      *
-     * The coefficients \e C<sub>\e nm</sub> and \e S<sub>\e nm</sub> are
-     * stored in the one-dimensional vectors \e C and \e S which must contain
-     * (\e N + 1)(\e N + 2)/2 and N (\e N + 1)/2 elements, respectively, stored
-     * in "column-major" order.  Thus for \e N = 3, the order would be:
+     * The coefficients <i>C</i><sub><i>nm</i></sub> and
+     * <i>S</i><sub><i>nm</i></sub> are stored in the one-dimensional vectors
+     * \e C and \e S which must contain (\e N + 1)(\e N + 2)/2 and \e N (\e N +
+     * 1)/2 elements, respectively, stored in "column-major" order.  Thus for
+     * \e N = 3, the order would be:
      * <i>C</i><sub>00</sub>,
      * <i>C</i><sub>10</sub>,
      * <i>C</i><sub>20</sub>,
@@ -171,8 +175,8 @@ namespace GeographicLib {
     /**
      * Constructor with a subset of coefficients specified.
      *
-     * @param[in] C the coefficients \e C<sub>\e nm</sub>.
-     * @param[in] S the coefficients \e S<sub>\e nm</sub>.
+     * @param[in] C the coefficients <i>C</i><sub><i>nm</i></sub>.
+     * @param[in] S the coefficients <i>S</i><sub><i>nm</i></sub>.
      * @param[in] N the degree used to determine the layout of \e C and \e S.
      * @param[in] nmx the maximum degree used in the sum.  The sum over \e n is
      *   from 0 thru \e nmx.
@@ -218,7 +222,7 @@ namespace GeographicLib {
      * This routine requires constant memory and thus never throws an
      * exception.
      **********************************************************************/
-    Math::real operator()(real x, real y, real z) const throw() {
+    Math::real operator()(real x, real y, real z) const {
       real f[] = {1};
       real v = 0;
       real dummy;
@@ -252,7 +256,7 @@ namespace GeographicLib {
      * an exception.
      **********************************************************************/
     Math::real operator()(real x, real y, real z,
-                          real& gradx, real& grady, real& gradz) const throw() {
+                          real& gradx, real& grady, real& gradz) const {
       real f[] = {1};
       real v = 0;
       switch (_norm) {
@@ -341,7 +345,7 @@ namespace GeographicLib {
     /**
      * @return the zeroth SphericalEngine::coeff object.
      **********************************************************************/
-    const SphericalEngine::coeff& Coefficients() const throw()
+    const SphericalEngine::coeff& Coefficients() const
     { return _c[0]; }
   };
 
diff --git a/include/GeographicLib/SphericalHarmonic1.hpp b/include/GeographicLib/SphericalHarmonic1.hpp
index d46741b..e07ec15 100644
--- a/include/GeographicLib/SphericalHarmonic1.hpp
+++ b/include/GeographicLib/SphericalHarmonic1.hpp
@@ -21,8 +21,9 @@ namespace GeographicLib {
    * \brief Spherical harmonic series with a correction to the coefficients
    *
    * This classes is similar to SphericalHarmonic, except that the coefficients
-   * \e C<sub>\e nm</sub> are replaced by \e C<sub>\e nm</sub> + \e tau
-   * C'<sub>\e nm</sub> (and similarly for \e S<sub>\e nm</sub>).
+   * <i>C</i><sub><i>nm</i></sub> are replaced by
+   * <i>C</i><sub><i>nm</i></sub> + \e tau <i>C'</i><sub><i>nm</i></sub> (and
+   * similarly for <i>S</i><sub><i>nm</i></sub>).
    *
    * Example of use:
    * \include example-SphericalHarmonic1.cpp
@@ -65,13 +66,14 @@ namespace GeographicLib {
     /**
      * Constructor with a full set of coefficients specified.
      *
-     * @param[in] C the coefficients \e C<sub>\e nm</sub>.
-     * @param[in] S the coefficients \e S<sub>\e nm</sub>.
+     * @param[in] C the coefficients <i>C</i><sub><i>nm</i></sub>.
+     * @param[in] S the coefficients <i>S</i><sub><i>nm</i></sub>.
      * @param[in] N the maximum degree and order of the sum
-     * @param[in] C1 the coefficients \e C'<sub>\e nm</sub>.
-     * @param[in] S1 the coefficients \e S'<sub>\e nm</sub>.
+     * @param[in] C1 the coefficients <i>C'</i><sub><i>nm</i></sub>.
+     * @param[in] S1 the coefficients <i>S'</i><sub><i>nm</i></sub>.
      * @param[in] N1 the maximum degree and order of the correction
-     *   coefficients \e C'<sub>\e nm</sub> and \e S'<sub>\e nm</sub>.
+     *   coefficients <i>C'</i><sub><i>nm</i></sub> and
+     *   <i>S'</i><sub><i>nm</i></sub>.
      * @param[in] a the reference radius appearing in the definition of the
      *   sum.
      * @param[in] norm the normalization for the associated Legendre
@@ -106,15 +108,15 @@ namespace GeographicLib {
     /**
      * Constructor with a subset of coefficients specified.
      *
-     * @param[in] C the coefficients \e C<sub>\e nm</sub>.
-     * @param[in] S the coefficients \e S<sub>\e nm</sub>.
+     * @param[in] C the coefficients <i>C</i><sub><i>nm</i></sub>.
+     * @param[in] S the coefficients <i>S</i><sub><i>nm</i></sub>.
      * @param[in] N the degree used to determine the layout of \e C and \e S.
      * @param[in] nmx the maximum degree used in the sum.  The sum over \e n is
      *   from 0 thru \e nmx.
      * @param[in] mmx the maximum order used in the sum.  The sum over \e m is
      *   from 0 thru min(\e n, \e mmx).
-     * @param[in] C1 the coefficients \e C'<sub>\e nm</sub>.
-     * @param[in] S1 the coefficients \e S'<sub>\e nm</sub>.
+     * @param[in] C1 the coefficients <i>C'</i><sub><i>nm</i></sub>.
+     * @param[in] S1 the coefficients <i>S'</i><sub><i>nm</i></sub>.
      * @param[in] N1 the degree used to determine the layout of \e C' and \e
      *   S'.
      * @param[in] nmx1 the maximum degree used for \e C' and \e S'.
@@ -170,7 +172,7 @@ namespace GeographicLib {
      * This routine requires constant memory and thus never throws
      * an exception.
      **********************************************************************/
-    Math::real operator()(real tau, real x, real y, real z) const throw() {
+    Math::real operator()(real tau, real x, real y, real z) const {
       real f[] = {1, tau};
       real v = 0;
       real dummy;
@@ -206,7 +208,7 @@ namespace GeographicLib {
      * an exception.
      **********************************************************************/
     Math::real operator()(real tau, real x, real y, real z,
-                          real& gradx, real& grady, real& gradz) const throw() {
+                          real& gradx, real& grady, real& gradz) const {
       real f[] = {1, tau};
       real v = 0;
       switch (_norm) {
@@ -269,12 +271,12 @@ namespace GeographicLib {
     /**
      * @return the zeroth SphericalEngine::coeff object.
      **********************************************************************/
-    const SphericalEngine::coeff& Coefficients() const throw()
+    const SphericalEngine::coeff& Coefficients() const
     { return _c[0]; }
     /**
      * @return the first SphericalEngine::coeff object.
      **********************************************************************/
-    const SphericalEngine::coeff& Coefficients1() const throw()
+    const SphericalEngine::coeff& Coefficients1() const
     { return _c[1]; }
   };
 
diff --git a/include/GeographicLib/SphericalHarmonic2.hpp b/include/GeographicLib/SphericalHarmonic2.hpp
index 7da1c53..b4e5aaa 100644
--- a/include/GeographicLib/SphericalHarmonic2.hpp
+++ b/include/GeographicLib/SphericalHarmonic2.hpp
@@ -21,9 +21,10 @@ namespace GeographicLib {
    * \brief Spherical harmonic series with two corrections to the coefficients
    *
    * This classes is similar to SphericalHarmonic, except that the coefficients
-   * \e C<sub>\e nm</sub> are replaced by \e C<sub>\e nm</sub> + \e tau'
-   * C'<sub>\e nm</sub> + \e tau'' C''<sub>\e nm</sub> (and similarly for \e
-   * S<sub>\e nm</sub>).
+   * <i>C</i><sub><i>nm</i></sub> are replaced by
+   * <i>C</i><sub><i>nm</i></sub> + \e tau' <i>C'</i><sub><i>nm</i></sub> + \e
+   * tau'' <i>C''</i><sub><i>nm</i></sub> (and similarly for
+   * <i>S</i><sub><i>nm</i></sub>).
    *
    * Example of use:
    * \include example-SphericalHarmonic2.cpp
@@ -68,17 +69,19 @@ namespace GeographicLib {
     /**
      * Constructor with a full set of coefficients specified.
      *
-     * @param[in] C the coefficients \e C<sub>\e nm</sub>.
-     * @param[in] S the coefficients \e S<sub>\e nm</sub>.
+     * @param[in] C the coefficients <i>C</i><sub><i>nm</i></sub>.
+     * @param[in] S the coefficients <i>S</i><sub><i>nm</i></sub>.
      * @param[in] N the maximum degree and order of the sum
-     * @param[in] C1 the coefficients \e C'<sub>\e nm</sub>.
-     * @param[in] S1 the coefficients \e S'<sub>\e nm</sub>.
+     * @param[in] C1 the coefficients <i>C'</i><sub><i>nm</i></sub>.
+     * @param[in] S1 the coefficients <i>S'</i><sub><i>nm</i></sub>.
      * @param[in] N1 the maximum degree and order of the first correction
-     *   coefficients \e C'<sub>\e nm</sub> and \e S'<sub>\e nm</sub>.
-     * @param[in] C2 the coefficients \e C''<sub>\e nm</sub>.
-     * @param[in] S2 the coefficients \e S''<sub>\e nm</sub>.
+     *   coefficients <i>C'</i><sub><i>nm</i></sub> and
+     *   <i>S'</i><sub><i>nm</i></sub>.
+     * @param[in] C2 the coefficients <i>C''</i><sub><i>nm</i></sub>.
+     * @param[in] S2 the coefficients <i>S''</i><sub><i>nm</i></sub>.
      * @param[in] N2 the maximum degree and order of the second correction
-     *   coefficients \e C'<sub>\e nm</sub> and \e S'<sub>\e nm</sub>.
+     *   coefficients <i>C'</i><sub><i>nm</i></sub> and
+     *   <i>S'</i><sub><i>nm</i></sub>.
      * @param[in] a the reference radius appearing in the definition of the
      *   sum.
      * @param[in] norm the normalization for the associated Legendre
@@ -118,21 +121,21 @@ namespace GeographicLib {
     /**
      * Constructor with a subset of coefficients specified.
      *
-     * @param[in] C the coefficients \e C<sub>\e nm</sub>.
-     * @param[in] S the coefficients \e S<sub>\e nm</sub>.
+     * @param[in] C the coefficients <i>C</i><sub><i>nm</i></sub>.
+     * @param[in] S the coefficients <i>S</i><sub><i>nm</i></sub>.
      * @param[in] N the degree used to determine the layout of \e C and \e S.
      * @param[in] nmx the maximum degree used in the sum.  The sum over \e n is
      *   from 0 thru \e nmx.
      * @param[in] mmx the maximum order used in the sum.  The sum over \e m is
      *   from 0 thru min(\e n, \e mmx).
-     * @param[in] C1 the coefficients \e C'<sub>\e nm</sub>.
-     * @param[in] S1 the coefficients \e S'<sub>\e nm</sub>.
+     * @param[in] C1 the coefficients <i>C'</i><sub><i>nm</i></sub>.
+     * @param[in] S1 the coefficients <i>S'</i><sub><i>nm</i></sub>.
      * @param[in] N1 the degree used to determine the layout of \e C' and \e
      *   S'.
      * @param[in] nmx1 the maximum degree used for \e C' and \e S'.
      * @param[in] mmx1 the maximum order used for \e C' and \e S'.
-     * @param[in] C2 the coefficients \e C''<sub>\e nm</sub>.
-     * @param[in] S2 the coefficients \e S''<sub>\e nm</sub>.
+     * @param[in] C2 the coefficients <i>C''</i><sub><i>nm</i></sub>.
+     * @param[in] S2 the coefficients <i>S''</i><sub><i>nm</i></sub>.
      * @param[in] N2 the degree used to determine the layout of \e C'' and \e
      *   S''.
      * @param[in] nmx2 the maximum degree used for \e C'' and \e S''.
@@ -195,7 +198,7 @@ namespace GeographicLib {
      * exception.
      **********************************************************************/
     Math::real operator()(real tau1, real tau2, real x, real y, real z)
-      const throw() {
+      const {
       real f[] = {1, tau1, tau2};
       real v = 0;
       real dummy;
@@ -232,7 +235,7 @@ namespace GeographicLib {
      * an exception.
      **********************************************************************/
     Math::real operator()(real tau1, real tau2, real x, real y, real z,
-                          real& gradx, real& grady, real& gradz) const throw() {
+                          real& gradx, real& grady, real& gradz) const {
       real f[] = {1, tau1, tau2};
       real v = 0;
       switch (_norm) {
@@ -297,17 +300,17 @@ namespace GeographicLib {
     /**
      * @return the zeroth SphericalEngine::coeff object.
      **********************************************************************/
-    const SphericalEngine::coeff& Coefficients() const throw()
+    const SphericalEngine::coeff& Coefficients() const
     { return _c[0]; }
     /**
      * @return the first SphericalEngine::coeff object.
      **********************************************************************/
-    const SphericalEngine::coeff& Coefficients1() const throw()
+    const SphericalEngine::coeff& Coefficients1() const
     { return _c[1]; }
     /**
      * @return the second SphericalEngine::coeff object.
      **********************************************************************/
-    const SphericalEngine::coeff& Coefficients2() const throw()
+    const SphericalEngine::coeff& Coefficients2() const
     { return _c[2]; }
   };
 
diff --git a/include/GeographicLib/TransverseMercator.hpp b/include/GeographicLib/TransverseMercator.hpp
index 7d8876d..cf82faf 100644
--- a/include/GeographicLib/TransverseMercator.hpp
+++ b/include/GeographicLib/TransverseMercator.hpp
@@ -18,7 +18,8 @@
  * GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER can be set to any integer in [4, 8].
  **********************************************************************/
 #  define GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER \
-  (GEOGRAPHICLIB_PRECISION == 2 ? 6 : (GEOGRAPHICLIB_PRECISION == 1 ? 4 : 8))
+  (GEOGRAPHICLIB_PRECISION == 2 ? 6 : \
+   (GEOGRAPHICLIB_PRECISION == 1 ? 4 : 8))
 #endif
 
 namespace GeographicLib {
@@ -80,24 +81,34 @@ namespace GeographicLib {
   private:
     typedef Math::real real;
     static const int maxpow_ = GEOGRAPHICLIB_TRANSVERSEMERCATOR_ORDER;
-    static const real tol_;
-    static const real overflow_;
     static const int numit_ = 5;
+    real tol_;
     real _a, _f, _k0, _e2, _e, _e2m,  _c, _n;
     // _alp[0] and _bet[0] unused
     real _a1, _b1, _alp[maxpow_ + 1], _bet[maxpow_ + 1];
+    static inline real overflow() {
+      // Overflow value s.t. atan(overflow_) = pi/2
+      static const real
+        overflow = 1 / Math::sq(std::numeric_limits<real>::epsilon());
+      return overflow;
+    }
     // tan(x) for x in [-pi/2, pi/2] ensuring that the sign is right
-    static inline real tanx(real x) throw() {
-      real t = std::tan(x);
+    static inline real tanx(real x) {
+      using std::tan;
+      real t = tan(x);
       // Write the tests this way to ensure that tanx(NaN()) is NaN()
-      return x >= 0 ? (!(t < 0) ? t : overflow_) : (!(t >= 0) ? t : -overflow_);
+      return x >= 0 ?
+        (!(t <  0) ? t :  overflow()) :
+        (!(t >= 0) ? t : -overflow());
     }
     // Return e * atanh(e * x) for f >= 0, else return
     // - sqrt(-e2) * atan( sqrt(-e2) * x) for f < 0
-    inline real eatanhe(real x) const throw()
-    { return _f >= 0 ? _e * Math::atanh(_e * x) : - _e * std::atan(_e * x); }
-    real taupf(real tau) const throw();
-    real tauf(real taup) const throw();
+    inline real eatanhe(real x) const {
+      using std::atan;
+      return _f >= 0 ? _e * Math::atanh(_e * x) : - _e * atan(_e * x);
+    }
+    real taupf(real tau) const;
+    real tauf(real taup) const;
 
     friend class Ellipsoid;           // For access to taupf, tauf.
   public:
@@ -107,10 +118,10 @@ namespace GeographicLib {
      *
      * @param[in] a equatorial radius (meters).
      * @param[in] f flattening of ellipsoid.  Setting \e f = 0 gives a sphere.
-     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set flattening
-     *   to 1/\e f.
+     *   Negative \e f gives a prolate ellipsoid.  If \e f > 1, set
+     *   flattening to 1/\e f.
      * @param[in] k0 central scale factor.
-     * @exception GeographicErr if \e a, (1 − \e f ) \e a, or \e k0 is
+     * @exception GeographicErr if \e a, (1 − \e f) \e a, or \e k0 is
      *   not positive.
      **********************************************************************/
     TransverseMercator(real a, real f, real k0);
@@ -131,7 +142,7 @@ namespace GeographicLib {
      * range [−540°, 540°).
      **********************************************************************/
     void Forward(real lon0, real lat, real lon,
-                 real& x, real& y, real& gamma, real& k) const throw();
+                 real& x, real& y, real& gamma, real& k) const;
 
     /**
      * Reverse projection, from transverse Mercator to geographic.
@@ -149,13 +160,13 @@ namespace GeographicLib {
      * the range [−180°, 180°).
      **********************************************************************/
     void Reverse(real lon0, real x, real y,
-                 real& lat, real& lon, real& gamma, real& k) const throw();
+                 real& lat, real& lon, real& gamma, real& k) const;
 
     /**
      * TransverseMercator::Forward without returning the convergence and scale.
      **********************************************************************/
     void Forward(real lon0, real lat, real lon,
-                 real& x, real& y) const throw() {
+                 real& x, real& y) const {
       real gamma, k;
       Forward(lon0, lat, lon, x, y, gamma, k);
     }
@@ -164,7 +175,7 @@ namespace GeographicLib {
      * TransverseMercator::Reverse without returning the convergence and scale.
      **********************************************************************/
     void Reverse(real lon0, real x, real y,
-                 real& lat, real& lon) const throw() {
+                 real& lat, real& lon) const {
       real gamma, k;
       Reverse(lon0, x, y, lat, lon, gamma, k);
     }
@@ -176,27 +187,27 @@ namespace GeographicLib {
      * @return \e a the equatorial radius of the ellipsoid (meters).  This is
      *   the value used in the constructor.
      **********************************************************************/
-    Math::real MajorRadius() const throw() { return _a; }
+    Math::real MajorRadius() const { return _a; }
 
     /**
      * @return \e f the flattening of the ellipsoid.  This is the value used in
      *   the constructor.
      **********************************************************************/
-    Math::real Flattening() const throw() { return _f; }
+    Math::real Flattening() const { return _f; }
 
     /// \cond SKIP
     /**
      * <b>DEPRECATED</b>
      * @return \e r the inverse flattening of the ellipsoid.
      **********************************************************************/
-    Math::real InverseFlattening() const throw() { return 1/_f; }
+    Math::real InverseFlattening() const { return 1/_f; }
     /// \endcond
 
     /**
      * @return \e k0 central scale for the projection.  This is the value of \e
      *   k0 used in the constructor and is the scale on the central meridian.
      **********************************************************************/
-    Math::real CentralScale() const throw() { return _k0; }
+    Math::real CentralScale() const { return _k0; }
     ///@}
 
     /**
@@ -204,7 +215,7 @@ namespace GeographicLib {
      * and the UTM scale factor.  However, unlike UTM, no false easting or
      * northing is added.
      **********************************************************************/
-    static const TransverseMercator UTM;
+    static const TransverseMercator& UTM();
   };
 
 } // namespace GeographicLib
diff --git a/include/GeographicLib/TransverseMercatorExact.hpp b/include/GeographicLib/TransverseMercatorExact.hpp
index 2db9c41..c8b1c5a 100644
--- a/include/GeographicLib/TransverseMercatorExact.hpp
+++ b/include/GeographicLib/TransverseMercatorExact.hpp
@@ -79,51 +79,56 @@ namespace GeographicLib {
   class GEOGRAPHICLIB_EXPORT TransverseMercatorExact {
   private:
     typedef Math::real real;
-    static const real tol_;
-    static const real tol1_;
-    static const real tol2_;
-    static const real taytol_;
-    static const real overflow_;
     static const int numit_ = 10;
+    real tol_, tol1_, tol2_, taytol_;
     real _a, _f, _k0, _mu, _mv, _e;
     bool _extendp;
     EllipticFunction _Eu, _Ev;
+    static inline real overflow() {
+    // Overflow value s.t. atan(overflow_) = pi/2
+      static const real
+        overflow = 1 / Math::sq(std::numeric_limits<real>::epsilon());
+      return overflow;
+    }
     // tan(x) for x in [-pi/2, pi/2] ensuring that the sign is right
-    static inline real tanx(real x) throw() {
-      real t = std::tan(x);
+    static inline real tanx(real x) {
+      using std::tan;
+      real t = tan(x);
       // Write the tests this way to ensure that tanx(NaN()) is NaN()
-      return x >= 0 ? (!(t < 0) ? t : overflow_) : (!(t >= 0) ? t : -overflow_);
+      return x >= 0 ?
+        (!(t <  0) ? t :  overflow()) :
+        (!(t >= 0) ? t : -overflow());
     }
 
-    real taup(real tau) const throw();
-    real taupinv(real taup) const throw();
+    real taup(real tau) const;
+    real taupinv(real taup) const;
 
     void zeta(real u, real snu, real cnu, real dnu,
               real v, real snv, real cnv, real dnv,
-              real& taup, real& lam) const throw();
+              real& taup, real& lam) const;
 
     void dwdzeta(real u, real snu, real cnu, real dnu,
                  real v, real snv, real cnv, real dnv,
-                 real& du, real& dv) const throw();
+                 real& du, real& dv) const;
 
-    bool zetainv0(real psi, real lam, real& u, real& v) const throw();
-    void zetainv(real taup, real lam, real& u, real& v) const throw();
+    bool zetainv0(real psi, real lam, real& u, real& v) const;
+    void zetainv(real taup, real lam, real& u, real& v) const;
 
     void sigma(real u, real snu, real cnu, real dnu,
                real v, real snv, real cnv, real dnv,
-               real& xi, real& eta) const throw();
+               real& xi, real& eta) const;
 
     void dwdsigma(real u, real snu, real cnu, real dnu,
                   real v, real snv, real cnv, real dnv,
-                  real& du, real& dv) const throw();
+                  real& du, real& dv) const;
 
-    bool sigmainv0(real xi, real eta, real& u, real& v) const throw();
-    void sigmainv(real xi, real eta, real& u, real& v) const throw();
+    bool sigmainv0(real xi, real eta, real& u, real& v) const;
+    void sigmainv(real xi, real eta, real& u, real& v) const;
 
     void Scale(real tau, real lam,
                real snu, real cnu, real dnu,
                real snv, real cnv, real dnv,
-               real& gamma, real& k) const throw();
+               real& gamma, real& k) const;
 
   public:
 
@@ -131,7 +136,7 @@ namespace GeographicLib {
      * Constructor for a ellipsoid with
      *
      * @param[in] a equatorial radius (meters).
-     * @param[in] f flattening of ellipsoid.  If \e f > 1, set flattening
+     * @param[in] f flattening of ellipsoid.  If \e f > 1, set flattening
      *   to 1/\e f.
      * @param[in] k0 central scale factor.
      * @param[in] extendp use extended domain.
@@ -195,7 +200,7 @@ namespace GeographicLib {
      * range [−540°, 540°).
      **********************************************************************/
     void Forward(real lon0, real lat, real lon,
-                 real& x, real& y, real& gamma, real& k) const throw();
+                 real& x, real& y, real& gamma, real& k) const;
 
     /**
      * Reverse projection, from transverse Mercator to geographic.
@@ -213,14 +218,14 @@ namespace GeographicLib {
      * the range [−180°, 180°).
      **********************************************************************/
     void Reverse(real lon0, real x, real y,
-                 real& lat, real& lon, real& gamma, real& k) const throw();
+                 real& lat, real& lon, real& gamma, real& k) const;
 
     /**
      * TransverseMercatorExact::Forward without returning the convergence and
      * scale.
      **********************************************************************/
     void Forward(real lon0, real lat, real lon,
-                 real& x, real& y) const throw() {
+                 real& x, real& y) const {
       real gamma, k;
       Forward(lon0, lat, lon, x, y, gamma, k);
     }
@@ -230,7 +235,7 @@ namespace GeographicLib {
      * scale.
      **********************************************************************/
     void Reverse(real lon0, real x, real y,
-                 real& lat, real& lon) const throw() {
+                 real& lat, real& lon) const {
       real gamma, k;
       Reverse(lon0, x, y, lat, lon, gamma, k);
     }
@@ -242,27 +247,27 @@ namespace GeographicLib {
      * @return \e a the equatorial radius of the ellipsoid (meters).  This is
      *   the value used in the constructor.
      **********************************************************************/
-    Math::real MajorRadius() const throw() { return _a; }
+    Math::real MajorRadius() const { return _a; }
 
     /**
      * @return \e f the flattening of the ellipsoid.  This is the value used in
      *   the constructor.
      **********************************************************************/
-    Math::real Flattening() const throw() { return _f; }
+    Math::real Flattening() const { return _f; }
 
     /// \cond SKIP
     /**
      * <b>DEPRECATED</b>
      * @return \e r the inverse flattening of the ellipsoid.
      **********************************************************************/
-    Math::real InverseFlattening() const throw() { return 1/_f; }
+    Math::real InverseFlattening() const { return 1/_f; }
     /// \endcond
 
     /**
      * @return \e k0 central scale for the projection.  This is the value of \e
      *   k0 used in the constructor and is the scale on the central meridian.
      **********************************************************************/
-    Math::real CentralScale() const throw() { return _k0; }
+    Math::real CentralScale() const { return _k0; }
     ///@}
 
     /**
@@ -270,7 +275,7 @@ namespace GeographicLib {
      * ellipsoid and the UTM scale factor.  However, unlike UTM, no false
      * easting or northing is added.
      **********************************************************************/
-    static const TransverseMercatorExact UTM;
+    static const TransverseMercatorExact& UTM();
   };
 
 } // namespace GeographicLib
diff --git a/include/GeographicLib/UTMUPS.hpp b/include/GeographicLib/UTMUPS.hpp
index 9fc19c6..cdf8c96 100644
--- a/include/GeographicLib/UTMUPS.hpp
+++ b/include/GeographicLib/UTMUPS.hpp
@@ -29,6 +29,10 @@ namespace GeographicLib {
    * transverse Mercator and polar stereographic projections.  Here we
    * substitute much more accurate algorithms given by
    * GeographicLib:TransverseMercator and GeographicLib:PolarStereographic.
+   * These are the algorithms recommended by the NGA document
+   * - <a href="http://earth-info.nga.mil/GandG/publications/NGA_SIG_0012_2_0_0_UTMUPS/NGA.SIG.0012_2.0.0_UTMUPS.pdf">
+   *   The Universal Grids and the Transverse Mercator and Polar Stereographic
+   *   Map Projections</a>, NGA.SIG.0012_2.0.0_UTMUPS (2014).
    *
    * In this implementation, the conversions are closed, i.e., output from
    * Forward is legal input for Reverse and vice versa.  The error is about 5nm
@@ -55,25 +59,35 @@ namespace GeographicLib {
    *   UPS coordinate is legal.  A more systematic approach is taken here.
    * - The underlying projections are not very accurately implemented.
    *
+   * The GeographicLib::UTMUPS::EncodeZone encodes the UTM zone and hemisphere
+   * to allow UTM/UPS coordinated to be displayed as, for example, "38N 444500
+   * 3688500".  According to NGA.SIG.0012_2.0.0_UTMUPS the use of "N" to denote
+   * "north" in the context is not allowed (since a upper case letter in this
+   * context denotes the MGRS latitude band).  Consequently, as of version
+   * 1.36, EncodeZone uses the lower case letters "n" and "s" to denote the
+   * hemisphere.  In addition EncodeZone accepts an optional final argument \e
+   * abbrev, which, if false, results in the hemisphere being spelled out as in
+   * "38north".
+   *
    * Example of use:
    * \include example-UTMUPS.cpp
    **********************************************************************/
   class GEOGRAPHICLIB_EXPORT UTMUPS {
   private:
     typedef Math::real real;
-    static const real falseeasting_[4];
-    static const real falsenorthing_[4];
-    static const real mineasting_[4];
-    static const real maxeasting_[4];
-    static const real minnorthing_[4];
-    static const real maxnorthing_[4];
+    static const int falseeasting_[4];
+    static const int falsenorthing_[4];
+    static const int mineasting_[4];
+    static const int maxeasting_[4];
+    static const int minnorthing_[4];
+    static const int maxnorthing_[4];
     static const int epsg01N = 32601; // EPSG code for UTM 01N
     static const int epsg60N = 32660; // EPSG code for UTM 60N
     static const int epsgN   = 32661; // EPSG code for UPS   N
     static const int epsg01S = 32701; // EPSG code for UTM 01S
     static const int epsg60S = 32760; // EPSG code for UTM 60S
     static const int epsgS   = 32761; // EPSG code for UPS   S
-    static real CentralMeridian(int zone) throw()
+    static real CentralMeridian(int zone)
     { return real(6 * zone - 183); }
     static void CheckLatLon(real lat, real lon);
     // Throw an error if easting or northing are outside standard ranges.  If
@@ -318,12 +332,13 @@ namespace GeographicLib {
      *
      * For UTM, \e zonestr has the form of a zone number in the range
      * [UTMUPS::MINUTMZONE, UTMUPS::MAXUTMZONE] = [1, 60] followed by a
-     * hemisphere letter, N or S.  For UPS, it consists just of the hemisphere
-     * letter.  The returned value of \e zone is UTMUPS::UPS = 0 for UPS.  Note
-     * well that "38S" indicates the southern hemisphere of zone 38 and not
-     * latitude band S, [32, 40].  N, 01S, 2N, 38S are legal.  0N, 001S, 61N,
-     * 38P are illegal.  INV is a special value for which the returned value of
-     * \e is UTMUPS::INVALID.
+     * hemisphere letter, n or s (or "north" or "south" spelled out).  For UPS,
+     * it consists just of the hemisphere letter (or the spelled out
+     * hemisphere).  The returned value of \e zone is UTMUPS::UPS = 0 for UPS.
+     * Note well that "38s" indicates the southern hemisphere of zone 38 and
+     * not latitude band S, 32° ≤ \e lat < 40°.  n, 01s, 2n, 38s,
+     * south, 3north are legal.  0n, 001s, +3n, 61n, 38P are illegal.  INV is a
+     * special value for which the returned value of \e is UTMUPS::INVALID.
      **********************************************************************/
     static void DecodeZone(const std::string& zonestr, int& zone, bool& northp);
 
@@ -332,6 +347,8 @@ namespace GeographicLib {
      *
      * @param[in] zone the UTM zone (zero means UPS).
      * @param[in] northp hemisphere (true means north, false means south).
+     * @param[in] abbrev if true (the default) use abbreviated (n/s) notation
+     *   for hemisphere; otherwise spell out the hemisphere (north/south)
      * @exception GeographicErr if \e zone is out of range (see below).
      * @exception std::bad_alloc if memoy for the string can't be allocated.
      * @return string representation of zone and hemisphere.
@@ -339,10 +356,10 @@ namespace GeographicLib {
      * \e zone must be in the range [UTMUPS::MINZONE, UTMUPS::MAXZONE] = [0,
      * 60] with \e zone = UTMUPS::UPS, 0, indicating UPS (but the resulting
      * string does not contain "0").  \e zone may also be UTMUPS::INVALID, in
-     * which case the returned string is "INV".  This reverses
+     * which case the returned string is "inv".  This reverses
      * UTMUPS::DecodeZone.
      **********************************************************************/
-    static std::string EncodeZone(int zone, bool northp);
+    static std::string EncodeZone(int zone, bool northp, bool abbrev = true);
 
     /**
      * Decode EPSG.
@@ -357,7 +374,7 @@ namespace GeographicLib {
      * of these projections, \e zone is set to UTMUPS::INVALID.  See
      * http://spatialreference.org/ref/epsg/
      **********************************************************************/
-    static void DecodeEPSG(int epsg, int& zone, bool& northp) throw();
+    static void DecodeEPSG(int epsg, int& zone, bool& northp);
 
     /**
      * Encode zone as EPSG.
@@ -370,13 +387,13 @@ namespace GeographicLib {
      * Convert \e zone and \e northp to the corresponding EPSG (European
      * Petroleum Survery Group) codes
      **********************************************************************/
-    static int EncodeEPSG(int zone, bool northp) throw();
+    static int EncodeEPSG(int zone, bool northp);
 
     /**
-     * @return shift (meters) necessary to align N and S halves of a UTM zone
-     * (10<sup>7</sup>).
+     * @return shift (meters) necessary to align north and south halves of a
+     * UTM zone (10<sup>7</sup>).
      **********************************************************************/
-    static Math::real UTMShift() throw();
+    static Math::real UTMShift();
 
     /** \name Inspector functions
      **********************************************************************/
@@ -387,8 +404,8 @@ namespace GeographicLib {
      * (The WGS84 value is returned because the UTM and UPS projections are
      * based on this ellipsoid.)
      **********************************************************************/
-    static Math::real MajorRadius() throw()
-    { return Constants::WGS84_a<real>(); }
+    static Math::real MajorRadius()
+    { return Constants::WGS84_a(); }
 
     /**
      * @return \e f the flattening of the WGS84 ellipsoid.
@@ -396,8 +413,8 @@ namespace GeographicLib {
      * (The WGS84 value is returned because the UTM and UPS projections are
      * based on this ellipsoid.)
      **********************************************************************/
-    static Math::real Flattening() throw()
-    { return Constants::WGS84_f<real>(); }
+    static Math::real Flattening()
+    { return Constants::WGS84_f(); }
     ///@}
 
     /// \cond SKIP
@@ -405,8 +422,8 @@ namespace GeographicLib {
      * <b>DEPRECATED</b>
      * @return \e r the inverse flattening of the WGS84 ellipsoid.
      **********************************************************************/
-    static Math::real InverseFlattening() throw()
-    { return 1/Constants::WGS84_f<real>(); }
+    static Math::real InverseFlattening()
+    { return 1/Constants::WGS84_f(); }
     /// \endcond
   };
 
diff --git a/include/GeographicLib/Utility.hpp b/include/GeographicLib/Utility.hpp
index dfe3e5e..a84d401 100644
--- a/include/GeographicLib/Utility.hpp
+++ b/include/GeographicLib/Utility.hpp
@@ -55,7 +55,7 @@ namespace GeographicLib {
      * @param[in] d the day of the month (must be positive).  Default = 1.
      * @return the sequential day number.
      **********************************************************************/
-    static int day(int y, int m = 1, int d = 1) throw() {
+    static int day(int y, int m = 1, int d = 1) {
       // Convert from date to sequential day and vice versa
       //
       // Here is some code to convert a date to sequential day and vice
@@ -141,7 +141,7 @@ namespace GeographicLib {
      * @param[out] m the month, Jan = 1, etc.
      * @param[out] d the day of the month.
      **********************************************************************/
-    static void date(int s, int& y, int& m, int& d) throw() {
+    static void date(int s, int& y, int& m, int& d) {
       int c = 0;
       bool greg = gregorian(s);
       s += 305;                 // s = 0 on March 1, 1BC
@@ -213,7 +213,7 @@ namespace GeographicLib {
      * @return the day of the week with Sunday, Monday--Saturday = 0,
      *   1--6.
      **********************************************************************/
-    static int dow(int y, int m, int d) throw() { return dow(day(y, m, d)); }
+    static int dow(int y, int m, int d) { return dow(day(y, m, d)); }
 
     /**
      * Given the sequential day, return the day of the week.
@@ -222,7 +222,7 @@ namespace GeographicLib {
      * @return the day of the week with Sunday, Monday--Saturday = 0,
      *   1--6.
      **********************************************************************/
-    static int dow(int s) throw() {
+    static int dow(int s) {
       return (s + 5) % 7;  // The 5 offset makes day 1 (0001-01-01) a Saturday.
     }
 
@@ -264,7 +264,25 @@ namespace GeographicLib {
      * precision.  With p < 0, there is no manipulation of the format.
      **********************************************************************/
     template<typename T> static std::string str(T x, int p = -1) {
-      if (!std::numeric_limits<T>::is_integer && !Math::isfinite<T>(x))
+      std::ostringstream s;
+      if (p >= 0) s << std::fixed << std::setprecision(p);
+      s << x; return s.str();
+    }
+
+    /**
+     * Convert a Math::real object to a string.
+     *
+     * @param[in] x the value to be converted.
+     * @param[in] p the precision used (default −1).
+     * @exception std::bad_alloc if memory for the string can't be allocated.
+     * @return the string representation.
+     *
+     * If \e p ≥ 0, then the number fixed format is used with p bits of
+     * precision.  With p < 0, there is no manipulation of the format.  This is
+     * an overload of str<T> which deals with inf and nan.
+     **********************************************************************/
+    static std::string str(Math::real x, int p = -1) {
+      if (!Math::isfinite(x))
         return x < 0 ? std::string("-inf") :
           (x > 0 ? std::string("inf") : std::string("nan"));
       std::ostringstream s;
@@ -361,7 +379,7 @@ namespace GeographicLib {
      * \e c is converted to upper case before search \e s.  Therefore, it is
      * intended that \e s should not contain any lower case letters.
      **********************************************************************/
-    static int lookup(const std::string& s, char c) throw() {
+    static int lookup(const std::string& s, char c) {
       std::string::size_type r = s.find(char(toupper(c)));
       return r == std::string::npos ? -1 : int(r);
     }
@@ -382,34 +400,39 @@ namespace GeographicLib {
     template<typename ExtT, typename IntT, bool bigendp>
       static inline void readarray(std::istream& str,
                                    IntT array[], size_t num) {
+#if GEOGRAPHICLIB_PRECISION < 4
       if (sizeof(IntT) == sizeof(ExtT) &&
           std::numeric_limits<IntT>::is_integer ==
-          std::numeric_limits<ExtT>::is_integer) {
-        // Data is compatible (aside from the issue of endian-ness).
-        str.read(reinterpret_cast<char *>(array), num * sizeof(ExtT));
-        if (!str.good())
-          throw GeographicErr("Failure reading data");
-        if (bigendp != Math::bigendian) { // endian mismatch -> swap bytes
-          for (size_t i = num; i--;)
-            array[i] = Math::swab<IntT>(array[i]);
-        }
-      } else {
-        const int bufsize = 1024; // read this many values at a time
-        ExtT buffer[bufsize];     // temporary buffer
-        int k = int(num);         // data values left to read
-        int i = 0;                // index into output array
-        while (k) {
-          int n = (std::min)(k, bufsize);
-          str.read(reinterpret_cast<char *>(buffer), n * sizeof(ExtT));
+          std::numeric_limits<ExtT>::is_integer)
+        {
+          // Data is compatible (aside from the issue of endian-ness).
+          str.read(reinterpret_cast<char *>(array), num * sizeof(ExtT));
           if (!str.good())
             throw GeographicErr("Failure reading data");
-          for (int j = 0; j < n; ++j)
-            // fix endian-ness and cast to IntT
-            array[i++] = IntT(bigendp == Math::bigendian ? buffer[j] :
-                              Math::swab<ExtT>(buffer[j]));
-          k -= n;
+          if (bigendp != Math::bigendian) { // endian mismatch -> swap bytes
+            for (size_t i = num; i--;)
+              array[i] = Math::swab<IntT>(array[i]);
+          }
+        }
+      else
+#endif
+        {
+          const int bufsize = 1024; // read this many values at a time
+          ExtT buffer[bufsize];     // temporary buffer
+          int k = int(num);         // data values left to read
+          int i = 0;                // index into output array
+          while (k) {
+            int n = (std::min)(k, bufsize);
+            str.read(reinterpret_cast<char *>(buffer), n * sizeof(ExtT));
+            if (!str.good())
+              throw GeographicErr("Failure reading data");
+            for (int j = 0; j < n; ++j)
+              // fix endian-ness and cast to IntT
+              array[i++] = IntT(bigendp == Math::bigendian ? buffer[j] :
+                                Math::swab<ExtT>(buffer[j]));
+            k -= n;
+          }
         }
-      }
       return;
     }
 
@@ -446,32 +469,37 @@ namespace GeographicLib {
      **********************************************************************/
     template<typename ExtT, typename IntT, bool bigendp>
       static inline void writearray(std::ostream& str,
-                                   const IntT array[], size_t num) {
+                                    const IntT array[], size_t num) {
+#if GEOGRAPHICLIB_PRECISION < 4
       if (sizeof(IntT) == sizeof(ExtT) &&
           std::numeric_limits<IntT>::is_integer ==
           std::numeric_limits<ExtT>::is_integer &&
-          bigendp == Math::bigendian) {
-        // Data is compatible (including endian-ness).
-        str.write(reinterpret_cast<const char *>(array), num * sizeof(ExtT));
-        if (!str.good())
-          throw GeographicErr("Failure writing data");
-      } else {
-        const int bufsize = 1024; // write this many values at a time
-        ExtT buffer[bufsize];     // temporary buffer
-        int k = int(num);         // data values left to write
-        int i = 0;                // index into output array
-        while (k) {
-          int n = (std::min)(k, bufsize);
-          for (int j = 0; j < n; ++j)
-            // cast to ExtT and fix endian-ness
-            buffer[j] = bigendp == Math::bigendian ? ExtT(array[i++]) :
-              Math::swab<ExtT>(ExtT(array[i++]));
-          str.write(reinterpret_cast<const char *>(buffer), n * sizeof(ExtT));
+          bigendp == Math::bigendian)
+        {
+          // Data is compatible (including endian-ness).
+          str.write(reinterpret_cast<const char *>(array), num * sizeof(ExtT));
           if (!str.good())
             throw GeographicErr("Failure writing data");
-          k -= n;
         }
-      }
+      else
+#endif
+        {
+          const int bufsize = 1024; // write this many values at a time
+          ExtT buffer[bufsize];     // temporary buffer
+          int k = int(num);         // data values left to write
+          int i = 0;                // index into output array
+          while (k) {
+            int n = (std::min)(k, bufsize);
+            for (int j = 0; j < n; ++j)
+              // cast to ExtT and fix endian-ness
+              buffer[j] = bigendp == Math::bigendian ? ExtT(array[i++]) :
+                Math::swab<ExtT>(ExtT(array[i++]));
+            str.write(reinterpret_cast<const char *>(buffer), n * sizeof(ExtT));
+            if (!str.good())
+              throw GeographicErr("Failure writing data");
+            k -= n;
+          }
+        }
       return;
     }
 
@@ -502,7 +530,7 @@ namespace GeographicLib {
      *   allocated.
      * @return whether a key was found.
      *
-     * A # character and everything after it are discarded.  If the results is
+     * A # character and everything after it are discarded.  If the result is
      * just white space, the routine returns false (and \e key and \e val are
      * not set).  Otherwise the first token is taken to be the key and the rest
      * of the line (trimmed of leading and trailing white space) is the value.
@@ -510,6 +538,19 @@ namespace GeographicLib {
     static bool ParseLine(const std::string& line,
                           std::string& key, std::string& val);
 
+    /**
+     * Set the binary precision of a real number.
+     *
+     * @param[in] ndigits the number of bits of precision.  If ndigits is 0
+     *   (the default), then determine the precision from the environment
+     *   variable GEOGRAPHICLIB_DIGITS.  If this is undefined, use ndigits =
+     *   256 (i.e., about 77 decimal digits).
+     * @return the resulting number of bits of precision.
+     *
+     * This only has an effect when GEOGRAPHICLIB_PRECISION == 5.
+     **********************************************************************/
+    static int set_digits(int ndigits = 0);
+
   };
 
 } // namespace GeographicLib
diff --git a/include/Makefile.am b/include/Makefile.am
index 83988a4..89ff622 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -33,6 +33,7 @@ nobase_include_HEADERS = GeographicLib/Accumulator.hpp \
 			GeographicLib/OSGB.hpp \
 			GeographicLib/PolarStereographic.hpp \
 			GeographicLib/PolygonArea.hpp \
+			GeographicLib/Rhumb.hpp \
 			GeographicLib/SphericalEngine.hpp \
 			GeographicLib/SphericalHarmonic.hpp \
 			GeographicLib/SphericalHarmonic1.hpp \
diff --git a/include/Makefile.in b/include/Makefile.in
index 8a926b1..66b25ce 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.12.2 from Makefile.am.
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -20,23 +20,51 @@
 # Copyright (C) 2009, Francesco P. Lovergine <frankie at debian.org>
 
 VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
     esac; \
-    test $$am__dry = yes; \
-  }
+  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@
@@ -57,8 +85,8 @@ build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
 subdir = include
-DIST_COMMON = $(nobase_include_HEADERS) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(nobase_include_HEADERS)
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
 	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
@@ -70,6 +98,18 @@ mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/include/GeographicLib/Config-ac.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 = \
@@ -106,11 +146,29 @@ am__uninstall_files_from_dir = { \
   }
 am__installdirs = "$(DESTDIR)$(includedir)"
 HEADERS = $(nobase_include_HEADERS)
+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
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -179,7 +237,6 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POD2HTML = @POD2HTML@
 POD2MAN = @POD2MAN@
-POW_LIB = @POW_LIB@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
@@ -273,6 +330,7 @@ nobase_include_HEADERS = GeographicLib/Accumulator.hpp \
 			GeographicLib/OSGB.hpp \
 			GeographicLib/PolarStereographic.hpp \
 			GeographicLib/PolygonArea.hpp \
+			GeographicLib/Rhumb.hpp \
 			GeographicLib/SphericalEngine.hpp \
 			GeographicLib/SphericalHarmonic.hpp \
 			GeographicLib/SphericalHarmonic1.hpp \
@@ -349,26 +407,15 @@ uninstall-nobase_includeHEADERS:
 	$(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \
 	dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir)
 
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
+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`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	$(am__define_uniq_tagged_files); \
 	shift; \
 	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
 	  test -n "$$unique" || unique=$$empty_fix; \
@@ -380,15 +427,11 @@ TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 	      $$unique; \
 	  fi; \
 	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+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
@@ -397,9 +440,10 @@ GTAGS:
 	here=`$(am__cd) $(top_builddir) && pwd` \
 	  && $(am__cd) $(top_srcdir) \
 	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
 
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
 	case "$(srcdir)" in \
 	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
 	  *) sdir=$(subdir)/$(srcdir) ;; \
@@ -550,18 +594,19 @@ uninstall-am: uninstall-nobase_includeHEADERS
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool cscopelist ctags distclean 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-nobase_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 uninstall uninstall-am uninstall-nobase_includeHEADERS
+.PHONY: 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-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-nobase_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 uninstall \
+	uninstall-am uninstall-nobase_includeHEADERS
 
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
diff --git a/include/Makefile.mk b/include/Makefile.mk
index fbb9036..f45e8a7 100644
--- a/include/Makefile.mk
+++ b/include/Makefile.mk
@@ -25,6 +25,7 @@ MODULES = AlbersEqualArea \
 	OSGB \
 	PolarStereographic \
 	PolygonArea \
+	Rhumb \
 	SphericalEngine \
 	TransverseMercator \
 	TransverseMercatorExact \
diff --git a/legacy/C/CMakeLists.txt b/legacy/C/CMakeLists.txt
index 3bdf38f..3f0a8b9 100644
--- a/legacy/C/CMakeLists.txt
+++ b/legacy/C/CMakeLists.txt
@@ -12,7 +12,8 @@ endif ()
 if (WIN32)
   set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4")
 else ()
-  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -pedantic -ansi")
+  set (CMAKE_C_FLAGS
+    "${CMAKE_C_FLAGS} -Wall -Wextra -Wno-array-bounds -pedantic -ansi")
 endif ()
 
 set (TOOLS direct inverse planimeter)
diff --git a/legacy/Fortran/CMakeLists.txt b/legacy/Fortran/CMakeLists.txt
index 980ff29..5006446 100644
--- a/legacy/Fortran/CMakeLists.txt
+++ b/legacy/Fortran/CMakeLists.txt
@@ -10,6 +10,8 @@ endif ()
 
 set (CMAKE_Fortran_FLAGS
   "${CMAKE_Fortran_FLAGS} -Wall -Wextra -pedantic -std=f95 -fimplicit-none")
+# -Wextra now turns on warnings about comparing reals for equality
+set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Wno-compare-reals")
 
 set (TOOLS geoddirect geodinverse planimeter)
 
diff --git a/m4/libtool.m4 b/m4/libtool.m4
index 56666f0..f12cfdf 100644
--- a/m4/libtool.m4
+++ b/m4/libtool.m4
@@ -1312,7 +1312,7 @@ ia64-*-hpux*)
   rm -rf conftest*
   ;;
 
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
 s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
   # Find out which ABI we are using.
   echo 'int i;' > conftest.$ac_ext
@@ -1326,7 +1326,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
 	  x86_64-*linux*)
 	    LD="${LD-ld} -m elf_i386"
 	    ;;
-	  ppc64-*linux*|powerpc64-*linux*)
+	  powerpc64le-*linux*)
+	    LD="${LD-ld} -m elf32lppclinux"
+	    ;;
+	  powerpc64-*linux*)
 	    LD="${LD-ld} -m elf32ppclinux"
 	    ;;
 	  s390x-*linux*)
@@ -1345,7 +1348,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
 	  x86_64-*linux*)
 	    LD="${LD-ld} -m elf_x86_64"
 	    ;;
-	  ppc*-*linux*|powerpc*-*linux*)
+	  powerpcle-*linux*)
+	    LD="${LD-ld} -m elf64lppc"
+	    ;;
+	  powerpc-*linux*)
 	    LD="${LD-ld} -m elf64ppc"
 	    ;;
 	  s390*-*linux*|s390*-*tpf*)
diff --git a/man/CartConvert.1 b/man/CartConvert.1
index 9a2f746..60bbb5f 100644
--- a/man/CartConvert.1
+++ b/man/CartConvert.1
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.20)
+.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -38,6 +38,8 @@
 .    ds PI \(*p
 .    ds L" ``
 .    ds R" ''
+.    ds C`
+.    ds C'
 'br\}
 .\"
 .\" Escape single quotes in literal strings from groff's Unicode transform.
@@ -48,17 +50,24 @@
 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
 .\" entries marked with X<> in POD.  Of course, you'll have to process the
 .\" output yourself in some meaningful fashion.
-.ie \nF \{\
-.    de IX
-.    tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
 ..
-.    nr % 0
-.    rr F
-.\}
-.el \{\
-.    de IX
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+.    if \nF \{
+.        de IX
+.        tm Index:\\$1\t\\n%\t"\\$2"
 ..
+.        if !\nF==2 \{
+.            nr % 0
+.            nr F 2
+.        \}
+.    \}
 .\}
+.rr rF
 .\"
 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
@@ -124,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "CARTCONVERT 1"
-.TH CARTCONVERT 1 "2014-03-13" "GeographicLib 1.35" "GeographicLib Utilities"
+.TH CARTCONVERT 1 "2014-08-08" "GeographicLib 1.37" "GeographicLib Utilities"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/man/CartConvert.usage b/man/CartConvert.usage
index 57374a7..1075478 100644
--- a/man/CartConvert.usage
+++ b/man/CartConvert.usage
@@ -9,7 +9,7 @@ int usage(int retval, bool brief) {
 "For full documentation type:\n"
 "    CartConvert --help\n"
 "or visit:\n"
-"    http://geographiclib.sf.net/1.35/CartConvert.1.html\n";
+"    http://geographiclib.sf.net/1.37/CartConvert.1.html\n";
   else
     ( retval ? std::cerr : std::cout ) << "Man page:\n"
 "NAME\n"
diff --git a/man/ConicProj.1 b/man/ConicProj.1
index 997017d..189aa9b 100644
--- a/man/ConicProj.1
+++ b/man/ConicProj.1
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.20)
+.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -38,6 +38,8 @@
 .    ds PI \(*p
 .    ds L" ``
 .    ds R" ''
+.    ds C`
+.    ds C'
 'br\}
 .\"
 .\" Escape single quotes in literal strings from groff's Unicode transform.
@@ -48,17 +50,24 @@
 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
 .\" entries marked with X<> in POD.  Of course, you'll have to process the
 .\" output yourself in some meaningful fashion.
-.ie \nF \{\
-.    de IX
-.    tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
 ..
-.    nr % 0
-.    rr F
-.\}
-.el \{\
-.    de IX
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+.    if \nF \{
+.        de IX
+.        tm Index:\\$1\t\\n%\t"\\$2"
 ..
+.        if !\nF==2 \{
+.            nr % 0
+.            nr F 2
+.        \}
+.    \}
 .\}
+.rr rF
 .\"
 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
@@ -124,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "CONICPROJ 1"
-.TH CONICPROJ 1 "2014-03-13" "GeographicLib 1.35" "GeographicLib Utilities"
+.TH CONICPROJ 1 "2014-08-08" "GeographicLib 1.37" "GeographicLib Utilities"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -135,7 +144,7 @@ ConicProj \-\- perform conic projections
 .IX Header "SYNOPSIS"
 \&\fBConicProj\fR ( \fB\-c\fR | \fB\-a\fR ) \fIlat1\fR \fIlat2\fR
 [ \fB\-l\fR \fIlon0\fR ] [ \fB\-k\fR \fIk1\fR ] [ \fB\-r\fR ]
-[ \fB\-e\fR \fIa\fR \fIf\fR ]
+[ \fB\-e\fR \fIa\fR \fIf\fR ] [ \fB\-p\fR \fIprec\fR ]
 [ \fB\-\-comment\-delimiter\fR \fIcommentdelim\fR ]
 [ \fB\-\-version\fR | \fB\-h\fR | \fB\-\-help\fR ]
 [ \fB\-\-input\-file\fR \fIinfile\fR | \fB\-\-input\-string\fR \fIinstring\fR ]
@@ -201,6 +210,13 @@ the flattening is \fIf\fR.  Setting \fIf\fR = 0 results in a sphere.  Specify
 is allowed for \fIf\fR.  (Also, if \fIf\fR > 1, the flattening is set to
 1/\fIf\fR.)  By default, the \s-1WGS84\s0 ellipsoid is used, \fIa\fR = 6378137 m,
 \&\fIf\fR = 1/298.257223563.
+.IP "\fB\-p\fR" 4
+.IX Item "-p"
+set the output precision to \fIprec\fR (default 6).  \fIprec\fR is the number
+of digits after the decimal point for lengths (in meters).  For
+latitudes and longitudes (in degrees), the number of digits after the
+decimal point is \fIprec\fR + 5.  For the convergence (in degrees) and
+scale, the number of digits after the decimal point is \fIprec\fR + 6.
 .IP "\fB\-\-comment\-delimiter\fR" 4
 .IX Item "--comment-delimiter"
 set the comment delimiter to \fIcommentdelim\fR (e.g., \*(L"#\*(R" or \*(L"//\*(R").  If
diff --git a/man/ConicProj.1.html b/man/ConicProj.1.html
index 9de3fd6..6b6e53f 100644
--- a/man/ConicProj.1.html
+++ b/man/ConicProj.1.html
@@ -17,7 +17,7 @@
 
 <h1 id="SYNOPSIS">SYNOPSIS</h1>
 
-<p><b>ConicProj</b> ( <b>-c</b> | <b>-a</b> ) <i>lat1</i> <i>lat2</i> [ <b>-l</b> <i>lon0</i> ] [ <b>-k</b> <i>k1</i> ] [ <b>-r</b> ] [ <b>-e</b> <i>a</i> <i>f</i> ] [ <b>--comment-delimiter</b> <i>commentdelim</i> ] [ <b>--version</b> | <b>-h</b> | <b>--help</b> ] [ <b>--input-file</b> <i>infile</i> | <b>--input-string</b> <i>instring</i> ] [ <b>--line-separator</b> <i>linesep</i> ] [ <b>--output-file</b> <i>outfile</i> ]</p>
+<p><b>ConicProj</b> ( <b>-c</b> | <b>-a</b> ) <i>lat1</i> <i>lat2</i> [ <b>-l</b> <i>lon0</i> ] [ <b>-k</b> <i>k1</i> ] [ <b>-r</b> ] [ <b>-e</b> <i>a</i> <i>f</i> ] [ <b>-p</b> <i>prec</i> ] [ <b>--comment-delimiter</b> <i>commentdelim</i> ] [ <b>--version</b> | <b>-h</b> | <b>--help</b> ] [ <b>--input-file</b> <i>infile</i> | <b>--input-string</b> <i>instring</i> ] [ <b>--line-separator</b> <i>linesep</i> ] [ <b>--output-file</b> <i>outfile</i> ]</p>
 
 <h1 id="DESCRIPTION">DESCRIPTION</h1>
 
@@ -67,6 +67,12 @@
 <p>specify the ellipsoid via <i>a</i> <i>f</i>; the equatorial radius is <i>a</i> and the flattening is <i>f</i>. Setting <i>f</i> = 0 results in a sphere. Specify <i>f</i> < 0 for a prolate ellipsoid. A simple fraction, e.g., 1/297, is allowed for <i>f</i>. (Also, if <i>f</i> > 1, the flattening is set to 1/<i>f</i>.) By default, the WGS84 ellipsoid is used, <i>a</i> = 6378137 m, <i>f</i> = 1/298.257223563.</p>
 
 </dd>
+<dt id="p"><b>-p</b></dt>
+<dd>
+
+<p>set the output precision to <i>prec</i> (default 6). <i>prec</i> is the number of digits after the decimal point for lengths (in meters). For latitudes and longitudes (in degrees), the number of digits after the decimal point is <i>prec</i> + 5. For the convergence (in degrees) and scale, the number of digits after the decimal point is <i>prec</i> + 6.</p>
+
+</dd>
 <dt id="comment-delimiter"><b>--comment-delimiter</b></dt>
 <dd>
 
diff --git a/man/ConicProj.pod b/man/ConicProj.pod
index 59e2561..20f39cb 100644
--- a/man/ConicProj.pod
+++ b/man/ConicProj.pod
@@ -6,7 +6,7 @@ ConicProj -- perform conic projections
 
 B<ConicProj> ( B<-c> | B<-a> ) I<lat1> I<lat2>
 [ B<-l> I<lon0> ] [ B<-k> I<k1> ] [ B<-r> ]
-[ B<-e> I<a> I<f> ]
+[ B<-e> I<a> I<f> ] [ B<-p> I<prec> ]
 [ B<--comment-delimiter> I<commentdelim> ]
 [ B<--version> | B<-h> | B<--help> ]
 [ B<--input-file> I<infile> | B<--input-string> I<instring> ]
@@ -82,6 +82,14 @@ is allowed for I<f>.  (Also, if I<f> E<gt> 1, the flattening is set to
 1/I<f>.)  By default, the WGS84 ellipsoid is used, I<a> = 6378137 m,
 I<f> = 1/298.257223563.
 
+=item B<-p>
+
+set the output precision to I<prec> (default 6).  I<prec> is the number
+of digits after the decimal point for lengths (in meters).  For
+latitudes and longitudes (in degrees), the number of digits after the
+decimal point is I<prec> + 5.  For the convergence (in degrees) and
+scale, the number of digits after the decimal point is I<prec> + 6.
+
 =item B<--comment-delimiter>
 
 set the comment delimiter to I<commentdelim> (e.g., "#" or "//").  If
diff --git a/man/ConicProj.usage b/man/ConicProj.usage
index a84aa4f..e140e7e 100644
--- a/man/ConicProj.usage
+++ b/man/ConicProj.usage
@@ -2,14 +2,14 @@ int usage(int retval, bool brief) {
   if (brief)
     ( retval ? std::cerr : std::cout ) << "Usage:\n"
 "    ConicProj ( -c | -a ) lat1 lat2 [ -l lon0 ] [ -k k1 ] [ -r ] [ -e a f ]\n"
-"    [ --comment-delimiter commentdelim ] [ --version | -h | --help ] [\n"
-"    --input-file infile | --input-string instring ] [ --line-separator\n"
-"    linesep ] [ --output-file outfile ]\n"
+"    [ -p prec ] [ --comment-delimiter commentdelim ] [ --version | -h |\n"
+"    --help ] [ --input-file infile | --input-string instring ] [\n"
+"    --line-separator linesep ] [ --output-file outfile ]\n"
 "\n"
 "For full documentation type:\n"
 "    ConicProj --help\n"
 "or visit:\n"
-"    http://geographiclib.sf.net/1.35/ConicProj.1.html\n";
+"    http://geographiclib.sf.net/1.37/ConicProj.1.html\n";
   else
     ( retval ? std::cerr : std::cout ) << "Man page:\n"
 "NAME\n"
@@ -17,9 +17,9 @@ int usage(int retval, bool brief) {
 "\n"
 "SYNOPSIS\n"
 "       ConicProj ( -c | -a ) lat1 lat2 [ -l lon0 ] [ -k k1 ] [ -r ] [ -e a f ]\n"
-"       [ --comment-delimiter commentdelim ] [ --version | -h | --help ] [\n"
-"       --input-file infile | --input-string instring ] [ --line-separator\n"
-"       linesep ] [ --output-file outfile ]\n"
+"       [ -p prec ] [ --comment-delimiter commentdelim ] [ --version | -h |\n"
+"       --help ] [ --input-file infile | --input-string instring ] [\n"
+"       --line-separator linesep ] [ --output-file outfile ]\n"
 "\n"
 "DESCRIPTION\n"
 "       Perform one of two conic projections geodesics.  Convert geodetic\n"
@@ -74,6 +74,13 @@ int usage(int retval, bool brief) {
 "           default, the WGS84 ellipsoid is used, a = 6378137 m, f =\n"
 "           1/298.257223563.\n"
 "\n"
+"       -p  set the output precision to prec (default 6).  prec is the number\n"
+"           of digits after the decimal point for lengths (in meters).  For\n"
+"           latitudes and longitudes (in degrees), the number of digits after\n"
+"           the decimal point is prec + 5.  For the convergence (in degrees)\n"
+"           and scale, the number of digits after the decimal point is prec +\n"
+"           6.\n"
+"\n"
 "       --comment-delimiter\n"
 "           set the comment delimiter to commentdelim (e.g., \"#\" or \"//\").  If\n"
 "           set, the input lines will be scanned for this delimiter and, if\n"
diff --git a/man/GeoConvert.1 b/man/GeoConvert.1
index 747b8cd..6d07163 100644
--- a/man/GeoConvert.1
+++ b/man/GeoConvert.1
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.20)
+.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -38,6 +38,8 @@
 .    ds PI \(*p
 .    ds L" ``
 .    ds R" ''
+.    ds C`
+.    ds C'
 'br\}
 .\"
 .\" Escape single quotes in literal strings from groff's Unicode transform.
@@ -48,17 +50,24 @@
 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
 .\" entries marked with X<> in POD.  Of course, you'll have to process the
 .\" output yourself in some meaningful fashion.
-.ie \nF \{\
-.    de IX
-.    tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
 ..
-.    nr % 0
-.    rr F
-.\}
-.el \{\
-.    de IX
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+.    if \nF \{
+.        de IX
+.        tm Index:\\$1\t\\n%\t"\\$2"
 ..
+.        if !\nF==2 \{
+.            nr % 0
+.            nr F 2
+.        \}
+.    \}
 .\}
+.rr rF
 .\"
 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
@@ -124,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "GEOCONVERT 1"
-.TH GEOCONVERT 1 "2014-03-13" "GeographicLib 1.35" "GeographicLib Utilities"
+.TH GEOCONVERT 1 "2014-08-08" "GeographicLib 1.37" "GeographicLib Utilities"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -135,6 +144,7 @@ GeoConvert \-\- convert geographic coordinates
 .IX Header "SYNOPSIS"
 \&\fBGeoConvert\fR [ \fB\-g\fR | \fB\-d\fR | \fB\-:\fR | \fB\-u\fR | \fB\-m\fR | \fB\-c\fR ]
 [ \fB\-p\fR \fIprec\fR ] [ \fB\-z\fR \fIzone\fR | \fB\-s\fR | \fB\-t\fR ] [ \fB\-n\fR ] [ \fB\-w\fR ]
+[ \fB\-l\fR | \fB\-a\fR ]
 [ \fB\-\-comment\-delimiter\fR \fIcommentdelim\fR ]
 [ \fB\-\-version\fR | \fB\-h\fR | \fB\-\-help\fR ]
 [ \fB\-\-input\-file\fR \fIinfile\fR | \fB\-\-input\-string\fR \fIinstring\fR ]
@@ -154,7 +164,7 @@ is used (\fIa\fR = 6378137 m, \fIf\fR = 1/298.257223563).
 2 tokens (output options \fB\-g\fR, \fB\-d\fR, or \fB\-:\fR) given as \fIlatitude\fR
 \&\fIlongitude\fR using decimal degrees or degrees minutes seconds.  d, ',
 and " are used to denote degrees, minutes, and seconds, with the least
-significant designator optional.  (See \*(L"\s-1QUOTING\s0\*(R" for how to
+significant designator optional.  (See \*(L"\s-1QUOTING\*(R"\s0 for how to
 quote the characters ' and " when entering coordinates on the command
 line.)  Various unicode characters (encoded with \s-1UTF\-8\s0) may also be used
 to denote degrees, minutes, and seconds, e.g., the degree, prime, and
@@ -175,14 +185,14 @@ the longitude.  For example, the following are all equivalent
 .IX Item "UTM/UPS"
 3 tokens (output option \fB\-u\fR) given as \fIzone\fR+\fIhemisphere\fR \fIeasting\fR
 \&\fInorthing\fR or \fIeasting\fR \fInorthing\fR \fIzone\fR+\fIhemisphere\fR, where
-\&\fIhemisphere\fR is either \fIN\fR or \fIS\fR.  The \fIzone\fR is absent for a \s-1UPS\s0
-specification.  For example,
+\&\fIhemisphere\fR is either \fIn\fR (or \fInorth\fR) or \fIs\fR (or \fIsouth\fR).  The
+\&\fIzone\fR is absent for a \s-1UPS\s0 specification.  For example,
 .Sp
 .Vb 4
-\&    38N 444140.54 3684706.36
-\&    444140.54 3684706.36 38N
-\&    S 2173854.98 2985980.58
-\&    2173854.98 2985980.58 S
+\&    38n 444140.54 3684706.36
+\&    444140.54 3684706.36 38n
+\&    s 2173854.98 2985980.58
+\&    2173854.98 2985980.58 s
 .Ve
 .IP "\fB\s-1MRGS\s0\fR" 4
 .IX Item "MRGS"
@@ -207,10 +217,10 @@ like \fB\-d\fR, except use : as a separator instead of the d, ', and "
 delimiters.
 .IP "\fB\-u\fR" 4
 .IX Item "-u"
-output \s-1UTM\s0 or \s-1UPS\s0.
+output \s-1UTM\s0 or \s-1UPS.\s0
 .IP "\fB\-m\fR" 4
 .IX Item "-m"
-output \s-1MGRS\s0.
+output \s-1MGRS.\s0
 .IP "\fB\-c\fR" 4
 .IX Item "-c"
 output meridian convergence and scale for the corresponding \s-1UTM\s0 or
@@ -219,12 +229,12 @@ degrees clockwise from true north.
 .IP "\fB\-p\fR" 4
 .IX Item "-p"
 set the output precision to \fIprec\fR (default 0); \fIprec\fR is the
-precision relative to 1 m.  See \*(L"\s-1PRECISION\s0\*(R".
+precision relative to 1 m.  See \*(L"\s-1PRECISION\*(R"\s0.
 .IP "\fB\-z\fR" 4
 .IX Item "-z"
 set the zone to \fIzone\fR for output.  Use either 0 < \fIzone\fR <=
-60 for a \s-1UTM\s0 zone or \fIzone\fR = 0 for \s-1UPS\s0.  Alternatively use a
-\&\fIzone\fR+\fIhemisphere\fR designation, e.g., 38N.  See \*(L"\s-1ZONE\s0\*(R".
+60 for a \s-1UTM\s0 zone or \fIzone\fR = 0 for \s-1UPS. \s0 Alternatively use a
+\&\fIzone\fR+\fIhemisphere\fR designation, e.g., 38n.  See \*(L"\s-1ZONE\*(R"\s0.
 .IP "\fB\-s\fR" 4
 .IX Item "-s"
 use the standard \s-1UPS\s0 and \s-1UTM\s0 zones.
@@ -234,12 +244,21 @@ similar to \fB\-s\fR but forces \s-1UPS\s0 regions to the closest \s-1UTM\s0 zon
 .IP "\fB\-n\fR" 4
 .IX Item "-n"
 on input, \s-1MGRS\s0 coordinates refer to the south-west corner of the \s-1MGRS\s0
-square instead of the center; see \*(L"\s-1MGRS\s0\*(R".
+square instead of the center; see \*(L"\s-1MGRS\*(R"\s0.
 .IP "\fB\-w\fR" 4
 .IX Item "-w"
 on input and output, longitude precedes latitude (except that on input
 this can be overridden by a hemisphere designator, \fIN\fR, \fIS\fR, \fIE\fR,
 \&\fIW\fR).
+.IP "\fB\-l\fR" 4
+.IX Item "-l"
+on output, \s-1UTM/UPS\s0 uses the long forms \fInorth\fR and \fIsouth\fR to
+designate the hemisphere instead of \fIn\fR or \fIs\fR.
+.IP "\fB\-a\fR" 4
+.IX Item "-a"
+on output, \s-1UTM/UPS\s0 uses the abbreviations \fIn\fR and \fIs\fR to designate the
+hemisphere instead of \fInorth\fR or \fIsouth\fR; this is the default
+representation.
 .IP "\fB\-\-comment\-delimiter\fR" 4
 .IX Item "--comment-delimiter"
 set the comment delimiter to \fIcommentdelim\fR (e.g., \*(L"#\*(R" or \*(L"//\*(R").  If
@@ -277,26 +296,26 @@ file name of \*(L"\-\*(R" stands for standard output.
 .IX Header "PRECISION"
 \&\fIprec\fR gives precision of the output with \fIprec\fR = 0 giving 1 m
 precision, \fIprec\fR = 3 giving 1 mm precision, etc.  \fIprec\fR is the number
-of digits after the decimal point for \s-1UTM/UPS\s0.  The number of digits per
+of digits after the decimal point for \s-1UTM/UPS. \s0 The number of digits per
 coordinate for \s-1MGRS\s0 is 5 + \fIprec\fR.  For decimal degrees, the number of
-digits after the decimal point is 5 + \fIprec\fR.  For \s-1DMS\s0 (degree, minute,
+digits after the decimal point is 5 + \fIprec\fR.  For \s-1DMS \s0(degree, minute,
 seconds) output, the number of digits after the decimal point in the
 seconds components is 1 + \fIprec\fR; if this is negative then use minutes
 (\fIprec\fR = \-2 or \-3) or degrees (\fIprec\fR <= \-4) as the least significant
 component.  Print convergence, resp. scale, with 5 + \fIprec\fR, resp. 7 +
 \&\fIprec\fR, digits after the decimal point.  The minimum value of \fIprec\fR is
-\&\-5 and the maximum is 9 for \s-1UTM/UPS\s0, 9 for decimal degrees, 10 for \s-1DMS\s0,
-6 for \s-1MGRS\s0, and 8 for convergence and scale.
+\&\-5 and the maximum is 9 for \s-1UTM/UPS, 9\s0 for decimal degrees, 10 for \s-1DMS,
+6\s0 for \s-1MGRS,\s0 and 8 for convergence and scale.
 .SH "MGRS"
 .IX Header "MGRS"
 \&\s-1MGRS\s0 coordinates represent a square patch of the earth, thus \f(CW\*(C`38SMB4488\*(C'\fR
-is in zone \f(CW\*(C`38N\*(C'\fR with 444km <= \fIeasting\fR < 445km and 3688km <=
+is in zone \f(CW\*(C`38n\*(C'\fR with 444km <= \fIeasting\fR < 445km and 3688km <=
 \&\fInorthing\fR < 3689km.  Consistent with this representation,
 coordinates are \fItruncated\fR (instead of \fIrounded\fR) to the requested
 precision.  Similarly, on input an \s-1MGRS\s0 coordinate represents the
-\&\fIcenter\fR of the square (\f(CW\*(C`38N 444500 3688500\*(C'\fR in the example above).
+\&\fIcenter\fR of the square (\f(CW\*(C`38n 444500 3688500\*(C'\fR in the example above).
 However, if the \fB\-n\fR option is given then the south-west corner of the
-square is returned instead (\f(CW\*(C`38N 444000 3688000\*(C'\fR in the example above).
+square is returned instead (\f(CW\*(C`38n 444000 3688000\*(C'\fR in the example above).
 .SH "ZONE"
 .IX Header "ZONE"
 If the input is \fBgeographic\fR, \fBGeoConvert\fR uses the standard rules of
@@ -304,7 +323,7 @@ selecting \s-1UTM\s0 vs \s-1UPS\s0 and for assigning the \s-1UTM\s0 zone (with t
 Svalbard exceptions).  If the input is \fB\s-1UTM/UPS\s0\fR or \fB\s-1MGRS\s0\fR, then the
 choice between \s-1UTM\s0 and \s-1UPS\s0 and the \s-1UTM\s0 zone mirrors the input.  The \fB\-z\fR
 \&\fIzone\fR, \fB\-s\fR, and \fB\-t\fR options allow these rules to be overridden
-with \fIzone\fR = 0 being used to indicate \s-1UPS\s0.  For example, the point
+with \fIzone\fR = 0 being used to indicate \s-1UPS. \s0 For example, the point
 .PP
 .Vb 1
 \&   79.9S 6.1E
@@ -331,16 +350,17 @@ Is \fIzone\fR is specified with a hemisphere, then this is honored when
 printing \s-1UTM\s0 coordinates:
 .PP
 .Vb 4
-\&   echo \-1 3 | GeoConvert \-u         => 31S 500000 9889470
-\&   echo \-1 3 | GeoConvert \-u \-z 31   => 31S 500000 9889470
-\&   echo \-1 3 | GeoConvert \-u \-z 31S  => 31S 500000 9889470
-\&   echo \-1 3 | GeoConvert \-u \-z 31N  => 31N 500000 \-110530
+\&   echo \-1 3 | GeoConvert \-u         => 31s 500000 9889470
+\&   echo \-1 3 | GeoConvert \-u \-z 31   => 31s 500000 9889470
+\&   echo \-1 3 | GeoConvert \-u \-z 31s  => 31s 500000 9889470
+\&   echo \-1 3 | GeoConvert \-u \-z 31n  => 31n 500000 \-110530
 .Ve
 .PP
 \&\fB\s-1NOTE\s0\fR: the letter in the zone specification for \s-1UTM\s0 is a hemisphere
-designator \fIN\fR or \fIS\fR and \fInot\fR an \s-1MGRS\s0 latitude band letter.
+designator \fIn\fR or \fIs\fR and \fInot\fR an \s-1MGRS\s0 latitude band letter.
 Convert the \s-1MGRS\s0 latitude band letter to a hemisphere as follows:
-replace \fIC\fR thru \fIM\fR by \fIS\fR; replace \fIN\fR thru \fIX\fR by \fIN\fR.
+replace \fIC\fR thru \fIM\fR by \fIs\fR (or \fIsouth\fR); replace \fIN\fR thru \fIX\fR by
+\&\fIn\fR (or \fInorth\fR).
 .SH "QUOTING"
 .IX Header "QUOTING"
 Unfortunately the characters ' and \*(L" have special meanings in many
@@ -395,7 +415,7 @@ file \f(CW\*(C`input.txt\*(C'\fR should just contain the plain coordinates.
 .Vb 4
 \&   echo 38SMB4488 | GeoConvert         => 33.33424 44.40363
 \&   echo 38SMB4488 | GeoConvert \-: \-p 1 => 33:20:03.25N 044:2413.06E
-\&   echo 38SMB4488 | GeoConvert \-u      => 38N 444500 3688500
+\&   echo 38SMB4488 | GeoConvert \-u      => 38n 444500 3688500
 \&   echo E44d24 N33d20 | GeoConvert \-m \-p \-3 => 38SMB4488
 .Ve
 .SH "ERRORS"
@@ -426,8 +446,8 @@ World Geodetic System 1984,
 .IX Header "SEE ALSO"
 The algorithms for the transverse Mercator projection are described in
 C. F. F. Karney, \fITransverse Mercator with an accuracy of a few
-nanometers\fR, J. Geodesy \fB85\fR(8), 475\-485 (Aug. 2011); \s-1DOI\s0
-http://dx.doi.org/10.1007/s00190\-011\-0445\-3 <http://dx.doi.org/10.1007/s00190-011-0445-3>; preprint
+nanometers\fR, J. Geodesy \fB85\fR(8), 475\-485 (Aug. 2011); \s-1DOI
+\&\s0<http://dx.doi.org/10.1007/s00190\-011\-0445\-3>; preprint
 <http://arxiv.org/abs/1002.1417>.
 .SH "AUTHOR"
 .IX Header "AUTHOR"
diff --git a/man/GeoConvert.1.html b/man/GeoConvert.1.html
index 5c117b4..677ca9d 100644
--- a/man/GeoConvert.1.html
+++ b/man/GeoConvert.1.html
@@ -17,7 +17,7 @@
 
 <h1 id="SYNOPSIS">SYNOPSIS</h1>
 
-<p><b>GeoConvert</b> [ <b>-g</b> | <b>-d</b> | <b>-:</b> | <b>-u</b> | <b>-m</b> | <b>-c</b> ] [ <b>-p</b> <i>prec</i> ] [ <b>-z</b> <i>zone</i> | <b>-s</b> | <b>-t</b> ] [ <b>-n</b> ] [ <b>-w</b> ] [ <b>--comment-delimiter</b> <i>commentdelim</i> ] [ <b>--version</b> | <b>-h</b> | <b>--help</b> ] [ <b>--input-file</b> <i>infile</i> | <b>--input-string</b> <i>instring</i> ] [ <b>--line-separator</b> <i>linesep</i> ] [ <b>--output-file</b> <i>outfile</i> ]</p>
+<p><b>GeoConvert</b> [ <b>-g</b> | <b>-d</b> | <b>-:</b> | <b>-u</b> | <b>-m</b> | <b>-c</b> ] [ <b>-p</b> <i>prec</i> ] [ <b>-z</b> <i>zone</i> | <b>-s</b> | <b>-t</b> ] [ <b>-n</b> ] [ <b>-w</b> ] [ <b>-l</b> | <b>-a</b> ] [ <b>--comment-delimiter</b> <i>commentdelim</i> ] [ <b>--version</b> | <b>-h</b> | <b>--help</b> ] [ <b>--input-file</b> <i>infile</i> | <b>--input-string</b> <i>instring</i> ] [ <b>--line-separator</b> <i>linesep</i> ] [ <b>--output-file</b> <i>outfile</i> ]</p>
 
 <h1 id="DESCRIPTION">DESCRIPTION</h1>
 
@@ -40,12 +40,12 @@
 <dt id="UTM-UPS"><b>UTM/UPS</b></dt>
 <dd>
 
-<p>3 tokens (output option <b>-u</b>) given as <i>zone</i>+<i>hemisphere</i> <i>easting</i> <i>northing</i> or <i>easting</i> <i>northing</i> <i>zone</i>+<i>hemisphere</i>, where <i>hemisphere</i> is either <i>N</i> or <i>S</i>. The <i>zone</i> is absent for a UPS specification. For example,</p>
+<p>3 tokens (output option <b>-u</b>) given as <i>zone</i>+<i>hemisphere</i> <i>easting</i> <i>northing</i> or <i>easting</i> <i>northing</i> <i>zone</i>+<i>hemisphere</i>, where <i>hemisphere</i> is either <i>n</i> (or <i>north</i>) or <i>s</i> (or <i>south</i>). The <i>zone</i> is absent for a UPS specification. For example,</p>
 
-<pre><code>    38N 444140.54 3684706.36
-    444140.54 3684706.36 38N
-    S 2173854.98 2985980.58
-    2173854.98 2985980.58 S</code></pre>
+<pre><code>    38n 444140.54 3684706.36
+    444140.54 3684706.36 38n
+    s 2173854.98 2985980.58
+    2173854.98 2985980.58 s</code></pre>
 
 </dd>
 <dt id="MRGS"><b>MRGS</b></dt>
@@ -75,7 +75,7 @@
 <p>output latitude and longitude using degrees, minutes, and seconds (DMS).</p>
 
 </dd>
-<dt id="pod-:"><b>-:</b></dt>
+<dt id="pod"><b>-:</b></dt>
 <dd>
 
 <p>like <b>-d</b>, except use : as a separator instead of the d, ', and " delimiters.</p>
@@ -108,7 +108,7 @@
 <dt id="z"><b>-z</b></dt>
 <dd>
 
-<p>set the zone to <i>zone</i> for output. Use either 0 < <i>zone</i> <= 60 for a UTM zone or <i>zone</i> = 0 for UPS. Alternatively use a <i>zone</i>+<i>hemisphere</i> designation, e.g., 38N. See <a href="#ZONE">"ZONE"</a>.</p>
+<p>set the zone to <i>zone</i> for output. Use either 0 < <i>zone</i> <= 60 for a UTM zone or <i>zone</i> = 0 for UPS. Alternatively use a <i>zone</i>+<i>hemisphere</i> designation, e.g., 38n. See <a href="#ZONE">"ZONE"</a>.</p>
 
 </dd>
 <dt id="s"><b>-s</b></dt>
@@ -135,6 +135,18 @@
 <p>on input and output, longitude precedes latitude (except that on input this can be overridden by a hemisphere designator, <i>N</i>, <i>S</i>, <i>E</i>, <i>W</i>).</p>
 
 </dd>
+<dt id="l"><b>-l</b></dt>
+<dd>
+
+<p>on output, UTM/UPS uses the long forms <i>north</i> and <i>south</i> to designate the hemisphere instead of <i>n</i> or <i>s</i>.</p>
+
+</dd>
+<dt id="a"><b>-a</b></dt>
+<dd>
+
+<p>on output, UTM/UPS uses the abbreviations <i>n</i> and <i>s</i> to designate the hemisphere instead of <i>north</i> or <i>south</i>; this is the default representation.</p>
+
+</dd>
 <dt id="comment-delimiter"><b>--comment-delimiter</b></dt>
 <dd>
 
@@ -191,7 +203,7 @@
 
 <h1 id="MGRS">MGRS</h1>
 
-<p>MGRS coordinates represent a square patch of the earth, thus <code>38SMB4488</code> is in zone <code>38N</code> with 444km <= <i>easting</i> < 445km and 3688km <= <i>northing</i> < 3689km. Consistent with this representation, coordinates are <i>truncated</i> (instead of <i>rounded</i>) to the requested precision. Similarly, on input an MGRS coordinate represents the <i>center</i> of the square (<code>38N 444500 3688500</code> in the example above). However, if the <b>-n</b [...]
+<p>MGRS coordinates represent a square patch of the earth, thus <code>38SMB4488</code> is in zone <code>38n</code> with 444km <= <i>easting</i> < 445km and 3688km <= <i>northing</i> < 3689km. Consistent with this representation, coordinates are <i>truncated</i> (instead of <i>rounded</i>) to the requested precision. Similarly, on input an MGRS coordinate represents the <i>center</i> of the square (<code>38n 444500 3688500</code> in the example above). However, if the <b>-n</b [...]
 
 <h1 id="ZONE">ZONE</h1>
 
@@ -214,12 +226,12 @@
 
 <p>Is <i>zone</i> is specified with a hemisphere, then this is honored when printing UTM coordinates:</p>
 
-<pre><code>   echo -1 3 | GeoConvert -u         => 31S 500000 9889470
-   echo -1 3 | GeoConvert -u -z 31   => 31S 500000 9889470
-   echo -1 3 | GeoConvert -u -z 31S  => 31S 500000 9889470
-   echo -1 3 | GeoConvert -u -z 31N  => 31N 500000 -110530</code></pre>
+<pre><code>   echo -1 3 | GeoConvert -u         => 31s 500000 9889470
+   echo -1 3 | GeoConvert -u -z 31   => 31s 500000 9889470
+   echo -1 3 | GeoConvert -u -z 31s  => 31s 500000 9889470
+   echo -1 3 | GeoConvert -u -z 31n  => 31n 500000 -110530</code></pre>
 
-<p><b>NOTE</b>: the letter in the zone specification for UTM is a hemisphere designator <i>N</i> or <i>S</i> and <i>not</i> an MGRS latitude band letter. Convert the MGRS latitude band letter to a hemisphere as follows: replace <i>C</i> thru <i>M</i> by <i>S</i>; replace <i>N</i> thru <i>X</i> by <i>N</i>.</p>
+<p><b>NOTE</b>: the letter in the zone specification for UTM is a hemisphere designator <i>n</i> or <i>s</i> and <i>not</i> an MGRS latitude band letter. Convert the MGRS latitude band letter to a hemisphere as follows: replace <i>C</i> thru <i>M</i> by <i>s</i> (or <i>south</i>); replace <i>N</i> thru <i>X</i> by <i>n</i> (or <i>north</i>).</p>
 
 <h1 id="QUOTING">QUOTING</h1>
 
@@ -227,7 +239,7 @@
 
 <dl>
 
-<dt id="Unix-shells-sh-bash-tsch-">Unix shells (sh, bash, tsch)</dt>
+<dt id="Unix-shells-sh-bash-tsch">Unix shells (sh, bash, tsch)</dt>
 <dd>
 
 <p>The characters ' and " can be quoted by preceding them with a \ (backslash); or you can quote a ' with a pair of "s. The two alternatives are illustrated by</p>
@@ -241,7 +253,7 @@
    => 10d20'30"N 020d30'40"E</code></pre>
 
 </dd>
-<dt id="Windows-command-shell-cmd-">Windows command shell (cmd)</dt>
+<dt id="Windows-command-shell-cmd">Windows command shell (cmd)</dt>
 <dd>
 
 <p>The ' character needs no quoting and the " character can be quoted by a ^. (This quoting is usually unnecessary because the trailing designator can be omitted.) Thus</p>
@@ -269,7 +281,7 @@
 
 <pre><code>   echo 38SMB4488 | GeoConvert         => 33.33424 44.40363
    echo 38SMB4488 | GeoConvert -: -p 1 => 33:20:03.25N 044:2413.06E
-   echo 38SMB4488 | GeoConvert -u      => 38N 444500 3688500
+   echo 38SMB4488 | GeoConvert -u      => 38n 444500 3688500
    echo E44d24 N33d20 | GeoConvert -m -p -3 => 38SMB4488</code></pre>
 
 <h1 id="ERRORS">ERRORS</h1>
diff --git a/man/GeoConvert.pod b/man/GeoConvert.pod
index f3681ca..928cb7e 100644
--- a/man/GeoConvert.pod
+++ b/man/GeoConvert.pod
@@ -6,6 +6,7 @@ GeoConvert -- convert geographic coordinates
 
 B<GeoConvert> [ B<-g> | B<-d> | B<-:> | B<-u> | B<-m> | B<-c> ]
 [ B<-p> I<prec> ] [ B<-z> I<zone> | B<-s> | B<-t> ] [ B<-n> ] [ B<-w> ]
+[ B<-l> | B<-a> ]
 [ B<--comment-delimiter> I<commentdelim> ]
 [ B<--version> | B<-h> | B<--help> ]
 [ B<--input-file> I<infile> | B<--input-string> I<instring> ]
@@ -49,13 +50,13 @@ the longitude.  For example, the following are all equivalent
 
 3 tokens (output option B<-u>) given as I<zone>+I<hemisphere> I<easting>
 I<northing> or I<easting> I<northing> I<zone>+I<hemisphere>, where
-I<hemisphere> is either I<N> or I<S>.  The I<zone> is absent for a UPS
-specification.  For example,
+I<hemisphere> is either I<n> (or I<north>) or I<s> (or I<south>).  The
+I<zone> is absent for a UPS specification.  For example,
 
-    38N 444140.54 3684706.36
-    444140.54 3684706.36 38N
-    S 2173854.98 2985980.58
-    2173854.98 2985980.58 S
+    38n 444140.54 3684706.36
+    444140.54 3684706.36 38n
+    s 2173854.98 2985980.58
+    2173854.98 2985980.58 s
 
 =item B<MRGS>
 
@@ -107,7 +108,7 @@ precision relative to 1 m.  See L</PRECISION>.
 
 set the zone to I<zone> for output.  Use either 0 E<lt> I<zone> E<lt>=
 60 for a UTM zone or I<zone> = 0 for UPS.  Alternatively use a
-I<zone>+I<hemisphere> designation, e.g., 38N.  See L</ZONE>.
+I<zone>+I<hemisphere> designation, e.g., 38n.  See L</ZONE>.
 
 =item B<-s>
 
@@ -128,6 +129,17 @@ on input and output, longitude precedes latitude (except that on input
 this can be overridden by a hemisphere designator, I<N>, I<S>, I<E>,
 I<W>).
 
+=item B<-l>
+
+on output, UTM/UPS uses the long forms I<north> and I<south> to
+designate the hemisphere instead of I<n> or I<s>.
+
+=item B<-a>
+
+on output, UTM/UPS uses the abbreviations I<n> and I<s> to designate the
+hemisphere instead of I<north> or I<south>; this is the default
+representation.
+
 =item B<--comment-delimiter>
 
 set the comment delimiter to I<commentdelim> (e.g., "#" or "//").  If
@@ -189,13 +201,13 @@ I<prec>, digits after the decimal point.  The minimum value of I<prec> is
 =head1 MGRS
 
 MGRS coordinates represent a square patch of the earth, thus C<38SMB4488>
-is in zone C<38N> with 444km E<lt>= I<easting> E<lt> 445km and 3688km E<lt>=
+is in zone C<38n> with 444km E<lt>= I<easting> E<lt> 445km and 3688km E<lt>=
 I<northing> E<lt> 3689km.  Consistent with this representation,
 coordinates are I<truncated> (instead of I<rounded>) to the requested
 precision.  Similarly, on input an MGRS coordinate represents the
-I<center> of the square (C<38N 444500 3688500> in the example above).
+I<center> of the square (C<38n 444500 3688500> in the example above).
 However, if the B<-n> option is given then the south-west corner of the
-square is returned instead (C<38N 444000 3688000> in the example above).
+square is returned instead (C<38n 444000 3688000> in the example above).
 
 =head1 ZONE
 
@@ -224,15 +236,16 @@ then
 Is I<zone> is specified with a hemisphere, then this is honored when
 printing UTM coordinates:
 
-   echo -1 3 | GeoConvert -u         => 31S 500000 9889470
-   echo -1 3 | GeoConvert -u -z 31   => 31S 500000 9889470
-   echo -1 3 | GeoConvert -u -z 31S  => 31S 500000 9889470
-   echo -1 3 | GeoConvert -u -z 31N  => 31N 500000 -110530
+   echo -1 3 | GeoConvert -u         => 31s 500000 9889470
+   echo -1 3 | GeoConvert -u -z 31   => 31s 500000 9889470
+   echo -1 3 | GeoConvert -u -z 31s  => 31s 500000 9889470
+   echo -1 3 | GeoConvert -u -z 31n  => 31n 500000 -110530
 
 B<NOTE>: the letter in the zone specification for UTM is a hemisphere
-designator I<N> or I<S> and I<not> an MGRS latitude band letter.
+designator I<n> or I<s> and I<not> an MGRS latitude band letter.
 Convert the MGRS latitude band letter to a hemisphere as follows:
-replace I<C> thru I<M> by I<S>; replace I<N> thru I<X> by I<N>.
+replace I<C> thru I<M> by I<s> (or I<south>); replace I<N> thru I<X> by
+I<n> (or I<north>).
 
 =head1 QUOTING
 
@@ -285,7 +298,7 @@ file C<input.txt> should just contain the plain coordinates.
 
    echo 38SMB4488 | GeoConvert         => 33.33424 44.40363
    echo 38SMB4488 | GeoConvert -: -p 1 => 33:20:03.25N 044:2413.06E
-   echo 38SMB4488 | GeoConvert -u      => 38N 444500 3688500
+   echo 38SMB4488 | GeoConvert -u      => 38n 444500 3688500
    echo E44d24 N33d20 | GeoConvert -m -p -3 => 38SMB4488
 
 =head1 ERRORS
diff --git a/man/GeoConvert.usage b/man/GeoConvert.usage
index 19d78a3..66a2ae3 100644
--- a/man/GeoConvert.usage
+++ b/man/GeoConvert.usage
@@ -2,14 +2,14 @@ int usage(int retval, bool brief) {
   if (brief)
     ( retval ? std::cerr : std::cout ) << "Usage:\n"
 "    GeoConvert [ -g | -d | -: | -u | -m | -c ] [ -p prec ] [ -z zone | -s |\n"
-"    -t ] [ -n ] [ -w ] [ --comment-delimiter commentdelim ] [ --version |\n"
-"    -h | --help ] [ --input-file infile | --input-string instring ] [\n"
-"    --line-separator linesep ] [ --output-file outfile ]\n"
+"    -t ] [ -n ] [ -w ] [ -l | -a ] [ --comment-delimiter commentdelim ] [\n"
+"    --version | -h | --help ] [ --input-file infile | --input-string\n"
+"    instring ] [ --line-separator linesep ] [ --output-file outfile ]\n"
 "\n"
 "For full documentation type:\n"
 "    GeoConvert --help\n"
 "or visit:\n"
-"    http://geographiclib.sf.net/1.35/GeoConvert.1.html\n";
+"    http://geographiclib.sf.net/1.37/GeoConvert.1.html\n";
   else
     ( retval ? std::cerr : std::cout ) << "Man page:\n"
 "NAME\n"
@@ -17,9 +17,9 @@ int usage(int retval, bool brief) {
 "\n"
 "SYNOPSIS\n"
 "       GeoConvert [ -g | -d | -: | -u | -m | -c ] [ -p prec ] [ -z zone | -s |\n"
-"       -t ] [ -n ] [ -w ] [ --comment-delimiter commentdelim ] [ --version |\n"
-"       -h | --help ] [ --input-file infile | --input-string instring ] [\n"
-"       --line-separator linesep ] [ --output-file outfile ]\n"
+"       -t ] [ -n ] [ -w ] [ -l | -a ] [ --comment-delimiter commentdelim ] [\n"
+"       --version | -h | --help ] [ --input-file infile | --input-string\n"
+"       instring ] [ --line-separator linesep ] [ --output-file outfile ]\n"
 "\n"
 "DESCRIPTION\n"
 "       GeoConvert reads from standard input interpreting each line as a\n"
@@ -54,13 +54,13 @@ int usage(int retval, bool brief) {
 "       UTM/UPS\n"
 "           3 tokens (output option -u) given as zone+hemisphere easting\n"
 "           northing or easting northing zone+hemisphere, where hemisphere is\n"
-"           either N or S.  The zone is absent for a UPS specification.  For\n"
-"           example,\n"
+"           either n (or north) or s (or south).  The zone is absent for a UPS\n"
+"           specification.  For example,\n"
 "\n"
-"               38N 444140.54 3684706.36\n"
-"               444140.54 3684706.36 38N\n"
-"               S 2173854.98 2985980.58\n"
-"               2173854.98 2985980.58 S\n"
+"               38n 444140.54 3684706.36\n"
+"               444140.54 3684706.36 38n\n"
+"               s 2173854.98 2985980.58\n"
+"               2173854.98 2985980.58 s\n"
 "\n"
 "       MRGS\n"
 "           1 token (output option -m) is used to specify the center of an MGRS\n"
@@ -92,7 +92,7 @@ int usage(int retval, bool brief) {
 "\n"
 "       -z  set the zone to zone for output.  Use either 0 < zone <= 60 for a\n"
 "           UTM zone or zone = 0 for UPS.  Alternatively use a zone+hemisphere\n"
-"           designation, e.g., 38N.  See \"ZONE\".\n"
+"           designation, e.g., 38n.  See \"ZONE\".\n"
 "\n"
 "       -s  use the standard UPS and UTM zones.\n"
 "\n"
@@ -105,6 +105,13 @@ int usage(int retval, bool brief) {
 "           input this can be overridden by a hemisphere designator, N, S, E,\n"
 "           W).\n"
 "\n"
+"       -l  on output, UTM/UPS uses the long forms north and south to designate\n"
+"           the hemisphere instead of n or s.\n"
+"\n"
+"       -a  on output, UTM/UPS uses the abbreviations n and s to designate the\n"
+"           hemisphere instead of north or south; this is the default\n"
+"           representation.\n"
+"\n"
 "       --comment-delimiter\n"
 "           set the comment delimiter to commentdelim (e.g., \"#\" or \"//\").  If\n"
 "           set, the input lines will be scanned for this delimiter and, if\n"
@@ -154,13 +161,13 @@ int usage(int retval, bool brief) {
 "\n"
 "MGRS\n"
 "       MGRS coordinates represent a square patch of the earth, thus\n"
-"       \"38SMB4488\" is in zone \"38N\" with 444km <= easting < 445km and 3688km\n"
+"       \"38SMB4488\" is in zone \"38n\" with 444km <= easting < 445km and 3688km\n"
 "       <= northing < 3689km.  Consistent with this representation, coordinates\n"
 "       are truncated (instead of rounded) to the requested precision.\n"
 "       Similarly, on input an MGRS coordinate represents the center of the\n"
-"       square (\"38N 444500 3688500\" in the example above).  However, if the -n\n"
+"       square (\"38n 444500 3688500\" in the example above).  However, if the -n\n"
 "       option is given then the south-west corner of the square is returned\n"
-"       instead (\"38N 444000 3688000\" in the example above).\n"
+"       instead (\"38n 444000 3688000\" in the example above).\n"
 "\n"
 "ZONE\n"
 "       If the input is geographic, GeoConvert uses the standard rules of\n"
@@ -188,15 +195,15 @@ int usage(int retval, bool brief) {
 "       Is zone is specified with a hemisphere, then this is honored when\n"
 "       printing UTM coordinates:\n"
 "\n"
-"          echo -1 3 | GeoConvert -u         => 31S 500000 9889470\n"
-"          echo -1 3 | GeoConvert -u -z 31   => 31S 500000 9889470\n"
-"          echo -1 3 | GeoConvert -u -z 31S  => 31S 500000 9889470\n"
-"          echo -1 3 | GeoConvert -u -z 31N  => 31N 500000 -110530\n"
+"          echo -1 3 | GeoConvert -u         => 31s 500000 9889470\n"
+"          echo -1 3 | GeoConvert -u -z 31   => 31s 500000 9889470\n"
+"          echo -1 3 | GeoConvert -u -z 31s  => 31s 500000 9889470\n"
+"          echo -1 3 | GeoConvert -u -z 31n  => 31n 500000 -110530\n"
 "\n"
 "       NOTE: the letter in the zone specification for UTM is a hemisphere\n"
-"       designator N or S and not an MGRS latitude band letter.  Convert the\n"
+"       designator n or s and not an MGRS latitude band letter.  Convert the\n"
 "       MGRS latitude band letter to a hemisphere as follows: replace C thru M\n"
-"       by S; replace N thru X by N.\n"
+"       by s (or south); replace N thru X by n (or north).\n"
 "\n"
 "QUOTING\n"
 "       Unfortunately the characters ' and \" have special meanings in many\n"
@@ -240,7 +247,7 @@ int usage(int retval, bool brief) {
 "EXAMPLES\n"
 "          echo 38SMB4488 | GeoConvert         => 33.33424 44.40363\n"
 "          echo 38SMB4488 | GeoConvert -: -p 1 => 33:20:03.25N 044:2413.06E\n"
-"          echo 38SMB4488 | GeoConvert -u      => 38N 444500 3688500\n"
+"          echo 38SMB4488 | GeoConvert -u      => 38n 444500 3688500\n"
 "          echo E44d24 N33d20 | GeoConvert -m -p -3 => 38SMB4488\n"
 "\n"
 "ERRORS\n"
@@ -267,7 +274,6 @@ int usage(int retval, bool brief) {
 "       The algorithms for the transverse Mercator projection are described in\n"
 "       C. F. F. Karney, Transverse Mercator with an accuracy of a few\n"
 "       nanometers, J. Geodesy 85(8), 475-485 (Aug. 2011); DOI\n"
-"       http://dx.doi.org/10.1007/s00190-011-0445-3\n"
 "       <http://dx.doi.org/10.1007/s00190-011-0445-3>; preprint\n"
 "       <http://arxiv.org/abs/1002.1417>.\n"
 "\n"
diff --git a/man/GeodSolve.1 b/man/GeodSolve.1
index 3bd025a..994bd79 100644
--- a/man/GeodSolve.1
+++ b/man/GeodSolve.1
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.20)
+.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -38,6 +38,8 @@
 .    ds PI \(*p
 .    ds L" ``
 .    ds R" ''
+.    ds C`
+.    ds C'
 'br\}
 .\"
 .\" Escape single quotes in literal strings from groff's Unicode transform.
@@ -48,17 +50,24 @@
 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
 .\" entries marked with X<> in POD.  Of course, you'll have to process the
 .\" output yourself in some meaningful fashion.
-.ie \nF \{\
-.    de IX
-.    tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
 ..
-.    nr % 0
-.    rr F
-.\}
-.el \{\
-.    de IX
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+.    if \nF \{
+.        de IX
+.        tm Index:\\$1\t\\n%\t"\\$2"
 ..
+.        if !\nF==2 \{
+.            nr % 0
+.            nr F 2
+.        \}
+.    \}
 .\}
+.rr rF
 .\"
 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
@@ -124,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "GEODSOLVE 1"
-.TH GEODSOLVE 1 "2014-03-13" "GeographicLib 1.35" "GeographicLib Utilities"
+.TH GEODSOLVE 1 "2014-08-08" "GeographicLib 1.37" "GeographicLib Utilities"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -174,7 +183,7 @@ geodesic specified by \fIlat1\fR \fIlon1\fR \fIazi1\fR.
 .IP "\fB\-a\fR" 4
 .IX Item "-a"
 arc mode; on input \fIand\fR output \fIs12\fR is replaced by \fIa12\fR the arc
-length (in degrees) on the auxiliary sphere.  See \*(L"\s-1AUXILIARY\s0 \s-1SPHERE\s0\*(R".
+length (in degrees) on the auxiliary sphere.  See \*(L"\s-1AUXILIARY SPHERE\*(R"\s0.
 .IP "\fB\-e\fR" 4
 .IX Item "-e"
 specify the ellipsoid via \fIa\fR \fIf\fR; the equatorial radius is \fIa\fR and
@@ -197,13 +206,13 @@ report the \fIback\fR azimuth at point 2 instead of the forward azimuth.
 .IX Item "-f"
 full output; each line of output consists of 12 quantities: \fIlat1\fR
 \&\fIlon1\fR \fIazi1\fR \fIlat2\fR \fIlon2\fR \fIazi2\fR \fIs12\fR \fIa12\fR \fIm12\fR \fIM12\fR
-\&\fIM21\fR \fIS12\fR.  \fIa12\fR is described in \*(L"\s-1AUXILIARY\s0 \s-1SPHERE\s0\*(R".  The four
+\&\fIM21\fR \fIS12\fR.  \fIa12\fR is described in \*(L"\s-1AUXILIARY SPHERE\*(R"\s0.  The four
 quantities \fIm12\fR, \fIM12\fR, \fIM21\fR, and \fIS12\fR are described in
-\&\*(L"\s-1ADDITIONAL\s0 \s-1QUANTITIES\s0\*(R".
+\&\*(L"\s-1ADDITIONAL QUANTITIES\*(R"\s0.
 .IP "\fB\-p\fR" 4
 .IX Item "-p"
 set the output precision to \fIprec\fR (default 3); \fIprec\fR is the
-precision relative to 1 m.  See \*(L"\s-1PRECISION\s0\*(R".
+precision relative to 1 m.  See \*(L"\s-1PRECISION\*(R"\s0.
 .IP "\fB\-E\fR" 4
 .IX Item "-E"
 use \*(L"exact\*(R" algorithms (based on elliptic integrals) for the geodesic
@@ -304,9 +313,9 @@ the geodesic quadrilateral with corners (\fIlat1\fR,\fIlon1\fR), (0,\fIlon1\fR),
 \&\fIprec\fR gives precision of the output with \fIprec\fR = 0 giving 1 m
 precision, \fIprec\fR = 3 giving 1 mm precision, etc.  \fIprec\fR is the
 number of digits after the decimal point for lengths.  For decimal
-degrees, the number of digits after the decimal point is 5 + \fIprec\fR.
-For \s-1DMS\s0 (degree, minute, seconds) output, the number of digits after the
-decimal point in the seconds component is 1 + \fIprec\fR.  The minimum
+degrees, the number of digits after the decimal point is \fIprec\fR + 5.
+For \s-1DMS \s0(degree, minute, seconds) output, the number of digits after the
+decimal point in the seconds component is \fIprec\fR + 1.  The minimum
 value of \fIprec\fR is 0 and the maximum is 10.
 .SH "ERRORS"
 .IX Header "ERRORS"
@@ -412,9 +421,9 @@ Waypoints on the route at intervals of 2000km:
 .SH "SEE ALSO"
 .IX Header "SEE ALSO"
 \&\fIGeoConvert\fR\|(1).  The algorithms are described in C. F. F. Karney,
-\&\fIAlgorithms for geodesics\fR, J. Geodesy 87, 43\-55 (2013); \s-1DOI:\s0
-http://dx.doi.org/10.1007/s00190\-012\-0578\-z <http://dx.doi.org/10.1007/s00190-012-0578-z>;
-addenda: http://geographiclib.sf.net/geod\-addenda.html <http://geographiclib.sf.net/geod-addenda.html>.
+\&\fIAlgorithms for geodesics\fR, J. Geodesy 87, 43\-55 (2013); \s-1DOI:
+\&\s0<http://dx.doi.org/10.1007/s00190\-012\-0578\-z>;
+addenda: <http://geographiclib.sf.net/geod\-addenda.html>.
 The wikipedia page, Geodesics on an ellipsoid,
 <http://en.wikipedia.org/wiki/Geodesics_on_an_ellipsoid>.
 .SH "AUTHOR"
diff --git a/man/GeodSolve.1.html b/man/GeodSolve.1.html
index 8af2af9..2ec36bc 100644
--- a/man/GeodSolve.1.html
+++ b/man/GeodSolve.1.html
@@ -72,7 +72,7 @@
 <p>output angles as degrees, minutes, seconds instead of decimal degrees.</p>
 
 </dd>
-<dt id="pod-:"><b>-:</b></dt>
+<dt id="pod"><b>-:</b></dt>
 <dd>
 
 <p>like <b>-d</b>, except use : as a separator instead of the d, ', and " delimiters.</p>
@@ -176,7 +176,7 @@
 
 <h1 id="PRECISION">PRECISION</h1>
 
-<p><i>prec</i> gives precision of the output with <i>prec</i> = 0 giving 1 m precision, <i>prec</i> = 3 giving 1 mm precision, etc. <i>prec</i> is the number of digits after the decimal point for lengths. For decimal degrees, the number of digits after the decimal point is 5 + <i>prec</i>. For DMS (degree, minute, seconds) output, the number of digits after the decimal point in the seconds component is 1 + <i>prec</i>. The minimum value of <i>prec</i> is 0 and the maximum is 10.</p>
+<p><i>prec</i> gives precision of the output with <i>prec</i> = 0 giving 1 m precision, <i>prec</i> = 3 giving 1 mm precision, etc. <i>prec</i> is the number of digits after the decimal point for lengths. For decimal degrees, the number of digits after the decimal point is <i>prec</i> + 5. For DMS (degree, minute, seconds) output, the number of digits after the decimal point in the seconds component is <i>prec</i> + 1. The minimum value of <i>prec</i> is 0 and the maximum is 10.</p>
 
 <h1 id="ERRORS">ERRORS</h1>
 
@@ -218,13 +218,13 @@
 
 <dl>
 
-<dt id="lat1--lat2-with-neither-point-at-a-pole-"><i>lat1</i> = -<i>lat2</i> (with neither point at a pole)</dt>
+<dt id="lat1--lat2-with-neither-point-at-a-pole"><i>lat1</i> = -<i>lat2</i> (with neither point at a pole)</dt>
 <dd>
 
 <p>If <i>azi1</i> = <i>azi2</i>, the geodesic is unique. Otherwise there are two geodesics and the second one is obtained by setting [<i>azi1</i>,<i>azi2</i>] = [<i>azi2</i>,<i>azi1</i>], [<i>M12</i>,<i>M21</i>] = [<i>M21</i>,<i>M12</i>], <i>S12</i> = -<i>S12</i>. (This occurs when the longitude difference is near +/-180 for oblate ellipsoids.)</p>
 
 </dd>
-<dt id="lon2-lon1---180-with-neither-point-at-a-pole-"><i>lon2</i> = <i>lon1</i> +/- 180 (with neither point at a pole)</dt>
+<dt id="lon2-lon1---180-with-neither-point-at-a-pole"><i>lon2</i> = <i>lon1</i> +/- 180 (with neither point at a pole)</dt>
 <dd>
 
 <p>If <i>azi1</i> = 0 or +/-180, the geodesic is unique. Otherwise there are two geodesics and the second one is obtained by setting [<i>azi1</i>,<i>azi2</i>] = [-<i>azi1</i>,-<i>azi2</i>], <i>S12</i> = -<i>S12</i>. (This occurs when <i>lat2</i> is near -<i>lat1</i> for prolate ellipsoids.)</p>
@@ -236,7 +236,7 @@
 <p>There are infinitely many geodesics which can be generated by setting [<i>azi1</i>,<i>azi2</i>] = [<i>azi1</i>,<i>azi2</i>] + [<i>d</i>,-<i>d</i>], for arbitrary <i>d</i>. (For spheres, this prescription applies when points 1 and 2 are antipodal.)</p>
 
 </dd>
-<dt id="s12-0-coincident-points-"><i>s12</i> = 0 (coincident points)</dt>
+<dt id="s12-0-coincident-points"><i>s12</i> = 0 (coincident points)</dt>
 <dd>
 
 <p>There are infinitely many geodesics which can be generated by setting [<i>azi1</i>,<i>azi2</i>] = [<i>azi1</i>,<i>azi2</i>] + [<i>d</i>,<i>d</i>], for arbitrary <i>d</i>.</p>
diff --git a/man/GeodSolve.pod b/man/GeodSolve.pod
index 1159b10..07f91fd 100644
--- a/man/GeodSolve.pod
+++ b/man/GeodSolve.pod
@@ -102,7 +102,7 @@ precision relative to 1 m.  See L</PRECISION>.
 
 use "exact" algorithms (based on elliptic integrals) for the geodesic
 calculations.  These are more accurate than the (default) series
-expansions for |I<f>| > 0.02.
+expansions for |I<f>| E<gt> 0.02.
 
 =item B<--comment-delimiter>
 
@@ -212,9 +212,9 @@ the geodesic quadrilateral with corners (I<lat1>,I<lon1>), (0,I<lon1>),
 I<prec> gives precision of the output with I<prec> = 0 giving 1 m
 precision, I<prec> = 3 giving 1 mm precision, etc.  I<prec> is the
 number of digits after the decimal point for lengths.  For decimal
-degrees, the number of digits after the decimal point is 5 + I<prec>.
+degrees, the number of digits after the decimal point is I<prec> + 5.
 For DMS (degree, minute, seconds) output, the number of digits after the
-decimal point in the seconds component is 1 + I<prec>.  The minimum
+decimal point in the seconds component is I<prec> + 1.  The minimum
 value of I<prec> is 0 and the maximum is 10.
 
 =head1 ERRORS
diff --git a/man/GeodSolve.usage b/man/GeodSolve.usage
index 78ec73e..3f1676a 100644
--- a/man/GeodSolve.usage
+++ b/man/GeodSolve.usage
@@ -9,7 +9,7 @@ int usage(int retval, bool brief) {
 "For full documentation type:\n"
 "    GeodSolve --help\n"
 "or visit:\n"
-"    http://geographiclib.sf.net/1.35/GeodSolve.1.html\n";
+"    http://geographiclib.sf.net/1.37/GeodSolve.1.html\n";
   else
     ( retval ? std::cerr : std::cout ) << "Man page:\n"
 "NAME\n"
@@ -166,9 +166,9 @@ int usage(int retval, bool brief) {
 "       prec gives precision of the output with prec = 0 giving 1 m precision,\n"
 "       prec = 3 giving 1 mm precision, etc.  prec is the number of digits\n"
 "       after the decimal point for lengths.  For decimal degrees, the number\n"
-"       of digits after the decimal point is 5 + prec.  For DMS (degree,\n"
+"       of digits after the decimal point is prec + 5.  For DMS (degree,\n"
 "       minute, seconds) output, the number of digits after the decimal point\n"
-"       in the seconds component is 1 + prec.  The minimum value of prec is 0\n"
+"       in the seconds component is prec + 1.  The minimum value of prec is 0\n"
 "       and the maximum is 10.\n"
 "\n"
 "ERRORS\n"
@@ -266,9 +266,7 @@ int usage(int retval, bool brief) {
 "SEE ALSO\n"
 "       GeoConvert(1).  The algorithms are described in C. F. F. Karney,\n"
 "       Algorithms for geodesics, J. Geodesy 87, 43-55 (2013); DOI:\n"
-"       http://dx.doi.org/10.1007/s00190-012-0578-z\n"
 "       <http://dx.doi.org/10.1007/s00190-012-0578-z>; addenda:\n"
-"       http://geographiclib.sf.net/geod-addenda.html\n"
 "       <http://geographiclib.sf.net/geod-addenda.html>.  The wikipedia page,\n"
 "       Geodesics on an ellipsoid,\n"
 "       <http://en.wikipedia.org/wiki/Geodesics_on_an_ellipsoid>.\n"
diff --git a/man/GeodesicProj.1 b/man/GeodesicProj.1
index 9b87078..487066c 100644
--- a/man/GeodesicProj.1
+++ b/man/GeodesicProj.1
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.20)
+.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -38,6 +38,8 @@
 .    ds PI \(*p
 .    ds L" ``
 .    ds R" ''
+.    ds C`
+.    ds C'
 'br\}
 .\"
 .\" Escape single quotes in literal strings from groff's Unicode transform.
@@ -48,17 +50,24 @@
 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
 .\" entries marked with X<> in POD.  Of course, you'll have to process the
 .\" output yourself in some meaningful fashion.
-.ie \nF \{\
-.    de IX
-.    tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
 ..
-.    nr % 0
-.    rr F
-.\}
-.el \{\
-.    de IX
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+.    if \nF \{
+.        de IX
+.        tm Index:\\$1\t\\n%\t"\\$2"
 ..
+.        if !\nF==2 \{
+.            nr % 0
+.            nr F 2
+.        \}
+.    \}
 .\}
+.rr rF
 .\"
 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
@@ -124,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "GEODESICPROJ 1"
-.TH GEODESICPROJ 1 "2014-03-13" "GeographicLib 1.35" "GeographicLib Utilities"
+.TH GEODESICPROJ 1 "2014-08-08" "GeographicLib 1.37" "GeographicLib Utilities"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -134,7 +143,7 @@ GeodesicProj \-\- perform projections based on geodesics
 .SH "SYNOPSIS"
 .IX Header "SYNOPSIS"
 \&\fBGeodesicProj\fR ( \fB\-z\fR | \fB\-c\fR | \fB\-g\fR ) \fIlat0\fR \fIlon0\fR [ \fB\-r\fR ]
-[ \fB\-e\fR \fIa\fR \fIf\fR ]
+[ \fB\-e\fR \fIa\fR \fIf\fR ] [ \fB\-p\fR \fIprec\fR ]
 [ \fB\-\-comment\-delimiter\fR \fIcommentdelim\fR ]
 [ \fB\-\-version\fR | \fB\-h\fR | \fB\-\-help\fR ]
 [ \fB\-\-input\-file\fR \fIinfile\fR | \fB\-\-input\-string\fR \fIinstring\fR ]
@@ -144,10 +153,10 @@ GeodesicProj \-\- perform projections based on geodesics
 .IX Header "DESCRIPTION"
 Perform projections based on geodesics.  Convert geodetic coordinates to
 either azimuthal equidistant, Cassini-Soldner, or gnomonic coordinates.
-The center of the projection (\fIlat0\fR, \fIlon0\fR) is specified by either the \fB\-c\fR
-option (for Cassini-Soldner), the \fB\-z\fR option (for azimuthal equidistant),
-or the \fB\-g\fR option (for gnomonic).  At least one of these options must be
-given (the last one given is used).
+The center of the projection (\fIlat0\fR, \fIlon0\fR) is specified by either
+the \fB\-c\fR option (for Cassini-Soldner), the \fB\-z\fR option (for azimuthal
+equidistant), or the \fB\-g\fR option (for gnomonic).  At least one of these
+options must be given (the last one given is used).
 .PP
 Geodetic coordinates are provided on standard input as a set of lines
 containing (blank separated) \fIlatitude\fR and \fIlongitude\fR (decimal
@@ -188,6 +197,13 @@ the flattening is \fIf\fR.  Setting \fIf\fR = 0 results in a sphere.  Specify
 is allowed for \fIf\fR.  (Also, if \fIf\fR > 1, the flattening is set to
 1/\fIf\fR.)  By default, the \s-1WGS84\s0 ellipsoid is used, \fIa\fR = 6378137 m,
 \&\fIf\fR = 1/298.257223563.
+.IP "\fB\-p\fR" 4
+.IX Item "-p"
+set the output precision to \fIprec\fR (default 6).  \fIprec\fR is the number
+of digits after the decimal point for lengths (in meters).  For
+latitudes, longitudes, and azimuths (in degrees), the number of digits
+after the decimal point is \fIprec\fR + 5.  For the scale, the number of
+digits after the decimal point is \fIprec\fR + 6.
 .IP "\fB\-\-comment\-delimiter\fR" 4
 .IX Item "--comment-delimiter"
 set the comment delimiter to \fIcommentdelim\fR (e.g., \*(L"#\*(R" or \*(L"//\*(R").  If
@@ -238,9 +254,9 @@ terminate; following lines will be converted.
 .SH "SEE ALSO"
 .IX Header "SEE ALSO"
 The ellipsoidal gnomonic projection is derived in Section 8 of
-C. F. F. Karney, \fIAlgorithms for geodesics\fR, J. Geodesy 87, 43\-55 (2013); \s-1DOI\s0
-http://dx.doi.org/10.1007/s00190\-012\-0578\-z <http://dx.doi.org/10.1007/s00190-012-0578-z>;
-addenda: http://geographiclib.sf.net/geod\-addenda.html <http://geographiclib.sf.net/geod-addenda.html>.
+C. F. F. Karney, \fIAlgorithms for geodesics\fR, J. Geodesy 87, 43\-55 (2013); \s-1DOI
+\&\s0<http://dx.doi.org/10.1007/s00190\-012\-0578\-z>;
+addenda: <http://geographiclib.sf.net/geod\-addenda.html>.
 .SH "AUTHOR"
 .IX Header "AUTHOR"
 \&\fBGeodesicProj\fR was written by Charles Karney.
diff --git a/man/GeodesicProj.1.html b/man/GeodesicProj.1.html
index 2b63cf7..9f4ab71 100644
--- a/man/GeodesicProj.1.html
+++ b/man/GeodesicProj.1.html
@@ -17,7 +17,7 @@
 
 <h1 id="SYNOPSIS">SYNOPSIS</h1>
 
-<p><b>GeodesicProj</b> ( <b>-z</b> | <b>-c</b> | <b>-g</b> ) <i>lat0</i> <i>lon0</i> [ <b>-r</b> ] [ <b>-e</b> <i>a</i> <i>f</i> ] [ <b>--comment-delimiter</b> <i>commentdelim</i> ] [ <b>--version</b> | <b>-h</b> | <b>--help</b> ] [ <b>--input-file</b> <i>infile</i> | <b>--input-string</b> <i>instring</i> ] [ <b>--line-separator</b> <i>linesep</i> ] [ <b>--output-file</b> <i>outfile</i> ]</p>
+<p><b>GeodesicProj</b> ( <b>-z</b> | <b>-c</b> | <b>-g</b> ) <i>lat0</i> <i>lon0</i> [ <b>-r</b> ] [ <b>-e</b> <i>a</i> <i>f</i> ] [ <b>-p</b> <i>prec</i> ] [ <b>--comment-delimiter</b> <i>commentdelim</i> ] [ <b>--version</b> | <b>-h</b> | <b>--help</b> ] [ <b>--input-file</b> <i>infile</i> | <b>--input-string</b> <i>instring</i> ] [ <b>--line-separator</b> <i>linesep</i> ] [ <b>--output-file</b> <i>outfile</i> ]</p>
 
 <h1 id="DESCRIPTION">DESCRIPTION</h1>
 
@@ -59,6 +59,12 @@
 <p>specify the ellipsoid via <i>a</i> <i>f</i>; the equatorial radius is <i>a</i> and the flattening is <i>f</i>. Setting <i>f</i> = 0 results in a sphere. Specify <i>f</i> < 0 for a prolate ellipsoid. A simple fraction, e.g., 1/297, is allowed for <i>f</i>. (Also, if <i>f</i> > 1, the flattening is set to 1/<i>f</i>.) By default, the WGS84 ellipsoid is used, <i>a</i> = 6378137 m, <i>f</i> = 1/298.257223563.</p>
 
 </dd>
+<dt id="p"><b>-p</b></dt>
+<dd>
+
+<p>set the output precision to <i>prec</i> (default 6). <i>prec</i> is the number of digits after the decimal point for lengths (in meters). For latitudes, longitudes, and azimuths (in degrees), the number of digits after the decimal point is <i>prec</i> + 5. For the scale, the number of digits after the decimal point is <i>prec</i> + 6.</p>
+
+</dd>
 <dt id="comment-delimiter"><b>--comment-delimiter</b></dt>
 <dd>
 
diff --git a/man/GeodesicProj.pod b/man/GeodesicProj.pod
index 2e2e961..d271d25 100644
--- a/man/GeodesicProj.pod
+++ b/man/GeodesicProj.pod
@@ -5,7 +5,7 @@ GeodesicProj -- perform projections based on geodesics
 =head1 SYNOPSIS
 
 B<GeodesicProj> ( B<-z> | B<-c> | B<-g> ) I<lat0> I<lon0> [ B<-r> ]
-[ B<-e> I<a> I<f> ]
+[ B<-e> I<a> I<f> ] [ B<-p> I<prec> ]
 [ B<--comment-delimiter> I<commentdelim> ]
 [ B<--version> | B<-h> | B<--help> ]
 [ B<--input-file> I<infile> | B<--input-string> I<instring> ]
@@ -16,10 +16,10 @@ B<GeodesicProj> ( B<-z> | B<-c> | B<-g> ) I<lat0> I<lon0> [ B<-r> ]
 
 Perform projections based on geodesics.  Convert geodetic coordinates to
 either azimuthal equidistant, Cassini-Soldner, or gnomonic coordinates.
-The center of the projection (I<lat0>, I<lon0>) is specified by either the B<-c>
-option (for Cassini-Soldner), the B<-z> option (for azimuthal equidistant),
-or the B<-g> option (for gnomonic).  At least one of these options must be
-given (the last one given is used).
+The center of the projection (I<lat0>, I<lon0>) is specified by either
+the B<-c> option (for Cassini-Soldner), the B<-z> option (for azimuthal
+equidistant), or the B<-g> option (for gnomonic).  At least one of these
+options must be given (the last one given is used).
 
 Geodetic coordinates are provided on standard input as a set of lines
 containing (blank separated) I<latitude> and I<longitude> (decimal
@@ -68,6 +68,14 @@ is allowed for I<f>.  (Also, if I<f> E<gt> 1, the flattening is set to
 1/I<f>.)  By default, the WGS84 ellipsoid is used, I<a> = 6378137 m,
 I<f> = 1/298.257223563.
 
+=item B<-p>
+
+set the output precision to I<prec> (default 6).  I<prec> is the number
+of digits after the decimal point for lengths (in meters).  For
+latitudes, longitudes, and azimuths (in degrees), the number of digits
+after the decimal point is I<prec> + 5.  For the scale, the number of
+digits after the decimal point is I<prec> + 6.
+
 =item B<--comment-delimiter>
 
 set the comment delimiter to I<commentdelim> (e.g., "#" or "//").  If
diff --git a/man/GeodesicProj.usage b/man/GeodesicProj.usage
index 013fb7a..c5aaeb5 100644
--- a/man/GeodesicProj.usage
+++ b/man/GeodesicProj.usage
@@ -1,7 +1,7 @@
 int usage(int retval, bool brief) {
   if (brief)
     ( retval ? std::cerr : std::cout ) << "Usage:\n"
-"    GeodesicProj ( -z | -c | -g ) lat0 lon0 [ -r ] [ -e a f ] [\n"
+"    GeodesicProj ( -z | -c | -g ) lat0 lon0 [ -r ] [ -e a f ] [ -p prec ] [\n"
 "    --comment-delimiter commentdelim ] [ --version | -h | --help ] [\n"
 "    --input-file infile | --input-string instring ] [ --line-separator\n"
 "    linesep ] [ --output-file outfile ]\n"
@@ -9,14 +9,14 @@ int usage(int retval, bool brief) {
 "For full documentation type:\n"
 "    GeodesicProj --help\n"
 "or visit:\n"
-"    http://geographiclib.sf.net/1.35/GeodesicProj.1.html\n";
+"    http://geographiclib.sf.net/1.37/GeodesicProj.1.html\n";
   else
     ( retval ? std::cerr : std::cout ) << "Man page:\n"
 "NAME\n"
 "       GeodesicProj -- perform projections based on geodesics\n"
 "\n"
 "SYNOPSIS\n"
-"       GeodesicProj ( -z | -c | -g ) lat0 lon0 [ -r ] [ -e a f ] [\n"
+"       GeodesicProj ( -z | -c | -g ) lat0 lon0 [ -r ] [ -e a f ] [ -p prec ] [\n"
 "       --comment-delimiter commentdelim ] [ --version | -h | --help ] [\n"
 "       --input-file infile | --input-string instring ] [ --line-separator\n"
 "       linesep ] [ --output-file outfile ]\n"
@@ -63,6 +63,12 @@ int usage(int retval, bool brief) {
 "           default, the WGS84 ellipsoid is used, a = 6378137 m, f =\n"
 "           1/298.257223563.\n"
 "\n"
+"       -p  set the output precision to prec (default 6).  prec is the number\n"
+"           of digits after the decimal point for lengths (in meters).  For\n"
+"           latitudes, longitudes, and azimuths (in degrees), the number of\n"
+"           digits after the decimal point is prec + 5.  For the scale, the\n"
+"           number of digits after the decimal point is prec + 6.\n"
+"\n"
 "       --comment-delimiter\n"
 "           set the comment delimiter to commentdelim (e.g., \"#\" or \"//\").  If\n"
 "           set, the input lines will be scanned for this delimiter and, if\n"
@@ -111,9 +117,7 @@ int usage(int retval, bool brief) {
 "SEE ALSO\n"
 "       The ellipsoidal gnomonic projection is derived in Section 8 of C. F. F.\n"
 "       Karney, Algorithms for geodesics, J. Geodesy 87, 43-55 (2013); DOI\n"
-"       http://dx.doi.org/10.1007/s00190-012-0578-z\n"
 "       <http://dx.doi.org/10.1007/s00190-012-0578-z>; addenda:\n"
-"       http://geographiclib.sf.net/geod-addenda.html\n"
 "       <http://geographiclib.sf.net/geod-addenda.html>.\n"
 "\n"
 "AUTHOR\n"
diff --git a/man/GeoidEval.1 b/man/GeoidEval.1
index 7c5086e..9c34f27 100644
--- a/man/GeoidEval.1
+++ b/man/GeoidEval.1
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.20)
+.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -38,6 +38,8 @@
 .    ds PI \(*p
 .    ds L" ``
 .    ds R" ''
+.    ds C`
+.    ds C'
 'br\}
 .\"
 .\" Escape single quotes in literal strings from groff's Unicode transform.
@@ -48,17 +50,24 @@
 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
 .\" entries marked with X<> in POD.  Of course, you'll have to process the
 .\" output yourself in some meaningful fashion.
-.ie \nF \{\
-.    de IX
-.    tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
 ..
-.    nr % 0
-.    rr F
-.\}
-.el \{\
-.    de IX
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+.    if \nF \{
+.        de IX
+.        tm Index:\\$1\t\\n%\t"\\$2"
 ..
+.        if !\nF==2 \{
+.            nr % 0
+.            nr F 2
+.        \}
+.    \}
 .\}
+.rr rF
 .\"
 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
@@ -124,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "GEOIDEVAL 1"
-.TH GEOIDEVAL 1 "2014-03-13" "GeographicLib 1.35" "GeographicLib Utilities"
+.TH GEOIDEVAL 1 "2014-08-08" "GeographicLib 1.37" "GeographicLib Utilities"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -148,7 +157,7 @@ GeoidEval \-\- look up geoid heights
 corresponding geoid heights on standard output.  Optionally, it also
 prints the northerly and easterly gradients of the geoid height.
 .PP
-Positions are given as latitude and longitude, \s-1UTM/UPS\s0, or \s-1MGRS\s0, in any
+Positions are given as latitude and longitude, \s-1UTM/UPS,\s0 or \s-1MGRS,\s0 in any
 of the formats accepted by \fIGeoConvert\fR\|(1).  (\s-1MGRS\s0 coordinates signify the
 \&\fIcenter\fR of the corresponding \s-1MGRS\s0 square.)  If the \fB\-z\fR option is
 specified then the specified zone is prepended to each line of input
@@ -162,22 +171,22 @@ This utility can also compute the direction of gravity accurately.
 .IP "\fB\-n\fR" 4
 .IX Item "-n"
 use geoid \fIname\fR instead of the default \f(CW\*(C`egm96\-5\*(C'\fR.  See
-\&\*(L"\s-1GEOIDS\s0\*(R".
+\&\*(L"\s-1GEOIDS\*(R"\s0.
 .IP "\fB\-d\fR" 4
 .IX Item "-d"
 read geoid data from \fIdir\fR instead of the default.  See
-\&\*(L"\s-1GEOIDS\s0\*(R".
+\&\*(L"\s-1GEOIDS\*(R"\s0.
 .IP "\fB\-l\fR" 4
 .IX Item "-l"
 use bilinear interpolation instead of cubic.  See
-\&\*(L"\s-1INTERPOLATION\s0\*(R".
+\&\*(L"\s-1INTERPOLATION\*(R"\s0.
 .IP "\fB\-a\fR" 4
 .IX Item "-a"
-cache the entire data set in memory.  See \*(L"\s-1CACHE\s0\*(R".
+cache the entire data set in memory.  See \*(L"\s-1CACHE\*(R"\s0.
 .IP "\fB\-c\fR" 4
 .IX Item "-c"
 cache the data bounded by \fIsouth\fR \fIwest\fR \fInorth\fR \fIeast\fR in memory.
-See \*(L"\s-1CACHE\s0\*(R".
+See \*(L"\s-1CACHE\*(R"\s0.
 .IP "\fB\-g\fR" 4
 .IX Item "-g"
 print the northerly and easterly gradients after the geoid height (i.e.,
@@ -188,7 +197,7 @@ in large quantization errors.  This is particularly acute at high
 latitudes and for the easterly gradient.
 .IP "\fB\-z\fR" 4
 .IX Item "-z"
-prefix each line of input by \fIzone\fR, e.g., \f(CW\*(C`38N\*(C'\fR.  This should be used
+prefix each line of input by \fIzone\fR, e.g., \f(CW\*(C`38n\*(C'\fR.  This should be used
 when the input consists of \s-1UTM/UPS\s0 eastings and northings.
 .IP "\fB\-\-msltohae\fR" 4
 .IX Item "--msltohae"
@@ -243,7 +252,7 @@ file name of \*(L"\-\*(R" stands for standard output.
 .SH "GEOIDS"
 .IX Header "GEOIDS"
 \&\fBGeoidEval\fR computes geoid heights by interpolating on the data in a
-regularly spaced table (see \*(L"\s-1INTERPOLATION\s0\*(R").  The following geoid
+regularly spaced table (see \*(L"\s-1INTERPOLATION\*(R"\s0).  The following geoid
 tables are available (however, some may not be installed):
 .PP
 .Vb 9
@@ -259,15 +268,16 @@ tables are available (however, some may not be installed):
 .Ve
 .PP
 By default, the \f(CW\*(C`egm96\-5\*(C'\fR geoid is used.  This may changed by setting
-the environment variable \f(CW\*(C`GEOID_NAME\*(C'\fR or with the \fB\-n\fR option.  The
-errors listed here are estimates of the quantization and interpolation
-errors in the reported heights compared to the specified geoid.
+the environment variable \f(CW\*(C`GEOGRAPHICLIB_GEOID_NAME\*(C'\fR or with the \fB\-n\fR
+option.  The errors listed here are estimates of the quantization and
+interpolation errors in the reported heights compared to the specified
+geoid.
 .PP
 The geoid data will be loaded from a directory specified at compile
 time.  This may changed by setting the environment variables
-\&\f(CW\*(C`GEOID_PATH\*(C'\fR or \f(CW\*(C`GEOGRAPHICLIB_DATA\*(C'\fR, or with the \fB\-d\fR option.  The
-\&\fB\-h\fR option prints the default geoid path and name.  Use the \fB\-v\fR
-option to ascertain the full path name of the data file.
+\&\f(CW\*(C`GEOGRAPHICLIB_GEOID_PATH\*(C'\fR or \f(CW\*(C`GEOGRAPHICLIB_DATA\*(C'\fR, or with the \fB\-d\fR
+option.  The \fB\-h\fR option prints the default geoid path and name.  Use
+the \fB\-v\fR option to ascertain the full path name of the data file.
 .PP
 Instructions for downloading and installing geoid data are available at
 <http://geographiclib.sf.net/html/geoid.html#geoidinst>.
@@ -301,7 +311,7 @@ If many heights are to be computed, use \fB\-c\fR \fIsouth\fR \fIwest\fR \fInort
 \&\fIeast\fR to notify \fBGeoidEval\fR to read a rectangle of data into memory;
 heights within the this rectangle can then be computed without any disk
 access.  If \fB\-a\fR is specified all the geoid data is read; in the case
-of \f(CW\*(C`egm2008\-1\*(C'\fR, this requires about 0.5 \s-1GB\s0 of \s-1RAM\s0.  The evaluation of
+of \f(CW\*(C`egm2008\-1\*(C'\fR, this requires about 0.5 \s-1GB\s0 of \s-1RAM. \s0 The evaluation of
 heights outside the cached area causes the necessary data to be read
 from disk.  Use the \fB\-v\fR option to verify the size of the cache.
 .PP
@@ -311,26 +321,25 @@ the geoid height along a continuous path to be returned with little
 disk overhead.
 .SH "ENVIRONMENT"
 .IX Header "ENVIRONMENT"
-.IP "\fB\s-1GEOID_NAME\s0\fR" 4
-.IX Item "GEOID_NAME"
+.IP "\fB\s-1GEOGRAPHICLIB_GEOID_NAME\s0\fR" 4
+.IX Item "GEOGRAPHICLIB_GEOID_NAME"
 Override the compile-time default geoid name of \f(CW\*(C`egm96\-5\*(C'\fR.  The \fB\-h\fR
-option reports the value of \fB\s-1GEOID_NAME\s0\fR, if defined, otherwise it
-reports the compile-time value.  If the \fB\-n\fR \fIname\fR option is used,
-then \fIname\fR takes precedence.
-.IP "\fB\s-1GEOID_PATH\s0\fR" 4
-.IX Item "GEOID_PATH"
+option reports the value of \fB\s-1GEOGRAPHICLIB_GEOID_NAME\s0\fR, if defined,
+otherwise it reports the compile-time value.  If the \fB\-n\fR \fIname\fR
+option is used, then \fIname\fR takes precedence.
+.IP "\fB\s-1GEOGRAPHICLIB_GEOID_PATH\s0\fR" 4
+.IX Item "GEOGRAPHICLIB_GEOID_PATH"
 Override the compile-time default geoid path.  This is typically
 \&\f(CW\*(C`/usr/local/share/GeographicLib/geoids\*(C'\fR on Unix-like systems and
-\&\f(CW\*(C`C:/Documents and Settings/All Users/Application
-Data/GeographicLib/geoids\*(C'\fR on Windows systems.  The \fB\-h\fR option reports
-the value of \fB\s-1GEOID_PATH\s0\fR, if defined, otherwise it reports the
-compile-time value.  If the \fB\-d\fR \fIdir\fR option is used, then \fIdir\fR
-takes precedence.
+\&\f(CW\*(C`C:/ProgramData/GeographicLib/geoids\*(C'\fR on Windows systems.  The \fB\-h\fR
+option reports the value of \fB\s-1GEOGRAPHICLIB_GEOID_PATH\s0\fR, if defined,
+otherwise it reports the compile-time value.  If the \fB\-d\fR \fIdir\fR option
+is used, then \fIdir\fR takes precedence.
 .IP "\fB\s-1GEOGRAPHICLIB_DATA\s0\fR" 4
 .IX Item "GEOGRAPHICLIB_DATA"
-Another way of overriding the compile-time default magnetic path.  If it
-is set (and if \fB\s-1MAGNETIC_PATH\s0\fR is not set), then
-$\fB\s-1GEOGRAPHICLIB_DATA\s0\fR/magnetic is used.
+Another way of overriding the compile-time default geoid path.  If it
+is set (and if \fB\s-1GEOGRAPHICLIB_GEOID_PATH\s0\fR is not set), then
+$\fB\s-1GEOGRAPHICLIB_DATA\s0\fR/geoids is used.
 .SH "ERRORS"
 .IX Header "ERRORS"
 An illegal line of input will print an error message to standard output
@@ -344,15 +353,15 @@ models published by the \s-1NGA\s0 are:
 .IP "\fB\s-1EGM84\s0\fR" 4
 .IX Item "EGM84"
 An earth gravity model published by the \s-1NGA\s0 in 1984,
-http://earth\-info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html <http://earth-info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html>.
+<http://earth\-info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html>.
 .IP "\fB\s-1EGM96\s0\fR" 4
 .IX Item "EGM96"
 An earth gravity model published by the \s-1NGA\s0 in 1996,
-http://earth\-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html <http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html>.
+<http://earth\-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html>.
 .IP "\fB\s-1EGM2008\s0\fR" 4
 .IX Item "EGM2008"
 An earth gravity model published by the \s-1NGA\s0 in 2008,
-http://earth\-info.nga.mil/GandG/wgs84/gravitymod/egm2008 <http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008>.
+<http://earth\-info.nga.mil/GandG/wgs84/gravitymod/egm2008>.
 .IP "\fB\s-1WGS84\s0\fR" 4
 .IX Item "WGS84"
 World Geodetic System 1984,
@@ -377,10 +386,10 @@ The height of the \s-1EGM96\s0 geoid at Timbuktu
 The first number returned is the height of the geoid and the 2nd and 3rd
 are its slopes in the northerly and easterly directions.
 .PP
-Convert a point in \s-1UTM\s0 zone 18N from \s-1MSL\s0 to \s-1HAE\s0
+Convert a point in \s-1UTM\s0 zone 18n from \s-1MSL\s0 to \s-1HAE\s0
 .PP
 .Vb 2
-\&   echo 531595 4468135 23 | GeoidEval \-\-msltohae \-z 18N
+\&   echo 531595 4468135 23 | GeoidEval \-\-msltohae \-z 18n
 \&   => 531595 4468135 \-10.842
 .Ve
 .SH "SEE ALSO"
diff --git a/man/GeoidEval.1.html b/man/GeoidEval.1.html
index ea131d8..bfbe5a1 100644
--- a/man/GeoidEval.1.html
+++ b/man/GeoidEval.1.html
@@ -70,7 +70,7 @@
 <dt id="z"><b>-z</b></dt>
 <dd>
 
-<p>prefix each line of input by <i>zone</i>, e.g., <code>38N</code>. This should be used when the input consists of UTM/UPS eastings and northings.</p>
+<p>prefix each line of input by <i>zone</i>, e.g., <code>38n</code>. This should be used when the input consists of UTM/UPS eastings and northings.</p>
 
 </dd>
 <dt id="msltohae"><b>--msltohae</b></dt>
@@ -155,9 +155,9 @@
    egm2008-2_5  EGM2008   2.5'    0.135 m  3.2 mm   0.031 m  0.8 mm
    egm2008-1    EGM2008   1'      0.025 m  0.8 mm   .0022 m  0.7 mm</code></pre>
 
-<p>By default, the <code>egm96-5</code> geoid is used. This may changed by setting the environment variable <code>GEOID_NAME</code> or with the <b>-n</b> option. The errors listed here are estimates of the quantization and interpolation errors in the reported heights compared to the specified geoid.</p>
+<p>By default, the <code>egm96-5</code> geoid is used. This may changed by setting the environment variable <code>GEOGRAPHICLIB_GEOID_NAME</code> or with the <b>-n</b> option. The errors listed here are estimates of the quantization and interpolation errors in the reported heights compared to the specified geoid.</p>
 
-<p>The geoid data will be loaded from a directory specified at compile time. This may changed by setting the environment variables <code>GEOID_PATH</code> or <code>GEOGRAPHICLIB_DATA</code>, or with the <b>-d</b> option. The <b>-h</b> option prints the default geoid path and name. Use the <b>-v</b> option to ascertain the full path name of the data file.</p>
+<p>The geoid data will be loaded from a directory specified at compile time. This may changed by setting the environment variables <code>GEOGRAPHICLIB_GEOID_PATH</code> or <code>GEOGRAPHICLIB_DATA</code>, or with the <b>-d</b> option. The <b>-h</b> option prints the default geoid path and name. Use the <b>-v</b> option to ascertain the full path name of the data file.</p>
 
 <p>Instructions for downloading and installing geoid data are available at <a href="http://geographiclib.sf.net/html/geoid.html#geoidinst">http://geographiclib.sf.net/html/geoid.html#geoidinst</a>.</p>
 
@@ -184,22 +184,22 @@
 
 <dl>
 
-<dt id="GEOID_NAME"><b>GEOID_NAME</b></dt>
+<dt id="GEOGRAPHICLIB_GEOID_NAME"><b>GEOGRAPHICLIB_GEOID_NAME</b></dt>
 <dd>
 
-<p>Override the compile-time default geoid name of <code>egm96-5</code>. The <b>-h</b> option reports the value of <b>GEOID_NAME</b>, if defined, otherwise it reports the compile-time value. If the <b>-n</b> <i>name</i> option is used, then <i>name</i> takes precedence.</p>
+<p>Override the compile-time default geoid name of <code>egm96-5</code>. The <b>-h</b> option reports the value of <b>GEOGRAPHICLIB_GEOID_NAME</b>, if defined, otherwise it reports the compile-time value. If the <b>-n</b> <i>name</i> option is used, then <i>name</i> takes precedence.</p>
 
 </dd>
-<dt id="GEOID_PATH"><b>GEOID_PATH</b></dt>
+<dt id="GEOGRAPHICLIB_GEOID_PATH"><b>GEOGRAPHICLIB_GEOID_PATH</b></dt>
 <dd>
 
-<p>Override the compile-time default geoid path. This is typically <code>/usr/local/share/GeographicLib/geoids</code> on Unix-like systems and <code>C:/Documents and Settings/All Users/Application Data/GeographicLib/geoids</code> on Windows systems. The <b>-h</b> option reports the value of <b>GEOID_PATH</b>, if defined, otherwise it reports the compile-time value. If the <b>-d</b> <i>dir</i> option is used, then <i>dir</i> takes precedence.</p>
+<p>Override the compile-time default geoid path. This is typically <code>/usr/local/share/GeographicLib/geoids</code> on Unix-like systems and <code>C:/ProgramData/GeographicLib/geoids</code> on Windows systems. The <b>-h</b> option reports the value of <b>GEOGRAPHICLIB_GEOID_PATH</b>, if defined, otherwise it reports the compile-time value. If the <b>-d</b> <i>dir</i> option is used, then <i>dir</i> takes precedence.</p>
 
 </dd>
 <dt id="GEOGRAPHICLIB_DATA"><b>GEOGRAPHICLIB_DATA</b></dt>
 <dd>
 
-<p>Another way of overriding the compile-time default magnetic path. If it is set (and if <b>MAGNETIC_PATH</b> is not set), then $<b>GEOGRAPHICLIB_DATA</b>/magnetic is used.</p>
+<p>Another way of overriding the compile-time default geoid path. If it is set (and if <b>GEOGRAPHICLIB_GEOID_PATH</b> is not set), then $<b>GEOGRAPHICLIB_DATA</b>/geoids is used.</p>
 
 </dd>
 </dl>
@@ -261,9 +261,9 @@
 
 <p>The first number returned is the height of the geoid and the 2nd and 3rd are its slopes in the northerly and easterly directions.</p>
 
-<p>Convert a point in UTM zone 18N from MSL to HAE</p>
+<p>Convert a point in UTM zone 18n from MSL to HAE</p>
 
-<pre><code>   echo 531595 4468135 23 | GeoidEval --msltohae -z 18N
+<pre><code>   echo 531595 4468135 23 | GeoidEval --msltohae -z 18n
    => 531595 4468135 -10.842</code></pre>
 
 <h1 id="SEE-ALSO">SEE ALSO</h1>
diff --git a/man/GeoidEval.pod b/man/GeoidEval.pod
index c6ca929..7b445ff 100644
--- a/man/GeoidEval.pod
+++ b/man/GeoidEval.pod
@@ -69,7 +69,7 @@ latitudes and for the easterly gradient.
 
 =item B<-z>
 
-prefix each line of input by I<zone>, e.g., C<38N>.  This should be used
+prefix each line of input by I<zone>, e.g., C<38n>.  This should be used
 when the input consists of UTM/UPS eastings and northings.
 
 =item B<--msltohae>
@@ -152,15 +152,16 @@ tables are available (however, some may not be installed):
    egm2008-1    EGM2008   1'      0.025 m  0.8 mm   .0022 m  0.7 mm
 
 By default, the C<egm96-5> geoid is used.  This may changed by setting
-the environment variable C<GEOID_NAME> or with the B<-n> option.  The
-errors listed here are estimates of the quantization and interpolation
-errors in the reported heights compared to the specified geoid.
+the environment variable C<GEOGRAPHICLIB_GEOID_NAME> or with the B<-n>
+option.  The errors listed here are estimates of the quantization and
+interpolation errors in the reported heights compared to the specified
+geoid.
 
 The geoid data will be loaded from a directory specified at compile
 time.  This may changed by setting the environment variables
-C<GEOID_PATH> or C<GEOGRAPHICLIB_DATA>, or with the B<-d> option.  The
-B<-h> option prints the default geoid path and name.  Use the B<-v>
-option to ascertain the full path name of the data file.
+C<GEOGRAPHICLIB_GEOID_PATH> or C<GEOGRAPHICLIB_DATA>, or with the B<-d>
+option.  The B<-h> option prints the default geoid path and name.  Use
+the B<-v> option to ascertain the full path name of the data file.
 
 Instructions for downloading and installing geoid data are available at
 L<http://geographiclib.sf.net/html/geoid.html#geoidinst>.
@@ -207,28 +208,27 @@ disk overhead.
 
 =over
 
-=item B<GEOID_NAME>
+=item B<GEOGRAPHICLIB_GEOID_NAME>
 
 Override the compile-time default geoid name of C<egm96-5>.  The B<-h>
-option reports the value of B<GEOID_NAME>, if defined, otherwise it
-reports the compile-time value.  If the B<-n> I<name> option is used,
-then I<name> takes precedence.
+option reports the value of B<GEOGRAPHICLIB_GEOID_NAME>, if defined,
+otherwise it reports the compile-time value.  If the B<-n> I<name>
+option is used, then I<name> takes precedence.
 
-=item B<GEOID_PATH>
+=item B<GEOGRAPHICLIB_GEOID_PATH>
 
 Override the compile-time default geoid path.  This is typically
 C</usr/local/share/GeographicLib/geoids> on Unix-like systems and
-C<C:/Documents and Settings/All Users/Application
-Data/GeographicLib/geoids> on Windows systems.  The B<-h> option reports
-the value of B<GEOID_PATH>, if defined, otherwise it reports the
-compile-time value.  If the B<-d> I<dir> option is used, then I<dir>
-takes precedence.
+C<C:/ProgramData/GeographicLib/geoids> on Windows systems.  The B<-h>
+option reports the value of B<GEOGRAPHICLIB_GEOID_PATH>, if defined,
+otherwise it reports the compile-time value.  If the B<-d> I<dir> option
+is used, then I<dir> takes precedence.
 
 =item B<GEOGRAPHICLIB_DATA>
 
-Another way of overriding the compile-time default magnetic path.  If it
-is set (and if B<MAGNETIC_PATH> is not set), then
-$B<GEOGRAPHICLIB_DATA>/magnetic is used.
+Another way of overriding the compile-time default geoid path.  If it
+is set (and if B<GEOGRAPHICLIB_GEOID_PATH> is not set), then
+$B<GEOGRAPHICLIB_DATA>/geoids is used.
 
 =back
 
@@ -288,9 +288,9 @@ The height of the EGM96 geoid at Timbuktu
 The first number returned is the height of the geoid and the 2nd and 3rd
 are its slopes in the northerly and easterly directions.
 
-Convert a point in UTM zone 18N from MSL to HAE
+Convert a point in UTM zone 18n from MSL to HAE
 
-   echo 531595 4468135 23 | GeoidEval --msltohae -z 18N
+   echo 531595 4468135 23 | GeoidEval --msltohae -z 18n
    => 531595 4468135 -10.842
 
 =head1 SEE ALSO
diff --git a/man/GeoidEval.usage b/man/GeoidEval.usage
index 4fa144c..f6c474c 100644
--- a/man/GeoidEval.usage
+++ b/man/GeoidEval.usage
@@ -10,7 +10,7 @@ int usage(int retval, bool brief) {
 "For full documentation type:\n"
 "    GeoidEval --help\n"
 "or visit:\n"
-"    http://geographiclib.sf.net/1.35/GeoidEval.1.html\n";
+"    http://geographiclib.sf.net/1.37/GeoidEval.1.html\n";
   else
     ( retval ? std::cerr : std::cout ) << "Man page:\n"
 "NAME\n"
@@ -57,7 +57,7 @@ int usage(int retval, bool brief) {
 "           gradients can result in large quantization errors.  This is\n"
 "           particularly acute at high latitudes and for the easterly gradient.\n"
 "\n"
-"       -z  prefix each line of input by zone, e.g., \"38N\".  This should be\n"
+"       -z  prefix each line of input by zone, e.g., \"38n\".  This should be\n"
 "           used when the input consists of UTM/UPS eastings and northings.\n"
 "\n"
 "       --msltohae\n"
@@ -126,15 +126,16 @@ int usage(int retval, bool brief) {
 "          egm2008-1    EGM2008   1'      0.025 m  0.8 mm   .0022 m  0.7 mm\n"
 "\n"
 "       By default, the \"egm96-5\" geoid is used.  This may changed by setting\n"
-"       the environment variable \"GEOID_NAME\" or with the -n option.  The\n"
-"       errors listed here are estimates of the quantization and interpolation\n"
-"       errors in the reported heights compared to the specified geoid.\n"
+"       the environment variable \"GEOGRAPHICLIB_GEOID_NAME\" or with the -n\n"
+"       option.  The errors listed here are estimates of the quantization and\n"
+"       interpolation errors in the reported heights compared to the specified\n"
+"       geoid.\n"
 "\n"
 "       The geoid data will be loaded from a directory specified at compile\n"
 "       time.  This may changed by setting the environment variables\n"
-"       \"GEOID_PATH\" or \"GEOGRAPHICLIB_DATA\", or with the -d option.  The -h\n"
-"       option prints the default geoid path and name.  Use the -v option to\n"
-"       ascertain the full path name of the data file.\n"
+"       \"GEOGRAPHICLIB_GEOID_PATH\" or \"GEOGRAPHICLIB_DATA\", or with the -d\n"
+"       option.  The -h option prints the default geoid path and name.  Use the\n"
+"       -v option to ascertain the full path name of the data file.\n"
 "\n"
 "       Instructions for downloading and installing geoid data are available at\n"
 "       <http://geographiclib.sf.net/html/geoid.html#geoidinst>.\n"
@@ -176,25 +177,24 @@ int usage(int retval, bool brief) {
 "       overhead.\n"
 "\n"
 "ENVIRONMENT\n"
-"       GEOID_NAME\n"
+"       GEOGRAPHICLIB_GEOID_NAME\n"
 "           Override the compile-time default geoid name of \"egm96-5\".  The -h\n"
-"           option reports the value of GEOID_NAME, if defined, otherwise it\n"
-"           reports the compile-time value.  If the -n name option is used,\n"
-"           then name takes precedence.\n"
+"           option reports the value of GEOGRAPHICLIB_GEOID_NAME, if defined,\n"
+"           otherwise it reports the compile-time value.  If the -n name option\n"
+"           is used, then name takes precedence.\n"
 "\n"
-"       GEOID_PATH\n"
+"       GEOGRAPHICLIB_GEOID_PATH\n"
 "           Override the compile-time default geoid path.  This is typically\n"
 "           \"/usr/local/share/GeographicLib/geoids\" on Unix-like systems and\n"
-"           \"C:/Documents and Settings/All Users/Application\n"
-"           Data/GeographicLib/geoids\" on Windows systems.  The -h option\n"
-"           reports the value of GEOID_PATH, if defined, otherwise it reports\n"
-"           the compile-time value.  If the -d dir option is used, then dir\n"
-"           takes precedence.\n"
+"           \"C:/ProgramData/GeographicLib/geoids\" on Windows systems.  The -h\n"
+"           option reports the value of GEOGRAPHICLIB_GEOID_PATH, if defined,\n"
+"           otherwise it reports the compile-time value.  If the -d dir option\n"
+"           is used, then dir takes precedence.\n"
 "\n"
 "       GEOGRAPHICLIB_DATA\n"
-"           Another way of overriding the compile-time default magnetic path.\n"
-"           If it is set (and if MAGNETIC_PATH is not set), then\n"
-"           $GEOGRAPHICLIB_DATA/magnetic is used.\n"
+"           Another way of overriding the compile-time default geoid path.  If\n"
+"           it is set (and if GEOGRAPHICLIB_GEOID_PATH is not set), then\n"
+"           $GEOGRAPHICLIB_DATA/geoids is used.\n"
 "\n"
 "ERRORS\n"
 "       An illegal line of input will print an error message to standard output\n"
@@ -208,19 +208,14 @@ int usage(int retval, bool brief) {
 "\n"
 "       EGM84\n"
 "           An earth gravity model published by the NGA in 1984,\n"
-"           http://earth-info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html\n"
-"           <http://earth-\n"
-"           info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html>.\n"
+"           <http://earth-info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html>.\n"
 "\n"
 "       EGM96\n"
 "           An earth gravity model published by the NGA in 1996,\n"
-"           http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html\n"
-"           <http://earth-\n"
-"           info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html>.\n"
+"           <http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html>.\n"
 "\n"
 "       EGM2008\n"
 "           An earth gravity model published by the NGA in 2008,\n"
-"           http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008\n"
 "           <http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008>.\n"
 "\n"
 "       WGS84\n"
@@ -241,9 +236,9 @@ int usage(int retval, bool brief) {
 "       The first number returned is the height of the geoid and the 2nd and\n"
 "       3rd are its slopes in the northerly and easterly directions.\n"
 "\n"
-"       Convert a point in UTM zone 18N from MSL to HAE\n"
+"       Convert a point in UTM zone 18n from MSL to HAE\n"
 "\n"
-"          echo 531595 4468135 23 | GeoidEval --msltohae -z 18N\n"
+"          echo 531595 4468135 23 | GeoidEval --msltohae -z 18n\n"
 "          => 531595 4468135 -10.842\n"
 "\n"
 "SEE ALSO\n"
diff --git a/man/Gravity.1 b/man/Gravity.1
index 96462b2..77d65ea 100644
--- a/man/Gravity.1
+++ b/man/Gravity.1
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.20)
+.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -38,6 +38,8 @@
 .    ds PI \(*p
 .    ds L" ``
 .    ds R" ''
+.    ds C`
+.    ds C'
 'br\}
 .\"
 .\" Escape single quotes in literal strings from groff's Unicode transform.
@@ -48,17 +50,24 @@
 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
 .\" entries marked with X<> in POD.  Of course, you'll have to process the
 .\" output yourself in some meaningful fashion.
-.ie \nF \{\
-.    de IX
-.    tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
 ..
-.    nr % 0
-.    rr F
-.\}
-.el \{\
-.    de IX
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+.    if \nF \{
+.        de IX
+.        tm Index:\\$1\t\\n%\t"\\$2"
 ..
+.        if !\nF==2 \{
+.            nr % 0
+.            nr F 2
+.        \}
+.    \}
 .\}
+.rr rF
 .\"
 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
@@ -124,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "GRAVITY 1"
-.TH GRAVITY 1 "2014-03-13" "GeographicLib 1.35" "GeographicLib Utilities"
+.TH GRAVITY 1 "2014-08-08" "GeographicLib 1.37" "GeographicLib Utilities"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -157,19 +166,19 @@ in this case only the longitude should be given on the input lines.  The
 quantities printed out are governed by the \fB\-G\fR (default), \fB\-D\fR,
 \&\fB\-A\fR, or \fB\-H\fR options.
 .PP
-All the supported gravity models use \s-1WGS84\s0 as the reference ellipsoid
-\&\fIa\fR = 6378137 m, \fIf\fR = 1/298.257223563, \fIomega\fR = 7292115e\-11 rad/s,
-and \fI\s-1GM\s0\fR = 3986004.418e8 m^3/s^2.
+All the supported gravity models, except for grs80, use \s-1WGS84\s0 as the
+reference ellipsoid \fIa\fR = 6378137 m, \fIf\fR = 1/298.257223563, \fIomega\fR =
+7292115e\-11 rad/s, and \fI\s-1GM\s0\fR = 3986004.418e8 m^3/s^2.
 .SH "OPTIONS"
 .IX Header "OPTIONS"
 .IP "\fB\-n\fR" 4
 .IX Item "-n"
 use gravity field model \fIname\fR instead of the default \f(CW\*(C`egm96\*(C'\fR.  See
-\&\*(L"\s-1MODELS\s0\*(R".
+\&\*(L"\s-1MODELS\*(R"\s0.
 .IP "\fB\-d\fR" 4
 .IX Item "-d"
 read gravity models from \fIdir\fR instead of the default.  See
-\&\*(L"\s-1MODELS\s0\*(R".
+\&\*(L"\s-1MODELS\*(R"\s0.
 .IP "\fB\-G\fR" 4
 .IX Item "-G"
 compute the acceleration due to gravity (including the centrifugal
@@ -257,7 +266,7 @@ file name of \*(L"\-\*(R" stands for standard output.
 .IX Header "MODELS"
 \&\fBGravity\fR computes the gravity field using one of the following models
 .PP
-.Vb 8
+.Vb 10
 \&    egm84, earth gravity model 1984.  See
 \&      http://earth\-info.nga.mil/GandG/wgs84/gravitymod/wgs84_180/wgs84_180.html
 \&    egm96, earth gravity model 1996.  See
@@ -266,43 +275,45 @@ file name of \*(L"\-\*(R" stands for standard output.
 \&      http://earth\-info.nga.mil/GandG/wgs84/gravitymod/egm2008
 \&    wgs84, world geodetic system 1984.  This returns the normal
 \&      gravity for the WGS84 ellipsoid.
+\&    GRS80, geodetic reference system 1980.  This returns the normal
+\&      gravity for the GRS80 ellipsoid.
 .Ve
 .PP
 These models approximate the gravitation field above the surface of the
 earth.  By default, the \f(CW\*(C`egm96\*(C'\fR gravity model is used.  This may
-changed by setting the environment variable \f(CW\*(C`GRAVITY_NAME\*(C'\fR or with the
-\&\fB\-n\fR option.
+changed by setting the environment variable
+\&\f(CW\*(C`GEOGRAPHICLIB_GRAVITY_NAME\*(C'\fR or with the \fB\-n\fR option.
 .PP
 The gravity models will be loaded from a directory specified at compile
 time.  This may changed by setting the environment variables
-\&\f(CW\*(C`GRAVITY_PATH\*(C'\fR or \f(CW\*(C`GEOGRAPHICLIB_DATA\*(C'\fR, or with the \fB\-d\fR option.
-The \fB\-h\fR option prints the default gravity path and name.  Use the
-\&\fB\-v\fR option to ascertain the full path name of the data file.
+\&\f(CW\*(C`GEOGRAPHICLIB_GRAVITY_PATH\*(C'\fR or \f(CW\*(C`GEOGRAPHICLIB_DATA\*(C'\fR, or with the
+\&\fB\-d\fR option.  The \fB\-h\fR option prints the default gravity path and
+name.  Use the \fB\-v\fR option to ascertain the full path name of the data
+file.
 .PP
 Instructions for downloading and installing gravity models are
 available at
 <http://geographiclib.sf.net/html/gravity.html#gravityinst>.
 .SH "ENVIRONMENT"
 .IX Header "ENVIRONMENT"
-.IP "\fB\s-1GRAVITY_NAME\s0\fR" 4
-.IX Item "GRAVITY_NAME"
+.IP "\fB\s-1GEOGRAPHICLIB_GRAVITY_NAME\s0\fR" 4
+.IX Item "GEOGRAPHICLIB_GRAVITY_NAME"
 Override the compile-time default gravity name of \f(CW\*(C`egm96\*(C'\fR.  The \fB\-h\fR
-option reports the value of \fB\s-1GRAVITY_NAME\s0\fR, if defined, otherwise it
-reports the compile-time value.  If the \fB\-n\fR \fIname\fR option is used,
-then \fIname\fR takes precedence.
-.IP "\fB\s-1GRAVITY_PATH\s0\fR" 4
-.IX Item "GRAVITY_PATH"
+option reports the value of \fB\s-1GEOGRAPHICLIB_GRAVITY_NAME\s0\fR, if defined,
+otherwise it reports the compile-time value.  If the \fB\-n\fR \fIname\fR
+option is used, then \fIname\fR takes precedence.
+.IP "\fB\s-1GEOGRAPHICLIB_GRAVITY_PATH\s0\fR" 4
+.IX Item "GEOGRAPHICLIB_GRAVITY_PATH"
 Override the compile-time default gravity path.  This is typically
 \&\f(CW\*(C`/usr/local/share/GeographicLib/gravity\*(C'\fR on Unix-like systems and
-\&\f(CW\*(C`C:/Documents and Settings/All Users/Application
-Data/GeographicLib/gravity\*(C'\fR on Windows systems.  The \fB\-h\fR option reports
-the value of \fB\s-1GRAVITY_PATH\s0\fR, if defined, otherwise it reports the
-compile-time value.  If the \fB\-d\fR \fIdir\fR option is used, then \fIdir\fR
-takes precedence.
+\&\f(CW\*(C`C:/ProgramData/GeographicLib/gravity\*(C'\fR on Windows systems.  The \fB\-h\fR
+option reports the value of \fB\s-1GEOGRAPHICLIB_GRAVITY_PATH\s0\fR, if defined,
+otherwise it reports the compile-time value.  If the \fB\-d\fR \fIdir\fR option
+is used, then \fIdir\fR takes precedence.
 .IP "\fB\s-1GEOGRAPHICLIB_DATA\s0\fR" 4
 .IX Item "GEOGRAPHICLIB_DATA"
 Another way of overriding the compile-time default gravity path.  If it
-is set (and if \fB\s-1GRAVITY_PATH\s0\fR is not set), then
+is set (and if \fB\s-1GEOGRAPHICLIB_GRAVITY_PATH\s0\fR is not set), then
 $\fB\s-1GEOGRAPHICLIB_DATA\s0\fR/gravity is used.
 .SH "ERRORS"
 .IX Header "ERRORS"
diff --git a/man/Gravity.1.html b/man/Gravity.1.html
index cca8ad9..e2020c5 100644
--- a/man/Gravity.1.html
+++ b/man/Gravity.1.html
@@ -25,7 +25,7 @@
 
 <p>The input line is of the form <i>lat</i> <i>lon</i> <i>h</i>. <i>lat</i> and <i>lon</i> are the latitude and longitude expressed as decimal degrees or degrees, minutes, and seconds; see GeoConvert(1) for details. <i>h</i> is the height above the ellipsoid in meters; this quantity is optional and defaults to 0. Alternatively, the gravity field can be computed at various points on a circle of latitude (constant <i>lat</i> and <i>h</i>) via the <b>-c</b> option; in this case only the lon [...]
 
-<p>All the supported gravity models use WGS84 as the reference ellipsoid <i>a</i> = 6378137 m, <i>f</i> = 1/298.257223563, <i>omega</i> = 7292115e-11 rad/s, and <i>GM</i> = 3986004.418e8 m^3/s^2.</p>
+<p>All the supported gravity models, except for grs80, use WGS84 as the reference ellipsoid <i>a</i> = 6378137 m, <i>f</i> = 1/298.257223563, <i>omega</i> = 7292115e-11 rad/s, and <i>GM</i> = 3986004.418e8 m^3/s^2.</p>
 
 <h1 id="OPTIONS">OPTIONS</h1>
 
@@ -146,11 +146,13 @@
     egm2008, earth gravity model 2008.  See
       http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008
     wgs84, world geodetic system 1984.  This returns the normal
-      gravity for the WGS84 ellipsoid.</code></pre>
+      gravity for the WGS84 ellipsoid.
+    GRS80, geodetic reference system 1980.  This returns the normal
+      gravity for the GRS80 ellipsoid.</code></pre>
 
-<p>These models approximate the gravitation field above the surface of the earth. By default, the <code>egm96</code> gravity model is used. This may changed by setting the environment variable <code>GRAVITY_NAME</code> or with the <b>-n</b> option.</p>
+<p>These models approximate the gravitation field above the surface of the earth. By default, the <code>egm96</code> gravity model is used. This may changed by setting the environment variable <code>GEOGRAPHICLIB_GRAVITY_NAME</code> or with the <b>-n</b> option.</p>
 
-<p>The gravity models will be loaded from a directory specified at compile time. This may changed by setting the environment variables <code>GRAVITY_PATH</code> or <code>GEOGRAPHICLIB_DATA</code>, or with the <b>-d</b> option. The <b>-h</b> option prints the default gravity path and name. Use the <b>-v</b> option to ascertain the full path name of the data file.</p>
+<p>The gravity models will be loaded from a directory specified at compile time. This may changed by setting the environment variables <code>GEOGRAPHICLIB_GRAVITY_PATH</code> or <code>GEOGRAPHICLIB_DATA</code>, or with the <b>-d</b> option. The <b>-h</b> option prints the default gravity path and name. Use the <b>-v</b> option to ascertain the full path name of the data file.</p>
 
 <p>Instructions for downloading and installing gravity models are available at <a href="http://geographiclib.sf.net/html/gravity.html#gravityinst">http://geographiclib.sf.net/html/gravity.html#gravityinst</a>.</p>
 
@@ -158,22 +160,22 @@
 
 <dl>
 
-<dt id="GRAVITY_NAME"><b>GRAVITY_NAME</b></dt>
+<dt id="GEOGRAPHICLIB_GRAVITY_NAME"><b>GEOGRAPHICLIB_GRAVITY_NAME</b></dt>
 <dd>
 
-<p>Override the compile-time default gravity name of <code>egm96</code>. The <b>-h</b> option reports the value of <b>GRAVITY_NAME</b>, if defined, otherwise it reports the compile-time value. If the <b>-n</b> <i>name</i> option is used, then <i>name</i> takes precedence.</p>
+<p>Override the compile-time default gravity name of <code>egm96</code>. The <b>-h</b> option reports the value of <b>GEOGRAPHICLIB_GRAVITY_NAME</b>, if defined, otherwise it reports the compile-time value. If the <b>-n</b> <i>name</i> option is used, then <i>name</i> takes precedence.</p>
 
 </dd>
-<dt id="GRAVITY_PATH"><b>GRAVITY_PATH</b></dt>
+<dt id="GEOGRAPHICLIB_GRAVITY_PATH"><b>GEOGRAPHICLIB_GRAVITY_PATH</b></dt>
 <dd>
 
-<p>Override the compile-time default gravity path. This is typically <code>/usr/local/share/GeographicLib/gravity</code> on Unix-like systems and <code>C:/Documents and Settings/All Users/Application Data/GeographicLib/gravity</code> on Windows systems. The <b>-h</b> option reports the value of <b>GRAVITY_PATH</b>, if defined, otherwise it reports the compile-time value. If the <b>-d</b> <i>dir</i> option is used, then <i>dir</i> takes precedence.</p>
+<p>Override the compile-time default gravity path. This is typically <code>/usr/local/share/GeographicLib/gravity</code> on Unix-like systems and <code>C:/ProgramData/GeographicLib/gravity</code> on Windows systems. The <b>-h</b> option reports the value of <b>GEOGRAPHICLIB_GRAVITY_PATH</b>, if defined, otherwise it reports the compile-time value. If the <b>-d</b> <i>dir</i> option is used, then <i>dir</i> takes precedence.</p>
 
 </dd>
 <dt id="GEOGRAPHICLIB_DATA"><b>GEOGRAPHICLIB_DATA</b></dt>
 <dd>
 
-<p>Another way of overriding the compile-time default gravity path. If it is set (and if <b>GRAVITY_PATH</b> is not set), then $<b>GEOGRAPHICLIB_DATA</b>/gravity is used.</p>
+<p>Another way of overriding the compile-time default gravity path. If it is set (and if <b>GEOGRAPHICLIB_GRAVITY_PATH</b> is not set), then $<b>GEOGRAPHICLIB_DATA</b>/gravity is used.</p>
 
 </dd>
 </dl>
diff --git a/man/Gravity.pod b/man/Gravity.pod
index 90f0c8e..ee8c011 100644
--- a/man/Gravity.pod
+++ b/man/Gravity.pod
@@ -29,9 +29,9 @@ in this case only the longitude should be given on the input lines.  The
 quantities printed out are governed by the B<-G> (default), B<-D>,
 B<-A>, or B<-H> options.
 
-All the supported gravity models use WGS84 as the reference ellipsoid
-I<a> = 6378137 m, I<f> = 1/298.257223563, I<omega> = 7292115e-11 rad/s,
-and I<GM> = 3986004.418e8 m^3/s^2.
+All the supported gravity models, except for grs80, use WGS84 as the
+reference ellipsoid I<a> = 6378137 m, I<f> = 1/298.257223563, I<omega> =
+7292115e-11 rad/s, and I<GM> = 3986004.418e8 m^3/s^2.
 
 =head1 OPTIONS
 
@@ -159,17 +159,20 @@ B<Gravity> computes the gravity field using one of the following models
       http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008
     wgs84, world geodetic system 1984.  This returns the normal
       gravity for the WGS84 ellipsoid.
+    GRS80, geodetic reference system 1980.  This returns the normal
+      gravity for the GRS80 ellipsoid.
 
 These models approximate the gravitation field above the surface of the
 earth.  By default, the C<egm96> gravity model is used.  This may
-changed by setting the environment variable C<GRAVITY_NAME> or with the
-B<-n> option.
+changed by setting the environment variable
+C<GEOGRAPHICLIB_GRAVITY_NAME> or with the B<-n> option.
 
 The gravity models will be loaded from a directory specified at compile
 time.  This may changed by setting the environment variables
-C<GRAVITY_PATH> or C<GEOGRAPHICLIB_DATA>, or with the B<-d> option.
-The B<-h> option prints the default gravity path and name.  Use the
-B<-v> option to ascertain the full path name of the data file.
+C<GEOGRAPHICLIB_GRAVITY_PATH> or C<GEOGRAPHICLIB_DATA>, or with the
+B<-d> option.  The B<-h> option prints the default gravity path and
+name.  Use the B<-v> option to ascertain the full path name of the data
+file.
 
 Instructions for downloading and installing gravity models are
 available at
@@ -179,27 +182,26 @@ L<http://geographiclib.sf.net/html/gravity.html#gravityinst>.
 
 =over
 
-=item B<GRAVITY_NAME>
+=item B<GEOGRAPHICLIB_GRAVITY_NAME>
 
 Override the compile-time default gravity name of C<egm96>.  The B<-h>
-option reports the value of B<GRAVITY_NAME>, if defined, otherwise it
-reports the compile-time value.  If the B<-n> I<name> option is used,
-then I<name> takes precedence.
+option reports the value of B<GEOGRAPHICLIB_GRAVITY_NAME>, if defined,
+otherwise it reports the compile-time value.  If the B<-n> I<name>
+option is used, then I<name> takes precedence.
 
-=item B<GRAVITY_PATH>
+=item B<GEOGRAPHICLIB_GRAVITY_PATH>
 
 Override the compile-time default gravity path.  This is typically
 C</usr/local/share/GeographicLib/gravity> on Unix-like systems and
-C<C:/Documents and Settings/All Users/Application
-Data/GeographicLib/gravity> on Windows systems.  The B<-h> option reports
-the value of B<GRAVITY_PATH>, if defined, otherwise it reports the
-compile-time value.  If the B<-d> I<dir> option is used, then I<dir>
-takes precedence.
+C<C:/ProgramData/GeographicLib/gravity> on Windows systems.  The B<-h>
+option reports the value of B<GEOGRAPHICLIB_GRAVITY_PATH>, if defined,
+otherwise it reports the compile-time value.  If the B<-d> I<dir> option
+is used, then I<dir> takes precedence.
 
 =item B<GEOGRAPHICLIB_DATA>
 
 Another way of overriding the compile-time default gravity path.  If it
-is set (and if B<GRAVITY_PATH> is not set), then
+is set (and if B<GEOGRAPHICLIB_GRAVITY_PATH> is not set), then
 $B<GEOGRAPHICLIB_DATA>/gravity is used.
 
 =back
diff --git a/man/Gravity.usage b/man/Gravity.usage
index d60547f..367a351 100644
--- a/man/Gravity.usage
+++ b/man/Gravity.usage
@@ -9,7 +9,7 @@ int usage(int retval, bool brief) {
 "For full documentation type:\n"
 "    Gravity --help\n"
 "or visit:\n"
-"    http://geographiclib.sf.net/1.35/Gravity.1.html\n";
+"    http://geographiclib.sf.net/1.37/Gravity.1.html\n";
   else
     ( retval ? std::cerr : std::cout ) << "Man page:\n"
 "NAME\n"
@@ -34,9 +34,9 @@ int usage(int retval, bool brief) {
 "       only the longitude should be given on the input lines.  The quantities\n"
 "       printed out are governed by the -G (default), -D, -A, or -H options.\n"
 "\n"
-"       All the supported gravity models use WGS84 as the reference ellipsoid a\n"
-"       = 6378137 m, f = 1/298.257223563, omega = 7292115e-11 rad/s, and GM =\n"
-"       3986004.418e8 m^3/s^2.\n"
+"       All the supported gravity models, except for grs80, use WGS84 as the\n"
+"       reference ellipsoid a = 6378137 m, f = 1/298.257223563, omega =\n"
+"       7292115e-11 rad/s, and GM = 3986004.418e8 m^3/s^2.\n"
 "\n"
 "OPTIONS\n"
 "       -n  use gravity field model name instead of the default \"egm96\".  See\n"
@@ -132,41 +132,42 @@ int usage(int retval, bool brief) {
 "             http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008\n"
 "           wgs84, world geodetic system 1984.  This returns the normal\n"
 "             gravity for the WGS84 ellipsoid.\n"
+"           GRS80, geodetic reference system 1980.  This returns the normal\n"
+"             gravity for the GRS80 ellipsoid.\n"
 "\n"
 "       These models approximate the gravitation field above the surface of the\n"
 "       earth.  By default, the \"egm96\" gravity model is used.  This may\n"
-"       changed by setting the environment variable \"GRAVITY_NAME\" or with the\n"
-"       -n option.\n"
+"       changed by setting the environment variable\n"
+"       \"GEOGRAPHICLIB_GRAVITY_NAME\" or with the -n option.\n"
 "\n"
 "       The gravity models will be loaded from a directory specified at compile\n"
 "       time.  This may changed by setting the environment variables\n"
-"       \"GRAVITY_PATH\" or \"GEOGRAPHICLIB_DATA\", or with the -d option.  The -h\n"
-"       option prints the default gravity path and name.  Use the -v option to\n"
-"       ascertain the full path name of the data file.\n"
+"       \"GEOGRAPHICLIB_GRAVITY_PATH\" or \"GEOGRAPHICLIB_DATA\", or with the -d\n"
+"       option.  The -h option prints the default gravity path and name.  Use\n"
+"       the -v option to ascertain the full path name of the data file.\n"
 "\n"
 "       Instructions for downloading and installing gravity models are\n"
 "       available at\n"
 "       <http://geographiclib.sf.net/html/gravity.html#gravityinst>.\n"
 "\n"
 "ENVIRONMENT\n"
-"       GRAVITY_NAME\n"
+"       GEOGRAPHICLIB_GRAVITY_NAME\n"
 "           Override the compile-time default gravity name of \"egm96\".  The -h\n"
-"           option reports the value of GRAVITY_NAME, if defined, otherwise it\n"
-"           reports the compile-time value.  If the -n name option is used,\n"
-"           then name takes precedence.\n"
+"           option reports the value of GEOGRAPHICLIB_GRAVITY_NAME, if defined,\n"
+"           otherwise it reports the compile-time value.  If the -n name option\n"
+"           is used, then name takes precedence.\n"
 "\n"
-"       GRAVITY_PATH\n"
+"       GEOGRAPHICLIB_GRAVITY_PATH\n"
 "           Override the compile-time default gravity path.  This is typically\n"
 "           \"/usr/local/share/GeographicLib/gravity\" on Unix-like systems and\n"
-"           \"C:/Documents and Settings/All Users/Application\n"
-"           Data/GeographicLib/gravity\" on Windows systems.  The -h option\n"
-"           reports the value of GRAVITY_PATH, if defined, otherwise it reports\n"
-"           the compile-time value.  If the -d dir option is used, then dir\n"
-"           takes precedence.\n"
+"           \"C:/ProgramData/GeographicLib/gravity\" on Windows systems.  The -h\n"
+"           option reports the value of GEOGRAPHICLIB_GRAVITY_PATH, if defined,\n"
+"           otherwise it reports the compile-time value.  If the -d dir option\n"
+"           is used, then dir takes precedence.\n"
 "\n"
 "       GEOGRAPHICLIB_DATA\n"
 "           Another way of overriding the compile-time default gravity path.\n"
-"           If it is set (and if GRAVITY_PATH is not set), then\n"
+"           If it is set (and if GEOGRAPHICLIB_GRAVITY_PATH is not set), then\n"
 "           $GEOGRAPHICLIB_DATA/gravity is used.\n"
 "\n"
 "ERRORS\n"
diff --git a/man/MagneticField.1 b/man/MagneticField.1
index 3d520cb..5f92ff3 100644
--- a/man/MagneticField.1
+++ b/man/MagneticField.1
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.20)
+.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -38,6 +38,8 @@
 .    ds PI \(*p
 .    ds L" ``
 .    ds R" ''
+.    ds C`
+.    ds C'
 'br\}
 .\"
 .\" Escape single quotes in literal strings from groff's Unicode transform.
@@ -48,17 +50,24 @@
 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
 .\" entries marked with X<> in POD.  Of course, you'll have to process the
 .\" output yourself in some meaningful fashion.
-.ie \nF \{\
-.    de IX
-.    tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
 ..
-.    nr % 0
-.    rr F
-.\}
-.el \{\
-.    de IX
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+.    if \nF \{
+.        de IX
+.        tm Index:\\$1\t\\n%\t"\\$2"
 ..
+.        if !\nF==2 \{
+.            nr % 0
+.            nr F 2
+.        \}
+.    \}
 .\}
+.rr rF
 .\"
 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
@@ -124,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "MAGNETICFIELD 1"
-.TH MAGNETICFIELD 1 "2014-03-13" "GeographicLib 1.35" "GeographicLib Utilities"
+.TH MAGNETICFIELD 1 "2014-08-08" "GeographicLib 1.37" "GeographicLib Utilities"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -183,11 +192,11 @@ The \s-1WGS84\s0 ellipsoid is used, \fIa\fR = 6378137 m, \fIf\fR = 1/298.2572235
 .IP "\fB\-n\fR" 4
 .IX Item "-n"
 use magnetic field model \fIname\fR instead of the default \f(CW\*(C`wmm2010\*(C'\fR.  See
-\&\*(L"\s-1MODELS\s0\*(R".
+\&\*(L"\s-1MODELS\*(R"\s0.
 .IP "\fB\-d\fR" 4
 .IX Item "-d"
 read magnetic models from \fIdir\fR instead of the default.  See
-\&\*(L"\s-1MODELS\s0\*(R".
+\&\*(L"\s-1MODELS\*(R"\s0.
 .IP "\fB\-t\fR" 4
 .IX Item "-t"
 evaluate the field at \fItime\fR instead of reading the time from the input
@@ -258,14 +267,14 @@ following models
 .PP
 .Vb 10
 \&    wmm2010, the World Magnetic Model 2010, which approximates the
-\&      main magnetic field for the period 2010a\*^XX2015.  See
+\&      main magnetic field for the period 2010\-2015.  See
 \&      http://ngdc.noaa.gov/geomag/WMM/DoDWMM.shtml
 \&    igrf11, the International Geomagnetic Reference Field (11th
 \&      generation) which approximates the main magnetic field for
-\&      the period 1900a\*^XX2015.  See
+\&      the period 1900\-2015.  See
 \&      http://ngdc.noaa.gov/IAGA/vmod/igrf.html
 \&    emm2010, the Enhanced Magnetic Model 2010, which approximates the
-\&      main and crustal magnetic fields for the period 2010a\*^XX2015.  See
+\&      main and crustal magnetic fields for the period 2010\-2015.  See
 \&      http://ngdc.noaa.gov/geomag/EMM/index.html
 .Ve
 .PP
@@ -275,39 +284,39 @@ the ionosphere, the magnetosphere, nearby magnetized materials,
 electrical machinery, etc.
 .PP
 By default, the \f(CW\*(C`wmm2010\*(C'\fR magnetic model is used.  This may changed by
-setting the environment variable \f(CW\*(C`MAGNETIC_NAME\*(C'\fR or with the \fB\-n\fR
-option.
+setting the environment variable \f(CW\*(C`GEOGRAPHICLIB_MAGNETIC_NAME\*(C'\fR or with
+the \fB\-n\fR option.
 .PP
 The magnetic models will be loaded from a directory specified at compile
 time.  This may changed by setting the environment variables
-\&\f(CW\*(C`MAGNETIC_PATH\*(C'\fR or \f(CW\*(C`GEOGRAPHICLIB_DATA\*(C'\fR, or with the \fB\-d\fR option.
-The \fB\-h\fR option prints the default magnetic path and name.  Use the
-\&\fB\-v\fR option to ascertain the full path name of the data file.
+\&\f(CW\*(C`GEOGRAPHICLIB_MAGNETIC_PATH\*(C'\fR or \f(CW\*(C`GEOGRAPHICLIB_DATA\*(C'\fR, or with the
+\&\fB\-d\fR option.  The \fB\-h\fR option prints the default magnetic path and
+name.  Use the \fB\-v\fR option to ascertain the full path name of the data
+file.
 .PP
 Instructions for downloading and installing magnetic models are
 available at
 <http://geographiclib.sf.net/html/magnetic.html#magneticinst>.
 .SH "ENVIRONMENT"
 .IX Header "ENVIRONMENT"
-.IP "\fB\s-1MAGNETIC_NAME\s0\fR" 4
-.IX Item "MAGNETIC_NAME"
-Override the compile-time default magnetic name of \f(CW\*(C`wmm2010\*(C'\fR.  The \fB\-h\fR
-option reports the value of \fB\s-1MAGNETIC_NAME\s0\fR, if defined, otherwise it
-reports the compile-time value.  If the \fB\-n\fR \fIname\fR option is used,
-then \fIname\fR takes precedence.
-.IP "\fB\s-1MAGNETIC_PATH\s0\fR" 4
-.IX Item "MAGNETIC_PATH"
+.IP "\fB\s-1GEOGRAPHICLIB_MAGNETIC_NAME\s0\fR" 4
+.IX Item "GEOGRAPHICLIB_MAGNETIC_NAME"
+Override the compile-time default magnetic name of \f(CW\*(C`wmm2010\*(C'\fR.  The
+\&\fB\-h\fR option reports the value of \fB\s-1GEOGRAPHICLIB_MAGNETIC_NAME\s0\fR, if
+defined, otherwise it reports the compile-time value.  If the \fB\-n\fR
+\&\fIname\fR option is used, then \fIname\fR takes precedence.
+.IP "\fB\s-1GEOGRAPHICLIB_MAGNETIC_PATH\s0\fR" 4
+.IX Item "GEOGRAPHICLIB_MAGNETIC_PATH"
 Override the compile-time default magnetic path.  This is typically
 \&\f(CW\*(C`/usr/local/share/GeographicLib/magnetic\*(C'\fR on Unix-like systems and
-\&\f(CW\*(C`C:/Documents and Settings/All Users/Application
-Data/GeographicLib/magnetic\*(C'\fR on Windows systems.  The \fB\-h\fR option reports
-the value of \fB\s-1MAGNETIC_PATH\s0\fR, if defined, otherwise it reports the
-compile-time value.  If the \fB\-d\fR \fIdir\fR option is used, then \fIdir\fR
-takes precedence.
+\&\f(CW\*(C`C:/ProgramData/GeographicLib/magnetic\*(C'\fR on Windows systems.  The \fB\-h\fR
+option reports the value of \fB\s-1GEOGRAPHICLIB_MAGNETIC_PATH\s0\fR, if defined,
+otherwise it reports the compile-time value.  If the \fB\-d\fR \fIdir\fR option
+is used, then \fIdir\fR takes precedence.
 .IP "\fB\s-1GEOGRAPHICLIB_DATA\s0\fR" 4
 .IX Item "GEOGRAPHICLIB_DATA"
 Another way of overriding the compile-time default magnetic path.  If it
-is set (and if \fB\s-1MAGNETIC_PATH\s0\fR is not set), then
+is set (and if \fB\s-1GEOGRAPHICLIB_MAGNETIC_PATH\s0\fR is not set), then
 $\fB\s-1GEOGRAPHICLIB_DATA\s0\fR/magnetic is used.
 .SH "ERRORS"
 .IX Header "ERRORS"
diff --git a/man/MagneticField.1.html b/man/MagneticField.1.html
index dd18846..5f735ba 100644
--- a/man/MagneticField.1.html
+++ b/man/MagneticField.1.html
@@ -154,21 +154,21 @@
 <p><b>MagneticField</b> computes the geomagnetic field using one of the following models</p>
 
 <pre><code>    wmm2010, the World Magnetic Model 2010, which approximates the
-      main magnetic field for the period 2010–2015.  See
+      main magnetic field for the period 2010-2015.  See
       http://ngdc.noaa.gov/geomag/WMM/DoDWMM.shtml
     igrf11, the International Geomagnetic Reference Field (11th
       generation) which approximates the main magnetic field for
-      the period 1900–2015.  See
+      the period 1900-2015.  See
       http://ngdc.noaa.gov/IAGA/vmod/igrf.html
     emm2010, the Enhanced Magnetic Model 2010, which approximates the
-      main and crustal magnetic fields for the period 2010–2015.  See
+      main and crustal magnetic fields for the period 2010-2015.  See
       http://ngdc.noaa.gov/geomag/EMM/index.html</code></pre>
 
 <p>These models approximate the magnetic field due to the earth's core and (in the case of emm2010) its crust. They neglect magnetic fields due to the ionosphere, the magnetosphere, nearby magnetized materials, electrical machinery, etc.</p>
 
-<p>By default, the <code>wmm2010</code> magnetic model is used. This may changed by setting the environment variable <code>MAGNETIC_NAME</code> or with the <b>-n</b> option.</p>
+<p>By default, the <code>wmm2010</code> magnetic model is used. This may changed by setting the environment variable <code>GEOGRAPHICLIB_MAGNETIC_NAME</code> or with the <b>-n</b> option.</p>
 
-<p>The magnetic models will be loaded from a directory specified at compile time. This may changed by setting the environment variables <code>MAGNETIC_PATH</code> or <code>GEOGRAPHICLIB_DATA</code>, or with the <b>-d</b> option. The <b>-h</b> option prints the default magnetic path and name. Use the <b>-v</b> option to ascertain the full path name of the data file.</p>
+<p>The magnetic models will be loaded from a directory specified at compile time. This may changed by setting the environment variables <code>GEOGRAPHICLIB_MAGNETIC_PATH</code> or <code>GEOGRAPHICLIB_DATA</code>, or with the <b>-d</b> option. The <b>-h</b> option prints the default magnetic path and name. Use the <b>-v</b> option to ascertain the full path name of the data file.</p>
 
 <p>Instructions for downloading and installing magnetic models are available at <a href="http://geographiclib.sf.net/html/magnetic.html#magneticinst">http://geographiclib.sf.net/html/magnetic.html#magneticinst</a>.</p>
 
@@ -176,22 +176,22 @@
 
 <dl>
 
-<dt id="MAGNETIC_NAME"><b>MAGNETIC_NAME</b></dt>
+<dt id="GEOGRAPHICLIB_MAGNETIC_NAME"><b>GEOGRAPHICLIB_MAGNETIC_NAME</b></dt>
 <dd>
 
-<p>Override the compile-time default magnetic name of <code>wmm2010</code>. The <b>-h</b> option reports the value of <b>MAGNETIC_NAME</b>, if defined, otherwise it reports the compile-time value. If the <b>-n</b> <i>name</i> option is used, then <i>name</i> takes precedence.</p>
+<p>Override the compile-time default magnetic name of <code>wmm2010</code>. The <b>-h</b> option reports the value of <b>GEOGRAPHICLIB_MAGNETIC_NAME</b>, if defined, otherwise it reports the compile-time value. If the <b>-n</b> <i>name</i> option is used, then <i>name</i> takes precedence.</p>
 
 </dd>
-<dt id="MAGNETIC_PATH"><b>MAGNETIC_PATH</b></dt>
+<dt id="GEOGRAPHICLIB_MAGNETIC_PATH"><b>GEOGRAPHICLIB_MAGNETIC_PATH</b></dt>
 <dd>
 
-<p>Override the compile-time default magnetic path. This is typically <code>/usr/local/share/GeographicLib/magnetic</code> on Unix-like systems and <code>C:/Documents and Settings/All Users/Application Data/GeographicLib/magnetic</code> on Windows systems. The <b>-h</b> option reports the value of <b>MAGNETIC_PATH</b>, if defined, otherwise it reports the compile-time value. If the <b>-d</b> <i>dir</i> option is used, then <i>dir</i> takes precedence.</p>
+<p>Override the compile-time default magnetic path. This is typically <code>/usr/local/share/GeographicLib/magnetic</code> on Unix-like systems and <code>C:/ProgramData/GeographicLib/magnetic</code> on Windows systems. The <b>-h</b> option reports the value of <b>GEOGRAPHICLIB_MAGNETIC_PATH</b>, if defined, otherwise it reports the compile-time value. If the <b>-d</b> <i>dir</i> option is used, then <i>dir</i> takes precedence.</p>
 
 </dd>
 <dt id="GEOGRAPHICLIB_DATA"><b>GEOGRAPHICLIB_DATA</b></dt>
 <dd>
 
-<p>Another way of overriding the compile-time default magnetic path. If it is set (and if <b>MAGNETIC_PATH</b> is not set), then $<b>GEOGRAPHICLIB_DATA</b>/magnetic is used.</p>
+<p>Another way of overriding the compile-time default magnetic path. If it is set (and if <b>GEOGRAPHICLIB_MAGNETIC_PATH</b> is not set), then $<b>GEOGRAPHICLIB_DATA</b>/magnetic is used.</p>
 
 </dd>
 </dl>
diff --git a/man/MagneticField.pod b/man/MagneticField.pod
index 519e2ac..d85e5e9 100644
--- a/man/MagneticField.pod
+++ b/man/MagneticField.pod
@@ -149,14 +149,14 @@ B<MagneticField> computes the geomagnetic field using one of the
 following models
 
     wmm2010, the World Magnetic Model 2010, which approximates the
-      main magnetic field for the period 2010–2015.  See
+      main magnetic field for the period 2010-2015.  See
       http://ngdc.noaa.gov/geomag/WMM/DoDWMM.shtml
     igrf11, the International Geomagnetic Reference Field (11th
       generation) which approximates the main magnetic field for
-      the period 1900–2015.  See
+      the period 1900-2015.  See
       http://ngdc.noaa.gov/IAGA/vmod/igrf.html
     emm2010, the Enhanced Magnetic Model 2010, which approximates the
-      main and crustal magnetic fields for the period 2010–2015.  See
+      main and crustal magnetic fields for the period 2010-2015.  See
       http://ngdc.noaa.gov/geomag/EMM/index.html
 
 These models approximate the magnetic field due to the earth's core and
@@ -165,14 +165,15 @@ the ionosphere, the magnetosphere, nearby magnetized materials,
 electrical machinery, etc.
 
 By default, the C<wmm2010> magnetic model is used.  This may changed by
-setting the environment variable C<MAGNETIC_NAME> or with the B<-n>
-option.
+setting the environment variable C<GEOGRAPHICLIB_MAGNETIC_NAME> or with
+the B<-n> option.
 
 The magnetic models will be loaded from a directory specified at compile
 time.  This may changed by setting the environment variables
-C<MAGNETIC_PATH> or C<GEOGRAPHICLIB_DATA>, or with the B<-d> option.
-The B<-h> option prints the default magnetic path and name.  Use the
-B<-v> option to ascertain the full path name of the data file.
+C<GEOGRAPHICLIB_MAGNETIC_PATH> or C<GEOGRAPHICLIB_DATA>, or with the
+B<-d> option.  The B<-h> option prints the default magnetic path and
+name.  Use the B<-v> option to ascertain the full path name of the data
+file.
 
 Instructions for downloading and installing magnetic models are
 available at
@@ -182,27 +183,26 @@ L<http://geographiclib.sf.net/html/magnetic.html#magneticinst>.
 
 =over
 
-=item B<MAGNETIC_NAME>
+=item B<GEOGRAPHICLIB_MAGNETIC_NAME>
 
-Override the compile-time default magnetic name of C<wmm2010>.  The B<-h>
-option reports the value of B<MAGNETIC_NAME>, if defined, otherwise it
-reports the compile-time value.  If the B<-n> I<name> option is used,
-then I<name> takes precedence.
+Override the compile-time default magnetic name of C<wmm2010>.  The
+B<-h> option reports the value of B<GEOGRAPHICLIB_MAGNETIC_NAME>, if
+defined, otherwise it reports the compile-time value.  If the B<-n>
+I<name> option is used, then I<name> takes precedence.
 
-=item B<MAGNETIC_PATH>
+=item B<GEOGRAPHICLIB_MAGNETIC_PATH>
 
 Override the compile-time default magnetic path.  This is typically
 C</usr/local/share/GeographicLib/magnetic> on Unix-like systems and
-C<C:/Documents and Settings/All Users/Application
-Data/GeographicLib/magnetic> on Windows systems.  The B<-h> option reports
-the value of B<MAGNETIC_PATH>, if defined, otherwise it reports the
-compile-time value.  If the B<-d> I<dir> option is used, then I<dir>
-takes precedence.
+C<C:/ProgramData/GeographicLib/magnetic> on Windows systems.  The B<-h>
+option reports the value of B<GEOGRAPHICLIB_MAGNETIC_PATH>, if defined,
+otherwise it reports the compile-time value.  If the B<-d> I<dir> option
+is used, then I<dir> takes precedence.
 
 =item B<GEOGRAPHICLIB_DATA>
 
 Another way of overriding the compile-time default magnetic path.  If it
-is set (and if B<MAGNETIC_PATH> is not set), then
+is set (and if B<GEOGRAPHICLIB_MAGNETIC_PATH> is not set), then
 $B<GEOGRAPHICLIB_DATA>/magnetic is used.
 
 =back
diff --git a/man/MagneticField.usage b/man/MagneticField.usage
index 9f1ca8b..c394b31 100644
--- a/man/MagneticField.usage
+++ b/man/MagneticField.usage
@@ -10,7 +10,7 @@ int usage(int retval, bool brief) {
 "For full documentation type:\n"
 "    MagneticField --help\n"
 "or visit:\n"
-"    http://geographiclib.sf.net/1.35/MagneticField.1.html\n";
+"    http://geographiclib.sf.net/1.37/MagneticField.1.html\n";
   else
     ( retval ? std::cerr : std::cout ) << "Man page:\n"
 "NAME\n"
@@ -124,14 +124,14 @@ int usage(int retval, bool brief) {
 "       models\n"
 "\n"
 "           wmm2010, the World Magnetic Model 2010, which approximates the\n"
-"             main magnetic field for the period 2010aXX2015.  See\n"
+"             main magnetic field for the period 2010-2015.  See\n"
 "             http://ngdc.noaa.gov/geomag/WMM/DoDWMM.shtml\n"
 "           igrf11, the International Geomagnetic Reference Field (11th\n"
 "             generation) which approximates the main magnetic field for\n"
-"             the period 1900aXX2015.  See\n"
+"             the period 1900-2015.  See\n"
 "             http://ngdc.noaa.gov/IAGA/vmod/igrf.html\n"
 "           emm2010, the Enhanced Magnetic Model 2010, which approximates the\n"
-"             main and crustal magnetic fields for the period 2010aXX2015.  See\n"
+"             main and crustal magnetic fields for the period 2010-2015.  See\n"
 "             http://ngdc.noaa.gov/geomag/EMM/index.html\n"
 "\n"
 "       These models approximate the magnetic field due to the earth's core and\n"
@@ -140,37 +140,37 @@ int usage(int retval, bool brief) {
 "       electrical machinery, etc.\n"
 "\n"
 "       By default, the \"wmm2010\" magnetic model is used.  This may changed by\n"
-"       setting the environment variable \"MAGNETIC_NAME\" or with the -n option.\n"
+"       setting the environment variable \"GEOGRAPHICLIB_MAGNETIC_NAME\" or with\n"
+"       the -n option.\n"
 "\n"
 "       The magnetic models will be loaded from a directory specified at\n"
 "       compile time.  This may changed by setting the environment variables\n"
-"       \"MAGNETIC_PATH\" or \"GEOGRAPHICLIB_DATA\", or with the -d option.  The -h\n"
-"       option prints the default magnetic path and name.  Use the -v option to\n"
-"       ascertain the full path name of the data file.\n"
+"       \"GEOGRAPHICLIB_MAGNETIC_PATH\" or \"GEOGRAPHICLIB_DATA\", or with the -d\n"
+"       option.  The -h option prints the default magnetic path and name.  Use\n"
+"       the -v option to ascertain the full path name of the data file.\n"
 "\n"
 "       Instructions for downloading and installing magnetic models are\n"
 "       available at\n"
 "       <http://geographiclib.sf.net/html/magnetic.html#magneticinst>.\n"
 "\n"
 "ENVIRONMENT\n"
-"       MAGNETIC_NAME\n"
+"       GEOGRAPHICLIB_MAGNETIC_NAME\n"
 "           Override the compile-time default magnetic name of \"wmm2010\".  The\n"
-"           -h option reports the value of MAGNETIC_NAME, if defined, otherwise\n"
-"           it reports the compile-time value.  If the -n name option is used,\n"
-"           then name takes precedence.\n"
+"           -h option reports the value of GEOGRAPHICLIB_MAGNETIC_NAME, if\n"
+"           defined, otherwise it reports the compile-time value.  If the -n\n"
+"           name option is used, then name takes precedence.\n"
 "\n"
-"       MAGNETIC_PATH\n"
+"       GEOGRAPHICLIB_MAGNETIC_PATH\n"
 "           Override the compile-time default magnetic path.  This is typically\n"
 "           \"/usr/local/share/GeographicLib/magnetic\" on Unix-like systems and\n"
-"           \"C:/Documents and Settings/All Users/Application\n"
-"           Data/GeographicLib/magnetic\" on Windows systems.  The -h option\n"
-"           reports the value of MAGNETIC_PATH, if defined, otherwise it\n"
-"           reports the compile-time value.  If the -d dir option is used, then\n"
-"           dir takes precedence.\n"
+"           \"C:/ProgramData/GeographicLib/magnetic\" on Windows systems.  The -h\n"
+"           option reports the value of GEOGRAPHICLIB_MAGNETIC_PATH, if\n"
+"           defined, otherwise it reports the compile-time value.  If the -d\n"
+"           dir option is used, then dir takes precedence.\n"
 "\n"
 "       GEOGRAPHICLIB_DATA\n"
 "           Another way of overriding the compile-time default magnetic path.\n"
-"           If it is set (and if MAGNETIC_PATH is not set), then\n"
+"           If it is set (and if GEOGRAPHICLIB_MAGNETIC_PATH is not set), then\n"
 "           $GEOGRAPHICLIB_DATA/magnetic is used.\n"
 "\n"
 "ERRORS\n"
diff --git a/man/Makefile.am b/man/Makefile.am
index cad9e45..cb9b7bd 100644
--- a/man/Makefile.am
+++ b/man/Makefile.am
@@ -13,6 +13,7 @@ USAGE = \
 	Gravity.usage \
 	MagneticField.usage \
 	Planimeter.usage \
+	RhumbSolve.usage \
 	TransverseMercatorProj.usage
 
 MANPAGES = \
@@ -25,6 +26,7 @@ MANPAGES = \
 	Gravity.1 \
 	MagneticField.1 \
 	Planimeter.1 \
+	RhumbSolve.1 \
 	TransverseMercatorProj.1
 
 HTMLMAN = \
@@ -37,6 +39,7 @@ HTMLMAN = \
 	Gravity.1.html \
 	MagneticField.1.html \
 	Planimeter.1.html \
+	RhumbSolve.1.html \
 	TransverseMercatorProj.1.html
 
 POD2MAN = pod2man --center="GeographicLib Utilities" \
@@ -62,7 +65,7 @@ if HAVE_PODPROGS
 	$(POD2MAN) $^ > $@
 
 .pod.1.html:
-	pod2html --noindex --tile "$*(1)" $^ | $(PODFIX) > $@
+	pod2html --noindex --title "$*(1)" $^ | $(PODFIX) > $@
 
 else
 
@@ -91,6 +94,8 @@ MagneticField.usage:
 	$(USAGECMD)
 Planimeter.usage:
 	$(USAGECMD)
+RhumbSolve.usage:
+	$(USAGECMD)
 TransverseMercatorProj.usage:
 	$(USAGECMD)
 
@@ -112,6 +117,8 @@ MagneticField.1:
 	$(MANCMD)
 Planimeter.1:
 	$(MANCMD)
+RhumbSolve.1:
+	$(MANCMD)
 TransverseMercatorProj.1:
 	$(MANCMD)
 
@@ -133,6 +140,8 @@ MagneticField.1.html:
 	$(HTMLCMD)
 Planimeter.1.html:
 	$(HTMLCMD)
+RhumbSolve.1.html:
+	$(HTMLCMD)
 TransverseMercatorProj.1.html:
 	$(HTMLCMD)
 
@@ -142,7 +151,7 @@ EXTRA_DIST = Makefile.mk CMakeLists.txt makeusage.sh \
 	GeoConvert.pod TransverseMercatorProj.pod \
 	CartConvert.pod ConicProj.pod GeodSolve.pod GeodesicProj.pod \
 	GeoidEval.pod Gravity.pod MagneticField.pod Planimeter.pod \
-	$(MANPAGES) $(USAGE) $(HTMLMAN) \
+	RhumbSolve.pod $(MANPAGES) $(USAGE) $(HTMLMAN) \
 	dummy.usage.in dummy.1.in dummy.1.html.in
 
 maintainer-clean-local:
diff --git a/man/Makefile.in b/man/Makefile.in
index 3399f75..90d6e16 100644
--- a/man/Makefile.in
+++ b/man/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.12.2 from Makefile.am.
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -19,23 +19,51 @@
 #
 # Copyright (C) 2011, Charles Karney <charles at karney.com>
 VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
     esac; \
-    test $$am__dry = yes; \
-  }
+  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@
@@ -56,7 +84,7 @@ build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
 subdir = man
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
 	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
@@ -68,6 +96,18 @@ mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/include/GeographicLib/Config-ac.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 = \
@@ -106,9 +146,11 @@ man1dir = $(mandir)/man1
 am__installdirs = "$(DESTDIR)$(man1dir)"
 NROFF = nroff
 MANS = $(man1_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -179,7 +221,6 @@ POD2HTML = @POD2HTML@
 POD2MAN = pod2man --center="GeographicLib Utilities" \
 	--release="$(PACKAGE_STRING)"
 
-POW_LIB = @POW_LIB@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
@@ -253,6 +294,7 @@ USAGE = \
 	Gravity.usage \
 	MagneticField.usage \
 	Planimeter.usage \
+	RhumbSolve.usage \
 	TransverseMercatorProj.usage
 
 MANPAGES = \
@@ -265,6 +307,7 @@ MANPAGES = \
 	Gravity.1 \
 	MagneticField.1 \
 	Planimeter.1 \
+	RhumbSolve.1 \
 	TransverseMercatorProj.1
 
 HTMLMAN = \
@@ -277,6 +320,7 @@ HTMLMAN = \
 	Gravity.1.html \
 	MagneticField.1.html \
 	Planimeter.1.html \
+	RhumbSolve.1.html \
 	TransverseMercatorProj.1.html
 
 PODFIX = sed -e 's%<head>%<head><link href="http://search.cpan.org/s/style.css" rel="stylesheet" type="text/css">%' -e 's%<code>\([^<>]*\)(\(.\))</code>%<a href="\1.\2.html">&</a>%'g
@@ -295,7 +339,7 @@ EXTRA_DIST = Makefile.mk CMakeLists.txt makeusage.sh \
 	GeoConvert.pod TransverseMercatorProj.pod \
 	CartConvert.pod ConicProj.pod GeodSolve.pod GeodesicProj.pod \
 	GeoidEval.pod Gravity.pod MagneticField.pod Planimeter.pod \
-	$(MANPAGES) $(USAGE) $(HTMLMAN) \
+	RhumbSolve.pod $(MANPAGES) $(USAGE) $(HTMLMAN) \
 	dummy.usage.in dummy.1.in dummy.1.html.in
 
 all: all-am
@@ -379,29 +423,14 @@ uninstall-man1:
 	} | 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)
-tags: TAGS
-TAGS:
+tags TAGS:
 
-ctags: CTAGS
-CTAGS:
+ctags CTAGS:
 
 cscope cscopelist:
 
 
 distdir: $(DISTFILES)
-	@list='$(MANS)'; if test -n "$$list"; then \
-	  list=`for p in $$list; do \
-	    if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
-	    if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
-	  if test -n "$$list" && \
-	    grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
-	    echo "error: found man pages containing the 'missing help2man' replacement text:" >&2; \
-	    grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/         /' >&2; \
-	    echo "       to fix them, install help2man, remove and regenerate the man pages;" >&2; \
-	    echo "       typically 'make maintainer-clean' will remove them" >&2; \
-	    exit 1; \
-	  else :; fi; \
-	else :; fi
 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
 	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
 	list='$(DISTFILES)'; \
@@ -540,17 +569,17 @@ uninstall-man: uninstall-man1
 .MAKE: install-am install-strip
 
 .PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	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-man1 \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic \
+	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-man1 install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs maintainer-clean maintainer-clean-generic \
 	maintainer-clean-local mostlyclean mostlyclean-generic \
-	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
-	uninstall-man uninstall-man1
+	mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
+	uninstall-am uninstall-man uninstall-man1
 
 
 all: man
@@ -567,7 +596,7 @@ htmlman: $(HTMLMAN)
 @HAVE_PODPROGS_TRUE@	$(POD2MAN) $^ > $@
 
 @HAVE_PODPROGS_TRUE at .pod.1.html:
- at HAVE_PODPROGS_TRUE@	pod2html --noindex --tile "$*(1)" $^ | $(PODFIX) > $@
+ at HAVE_PODPROGS_TRUE@	pod2html --noindex --title "$*(1)" $^ | $(PODFIX) > $@
 
 @HAVE_PODPROGS_FALSE at CartConvert.usage:
 @HAVE_PODPROGS_FALSE@	$(USAGECMD)
@@ -587,6 +616,8 @@ htmlman: $(HTMLMAN)
 @HAVE_PODPROGS_FALSE@	$(USAGECMD)
 @HAVE_PODPROGS_FALSE at Planimeter.usage:
 @HAVE_PODPROGS_FALSE@	$(USAGECMD)
+ at HAVE_PODPROGS_FALSE@RhumbSolve.usage:
+ at HAVE_PODPROGS_FALSE@	$(USAGECMD)
 @HAVE_PODPROGS_FALSE at TransverseMercatorProj.usage:
 @HAVE_PODPROGS_FALSE@	$(USAGECMD)
 
@@ -608,6 +639,8 @@ htmlman: $(HTMLMAN)
 @HAVE_PODPROGS_FALSE@	$(MANCMD)
 @HAVE_PODPROGS_FALSE at Planimeter.1:
 @HAVE_PODPROGS_FALSE@	$(MANCMD)
+ at HAVE_PODPROGS_FALSE@RhumbSolve.1:
+ at HAVE_PODPROGS_FALSE@	$(MANCMD)
 @HAVE_PODPROGS_FALSE at TransverseMercatorProj.1:
 @HAVE_PODPROGS_FALSE@	$(MANCMD)
 
@@ -629,6 +662,8 @@ htmlman: $(HTMLMAN)
 @HAVE_PODPROGS_FALSE@	$(HTMLCMD)
 @HAVE_PODPROGS_FALSE at Planimeter.1.html:
 @HAVE_PODPROGS_FALSE@	$(HTMLCMD)
+ at HAVE_PODPROGS_FALSE@RhumbSolve.1.html:
+ at HAVE_PODPROGS_FALSE@	$(HTMLCMD)
 @HAVE_PODPROGS_FALSE at TransverseMercatorProj.1.html:
 @HAVE_PODPROGS_FALSE@	$(HTMLCMD)
 
diff --git a/man/Makefile.mk b/man/Makefile.mk
index 5f54b57..d764fd7 100644
--- a/man/Makefile.mk
+++ b/man/Makefile.mk
@@ -7,6 +7,7 @@ PROGRAMS = CartConvert \
 	Gravity \
 	MagneticField \
 	Planimeter \
+	RhumbSolve \
 	TransverseMercatorProj
 
 MANPAGES = $(addsuffix .1,$(PROGRAMS))
diff --git a/man/Planimeter.1 b/man/Planimeter.1
index 07e1563..38a3f32 100644
--- a/man/Planimeter.1
+++ b/man/Planimeter.1
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.20)
+.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -38,6 +38,8 @@
 .    ds PI \(*p
 .    ds L" ``
 .    ds R" ''
+.    ds C`
+.    ds C'
 'br\}
 .\"
 .\" Escape single quotes in literal strings from groff's Unicode transform.
@@ -48,17 +50,24 @@
 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
 .\" entries marked with X<> in POD.  Of course, you'll have to process the
 .\" output yourself in some meaningful fashion.
-.ie \nF \{\
-.    de IX
-.    tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
 ..
-.    nr % 0
-.    rr F
-.\}
-.el \{\
-.    de IX
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+.    if \nF \{
+.        de IX
+.        tm Index:\\$1\t\\n%\t"\\$2"
 ..
+.        if !\nF==2 \{
+.            nr % 0
+.            nr F 2
+.        \}
+.    \}
 .\}
+.rr rF
 .\"
 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
@@ -124,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "PLANIMETER 1"
-.TH PLANIMETER 1 "2014-03-13" "GeographicLib 1.35" "GeographicLib Utilities"
+.TH PLANIMETER 1 "2014-08-08" "GeographicLib 1.37" "GeographicLib Utilities"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -134,6 +143,7 @@ Planimeter \-\- compute the area of geodesic polygons
 .SH "SYNOPSIS"
 .IX Header "SYNOPSIS"
 \&\fBPlanimeter\fR [ \fB\-r\fR ] [ \fB\-s\fR ] [ \fB\-l\fR ] [ \fB\-e\fR \fIa\fR \fIf\fR ]
+[ \fB\-p\fR \fIprec\fR ] [ \fB\-E\fR ] [ \fB\-Q\fR ]
 [ \fB\-\-comment\-delimiter\fR \fIcommentdelim\fR ]
 [ \fB\-\-version\fR | \fB\-h\fR | \fB\-\-help\fR ]
 [ \fB\-\-input\-file\fR \fIinfile\fR | \fB\-\-input\-string\fR \fIinstring\fR ]
@@ -143,7 +153,7 @@ Planimeter \-\- compute the area of geodesic polygons
 .IX Header "DESCRIPTION"
 Measure the area of a geodesic polygon.  Reads polygon vertices from
 standard input, one per line.  Vertices may be given as latitude and
-longitude, \s-1UTM/UPS\s0, or \s-1MGRS\s0 coordinates, interpreted in the same way as
+longitude, \s-1UTM/UPS,\s0 or \s-1MGRS\s0 coordinates, interpreted in the same way as
 \&\fIGeoConvert\fR\|(1).  (\s-1MGRS\s0 coordinates signify the center of the
 corresponding \s-1MGRS\s0 square.)  The end of input, a blank line, or a line
 which can't be interpreted as a vertex signals the end of one polygon
@@ -201,6 +211,25 @@ is allowed for \fIf\fR.  (Also, if \fIf\fR > 1, the flattening is set to
 \&\fIf\fR = 1/298.257223563.  If entering vertices as \s-1UTM/UPS\s0 or \s-1MGRS\s0
 coordinates, use the default ellipsoid, since the conversion of these
 coordinates to latitude and longitude always uses the \s-1WGS84\s0 parameters.
+.IP "\fB\-p\fR" 4
+.IX Item "-p"
+set the output precision to \fIprec\fR (default 6); the perimeter is given
+(in meters) with \fIprec\fR digits after the decimal point; the area is
+given (in meters^2) with (\fIprec\fR \- 5) digits after the decimal point.
+.IP "\fB\-E\fR" 4
+.IX Item "-E"
+use \*(L"exact\*(R" algorithms (based on elliptic integrals) for the geodesic
+calculations.  These are more accurate than the (default) series
+expansions for |\fIf\fR| > 0.02.  (But note that the implementation of
+areas in GeodesicExact uses a high order series and this is only
+accurate for modest flattenings.)  \fB\-E\fR and \fB\-Q\fR are mutually
+exclusive.
+.IP "\fB\-Q\fR" 4
+.IX Item "-Q"
+perform the calculation on the authalic sphere.  The area calculation is
+accurate even if the flattening is large, \fIprovided\fR the edges are
+sufficiently short.  The perimeter calculation is not accurate.  \fB\-E\fR
+and \fB\-Q\fR are mutually exclusive.
 .IP "\fB\-\-comment\-delimiter\fR" 4
 .IX Item "--comment-delimiter"
 set the comment delimiter to \fIcommentdelim\fR (e.g., \*(L"#\*(R" or \*(L"//\*(R").  If
@@ -240,10 +269,10 @@ Example (the area of the 100km \s-1MGRS\s0 square 18SWK)
 .PP
 .Vb 7
 \&   Planimeter <<EOF
-\&   18N 500000 4400000
-\&   18N 600000 4400000
-\&   18N 600000 4500000
-\&   18N 500000 4500000
+\&   18n 500000 4400000
+\&   18n 600000 4400000
+\&   18n 600000 4500000
+\&   18n 500000 4500000
 \&   EOF
 \&   => 4 400139.53295860 10007388597.1913
 .Ve
@@ -274,8 +303,9 @@ covered by the data (assuming the edges of the image are geodesics).
 .IX Header "SEE ALSO"
 \&\fIGeoConvert\fR\|(1).  The algorithm for the area of geodesic polygon is
 given in Section 6 of C. F. F. Karney, \fIAlgorithms for geodesics\fR,
-J. Geodesy 87, 43\-55 (2013); \s-1DOI\s0 http://dx.doi.org/10.1007/s00190\-012\-0578\-z <http://dx.doi.org/10.1007/s00190-012-0578-z>;
-addenda: http://geographiclib.sf.net/geod\-addenda.html <http://geographiclib.sf.net/geod-addenda.html>.
+J. Geodesy 87, 43\-55 (2013);
+\&\s-1DOI \s0<http://dx.doi.org/10.1007/s00190\-012\-0578\-z>;
+addenda: <http://geographiclib.sf.net/geod\-addenda.html>.
 .SH "AUTHOR"
 .IX Header "AUTHOR"
 \&\fBPlanimeter\fR was written by Charles Karney.
diff --git a/man/Planimeter.1.html b/man/Planimeter.1.html
index 7a6eb52..ff2a7dc 100644
--- a/man/Planimeter.1.html
+++ b/man/Planimeter.1.html
@@ -17,7 +17,7 @@
 
 <h1 id="SYNOPSIS">SYNOPSIS</h1>
 
-<p><b>Planimeter</b> [ <b>-r</b> ] [ <b>-s</b> ] [ <b>-l</b> ] [ <b>-e</b> <i>a</i> <i>f</i> ] [ <b>--comment-delimiter</b> <i>commentdelim</i> ] [ <b>--version</b> | <b>-h</b> | <b>--help</b> ] [ <b>--input-file</b> <i>infile</i> | <b>--input-string</b> <i>instring</i> ] [ <b>--line-separator</b> <i>linesep</i> ] [ <b>--output-file</b> <i>outfile</i> ]</p>
+<p><b>Planimeter</b> [ <b>-r</b> ] [ <b>-s</b> ] [ <b>-l</b> ] [ <b>-e</b> <i>a</i> <i>f</i> ] [ <b>-p</b> <i>prec</i> ] [ <b>-E</b> ] [ <b>-Q</b> ] [ <b>--comment-delimiter</b> <i>commentdelim</i> ] [ <b>--version</b> | <b>-h</b> | <b>--help</b> ] [ <b>--input-file</b> <i>infile</i> | <b>--input-string</b> <i>instring</i> ] [ <b>--line-separator</b> <i>linesep</i> ] [ <b>--output-file</b> <i>outfile</i> ]</p>
 
 <h1 id="DESCRIPTION">DESCRIPTION</h1>
 
@@ -59,6 +59,24 @@
 <p>specify the ellipsoid via <i>a</i> <i>f</i>; the equatorial radius is <i>a</i> and the flattening is <i>f</i>. Setting <i>f</i> = 0 results in a sphere. Specify <i>f</i> < 0 for a prolate ellipsoid. A simple fraction, e.g., 1/297, is allowed for <i>f</i>. (Also, if <i>f</i> > 1, the flattening is set to 1/<i>f</i>.) By default, the WGS84 ellipsoid is used, <i>a</i> = 6378137 m, <i>f</i> = 1/298.257223563. If entering vertices as UTM/UPS or MGRS coordinates, use the default ellip [...]
 
 </dd>
+<dt id="p"><b>-p</b></dt>
+<dd>
+
+<p>set the output precision to <i>prec</i> (default 6); the perimeter is given (in meters) with <i>prec</i> digits after the decimal point; the area is given (in meters^2) with (<i>prec</i> - 5) digits after the decimal point.</p>
+
+</dd>
+<dt id="E"><b>-E</b></dt>
+<dd>
+
+<p>use "exact" algorithms (based on elliptic integrals) for the geodesic calculations. These are more accurate than the (default) series expansions for |<i>f</i>| > 0.02. (But note that the implementation of areas in GeodesicExact uses a high order series and this is only accurate for modest flattenings.) <b>-E</b> and <b>-Q</b> are mutually exclusive.</p>
+
+</dd>
+<dt id="Q"><b>-Q</b></dt>
+<dd>
+
+<p>perform the calculation on the authalic sphere. The area calculation is accurate even if the flattening is large, <i>provided</i> the edges are sufficiently short. The perimeter calculation is not accurate. <b>-E</b> and <b>-Q</b> are mutually exclusive.</p>
+
+</dd>
 <dt id="comment-delimiter"><b>--comment-delimiter</b></dt>
 <dd>
 
@@ -114,10 +132,10 @@
 <p>Example (the area of the 100km MGRS square 18SWK)</p>
 
 <pre><code>   Planimeter <<EOF
-   18N 500000 4400000
-   18N 600000 4400000
-   18N 600000 4500000
-   18N 500000 4500000
+   18n 500000 4400000
+   18n 600000 4400000
+   18n 600000 4500000
+   18n 500000 4500000
    EOF
    => 4 400139.53295860 10007388597.1913</code></pre>
 
diff --git a/man/Planimeter.pod b/man/Planimeter.pod
index d78afca..6ea2e72 100644
--- a/man/Planimeter.pod
+++ b/man/Planimeter.pod
@@ -5,6 +5,7 @@ Planimeter -- compute the area of geodesic polygons
 =head1 SYNOPSIS
 
 B<Planimeter> [ B<-r> ] [ B<-s> ] [ B<-l> ] [ B<-e> I<a> I<f> ]
+[ B<-p> I<prec> ] [ B<-E> ] [ B<-Q> ]
 [ B<--comment-delimiter> I<commentdelim> ]
 [ B<--version> | B<-h> | B<--help> ]
 [ B<--input-file> I<infile> | B<--input-string> I<instring> ]
@@ -80,6 +81,28 @@ I<f> = 1/298.257223563.  If entering vertices as UTM/UPS or MGRS
 coordinates, use the default ellipsoid, since the conversion of these
 coordinates to latitude and longitude always uses the WGS84 parameters.
 
+=item B<-p>
+
+set the output precision to I<prec> (default 6); the perimeter is given
+(in meters) with I<prec> digits after the decimal point; the area is
+given (in meters^2) with (I<prec> - 5) digits after the decimal point.
+
+=item B<-E>
+
+use "exact" algorithms (based on elliptic integrals) for the geodesic
+calculations.  These are more accurate than the (default) series
+expansions for |I<f>| E<gt> 0.02.  (But note that the implementation of
+areas in GeodesicExact uses a high order series and this is only
+accurate for modest flattenings.)  B<-E> and B<-Q> are mutually
+exclusive.
+
+=item B<-Q>
+
+perform the calculation on the authalic sphere.  The area calculation is
+accurate even if the flattening is large, I<provided> the edges are
+sufficiently short.  The perimeter calculation is not accurate.  B<-E>
+and B<-Q> are mutually exclusive.
+
 =item B<--comment-delimiter>
 
 set the comment delimiter to I<commentdelim> (e.g., "#" or "//").  If
@@ -128,10 +151,10 @@ file name of "-" stands for standard output.
 Example (the area of the 100km MGRS square 18SWK)
 
    Planimeter <<EOF
-   18N 500000 4400000
-   18N 600000 4400000
-   18N 600000 4500000
-   18N 500000 4500000
+   18n 500000 4400000
+   18n 600000 4400000
+   18n 600000 4500000
+   18n 500000 4500000
    EOF
    => 4 400139.53295860 10007388597.1913
 
@@ -160,7 +183,8 @@ covered by the data (assuming the edges of the image are geodesics).
 
 GeoConvert(1).  The algorithm for the area of geodesic polygon is
 given in Section 6 of C. F. F. Karney, I<Algorithms for geodesics>,
-J. Geodesy 87, 43-55 (2013); DOI L<http://dx.doi.org/10.1007/s00190-012-0578-z>;
+J. Geodesy 87, 43-55 (2013);
+DOI L<http://dx.doi.org/10.1007/s00190-012-0578-z>;
 addenda: L<http://geographiclib.sf.net/geod-addenda.html>.
 
 =head1 AUTHOR
diff --git a/man/Planimeter.usage b/man/Planimeter.usage
index b96b12f..f4961d3 100644
--- a/man/Planimeter.usage
+++ b/man/Planimeter.usage
@@ -1,25 +1,25 @@
 int usage(int retval, bool brief) {
   if (brief)
     ( retval ? std::cerr : std::cout ) << "Usage:\n"
-"    Planimeter [ -r ] [ -s ] [ -l ] [ -e a f ] [ --comment-delimiter\n"
-"    commentdelim ] [ --version | -h | --help ] [ --input-file infile |\n"
-"    --input-string instring ] [ --line-separator linesep ] [ --output-file\n"
-"    outfile ]\n"
+"    Planimeter [ -r ] [ -s ] [ -l ] [ -e a f ] [ -p prec ] [ -E ] [ -Q ] [\n"
+"    --comment-delimiter commentdelim ] [ --version | -h | --help ] [\n"
+"    --input-file infile | --input-string instring ] [ --line-separator\n"
+"    linesep ] [ --output-file outfile ]\n"
 "\n"
 "For full documentation type:\n"
 "    Planimeter --help\n"
 "or visit:\n"
-"    http://geographiclib.sf.net/1.35/Planimeter.1.html\n";
+"    http://geographiclib.sf.net/1.37/Planimeter.1.html\n";
   else
     ( retval ? std::cerr : std::cout ) << "Man page:\n"
 "NAME\n"
 "       Planimeter -- compute the area of geodesic polygons\n"
 "\n"
 "SYNOPSIS\n"
-"       Planimeter [ -r ] [ -s ] [ -l ] [ -e a f ] [ --comment-delimiter\n"
-"       commentdelim ] [ --version | -h | --help ] [ --input-file infile |\n"
-"       --input-string instring ] [ --line-separator linesep ] [ --output-file\n"
-"       outfile ]\n"
+"       Planimeter [ -r ] [ -s ] [ -l ] [ -e a f ] [ -p prec ] [ -E ] [ -Q ] [\n"
+"       --comment-delimiter commentdelim ] [ --version | -h | --help ] [\n"
+"       --input-file infile | --input-string instring ] [ --line-separator\n"
+"       linesep ] [ --output-file outfile ]\n"
 "\n"
 "DESCRIPTION\n"
 "       Measure the area of a geodesic polygon.  Reads polygon vertices from\n"
@@ -79,6 +79,23 @@ int usage(int retval, bool brief) {
 "           these coordinates to latitude and longitude always uses the WGS84\n"
 "           parameters.\n"
 "\n"
+"       -p  set the output precision to prec (default 6); the perimeter is\n"
+"           given (in meters) with prec digits after the decimal point; the\n"
+"           area is given (in meters^2) with (prec - 5) digits after the\n"
+"           decimal point.\n"
+"\n"
+"       -E  use \"exact\" algorithms (based on elliptic integrals) for the\n"
+"           geodesic calculations.  These are more accurate than the (default)\n"
+"           series expansions for |f| > 0.02.  (But note that the\n"
+"           implementation of areas in GeodesicExact uses a high order series\n"
+"           and this is only accurate for modest flattenings.)  -E and -Q are\n"
+"           mutually exclusive.\n"
+"\n"
+"       -Q  perform the calculation on the authalic sphere.  The area\n"
+"           calculation is accurate even if the flattening is large, provided\n"
+"           the edges are sufficiently short.  The perimeter calculation is not\n"
+"           accurate.  -E and -Q are mutually exclusive.\n"
+"\n"
 "       --comment-delimiter\n"
 "           set the comment delimiter to commentdelim (e.g., \"#\" or \"//\").  If\n"
 "           set, the input lines will be scanned for this delimiter and, if\n"
@@ -116,10 +133,10 @@ int usage(int retval, bool brief) {
 "       Example (the area of the 100km MGRS square 18SWK)\n"
 "\n"
 "          Planimeter <<EOF\n"
-"          18N 500000 4400000\n"
-"          18N 600000 4400000\n"
-"          18N 600000 4500000\n"
-"          18N 500000 4500000\n"
+"          18n 500000 4400000\n"
+"          18n 600000 4400000\n"
+"          18n 600000 4500000\n"
+"          18n 500000 4500000\n"
 "          EOF\n"
 "          => 4 400139.53295860 10007388597.1913\n"
 "\n"
@@ -147,10 +164,8 @@ int usage(int retval, bool brief) {
 "SEE ALSO\n"
 "       GeoConvert(1).  The algorithm for the area of geodesic polygon is given\n"
 "       in Section 6 of C. F. F. Karney, Algorithms for geodesics, J. Geodesy\n"
-"       87, 43-55 (2013); DOI http://dx.doi.org/10.1007/s00190-012-0578-z\n"
-"       <http://dx.doi.org/10.1007/s00190-012-0578-z>; addenda:\n"
-"       http://geographiclib.sf.net/geod-addenda.html\n"
-"       <http://geographiclib.sf.net/geod-addenda.html>.\n"
+"       87, 43-55 (2013); DOI <http://dx.doi.org/10.1007/s00190-012-0578-z>;\n"
+"       addenda: <http://geographiclib.sf.net/geod-addenda.html>.\n"
 "\n"
 "AUTHOR\n"
 "       Planimeter was written by Charles Karney.\n"
diff --git a/man/RhumbSolve.1 b/man/RhumbSolve.1
new file mode 100644
index 0000000..377bd37
--- /dev/null
+++ b/man/RhumbSolve.1
@@ -0,0 +1,338 @@
+.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+.    if \nF \{
+.        de IX
+.        tm Index:\\$1\t\\n%\t"\\$2"
+..
+.        if !\nF==2 \{
+.            nr % 0
+.            nr F 2
+.        \}
+.    \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "RHUMBSOLVE 1"
+.TH RHUMBSOLVE 1 "2014-08-08" "GeographicLib 1.37" "GeographicLib Utilities"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+RhumbSolve \-\- perform rhumb line calculations
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBRhumbSolve\fR [ \fB\-i\fR | \fB\-l\fR \fIlat1\fR \fIlon1\fR \fIazi12\fR ]
+[ \fB\-e\fR \fIa\fR \fIf\fR ]
+[ \fB\-d\fR | \fB\-:\fR ] [ \fB\-f\fR ] [ \fB\-p\fR \fIprec\fR ] [ \fB\-s\fR ]
+[ \fB\-\-comment\-delimiter\fR \fIcommentdelim\fR ]
+[ \fB\-\-version\fR | \fB\-h\fR | \fB\-\-help\fR ]
+[ \fB\-\-input\-file\fR \fIinfile\fR | \fB\-\-input\-string\fR \fIinstring\fR ]
+[ \fB\-\-line\-separator\fR \fIlinesep\fR ]
+[ \fB\-\-output\-file\fR \fIoutfile\fR ]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The path with constant heading between two points on the ellipsoid at
+(\fIlat1\fR, \fIlon1\fR) and (\fIlat2\fR, \fIlon2\fR) is called the rhumb line or
+loxodrome.  Its length is \fIs12\fR and the rhumb line has a forward
+azimuth \fIazi12\fR along its length.  A point at a pole is treated as a
+point a tiny distance away from the pole on the given line of longitude.
+The longitude becomes indeterminate when a rhumb line passes through a
+pole, and \fBRhumbSolve\fR reports NaNs for the longitude in this case.
+.PP
+\&\fB\s-1NOTE:\s0\fR the rhumb line is \fBnot\fR the shortest path between two points;
+that is the geodesic and it is calculated by \fIGeodSolve\fR\|(1).
+.PP
+\&\fBRhumbSolve\fR operates in one of three modes:
+.IP "1." 4
+By default, \fBRhumbSolve\fR accepts lines on the standard input
+containing \fIlat1\fR \fIlon1\fR \fIazi12\fR \fIs12\fR and prints \fIlat2\fR \fIlon2\fR on
+standard output.  This is the direct calculation.
+.IP "2." 4
+Command line arguments \fB\-l\fR \fIlat1\fR \fIlon1\fR \fIazi12\fR specify a rhumb
+line.  \fBRhumbSolve\fR then accepts a sequence of \fIs12\fR values (one per
+line) on standard input and prints \fIlat2\fR \fIlon2\fR for each.  This
+generates a sequence of points on a rhumb line.
+.IP "3." 4
+With the \fB\-i\fR command line argument, \fBRhumbSolve\fR performs the inverse
+calculation.  It reads lines containing \fIlat1\fR \fIlon1\fR \fIlat2\fR \fIlon2\fR
+and prints the values of \fIazi12\fR \fIs12\fR for the corresponding shortest
+rhumb lines
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-i\fR" 4
+.IX Item "-i"
+perform an inverse calculation (see 3 above).
+.IP "\fB\-l\fR" 4
+.IX Item "-l"
+line mode (see 2 above); generate a sequence of points along the
+rhumb line specified by \fIlat1\fR \fIlon1\fR \fIazi12\fR.
+.IP "\fB\-e\fR" 4
+.IX Item "-e"
+specify the ellipsoid via \fIa\fR \fIf\fR; the equatorial radius is \fIa\fR and
+the flattening is \fIf\fR.  Setting \fIf\fR = 0 results in a sphere.  Specify
+\&\fIf\fR < 0 for a prolate ellipsoid.  A simple fraction, e.g., 1/297,
+is allowed for \fIf\fR.  (Also, if \fIf\fR > 1, the flattening is set to
+1/\fIf\fR.)  By default, the \s-1WGS84\s0 ellipsoid is used, \fIa\fR = 6378137 m,
+\&\fIf\fR = 1/298.257223563.
+.IP "\fB\-d\fR" 4
+.IX Item "-d"
+output angles as degrees, minutes, seconds instead of decimal degrees.
+.IP "\fB\-:\fR" 4
+.IX Item "-:"
+like \fB\-d\fR, except use : as a separator instead of the d, ', and "
+delimiters.
+.IP "\fB\-p\fR" 4
+.IX Item "-p"
+set the output precision to \fIprec\fR (default 3); \fIprec\fR is the
+precision relative to 1 m.  See \*(L"\s-1PRECISION\*(R"\s0.
+.IP "\fB\-s\fR" 4
+.IX Item "-s"
+By default, the rhumb line calculations are carried out exactly in terms
+of elliptic integrals.  This includes the use of the addition theorem
+for elliptic integrals to compute the divided difference of the
+isometric and rectifying latitudes.  If \fB\-s\fR is supplied this divided
+difference is computed using Krueger series for the transverse Mercator
+projection which is only accurate for |\fIf\fR| < 0.01.  See
+\&\*(L"\s-1ACCURACY\*(R"\s0.
+.IP "\fB\-\-comment\-delimiter\fR" 4
+.IX Item "--comment-delimiter"
+set the comment delimiter to \fIcommentdelim\fR (e.g., \*(L"#\*(R" or \*(L"//\*(R").  If
+set, the input lines will be scanned for this delimiter and, if found,
+the delimiter and the rest of the line will be removed prior to
+processing and subsequently appended to the output line (separated by a
+space).
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+print version and exit.
+.IP "\fB\-h\fR" 4
+.IX Item "-h"
+print usage and exit.
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+print full documentation and exit.
+.IP "\fB\-\-input\-file\fR" 4
+.IX Item "--input-file"
+read input from the file \fIinfile\fR instead of from standard input; a file
+name of \*(L"\-\*(R" stands for standard input.
+.IP "\fB\-\-input\-string\fR" 4
+.IX Item "--input-string"
+read input from the string \fIinstring\fR instead of from standard input.
+All occurrences of the line separator character (default is a semicolon)
+in \fIinstring\fR are converted to newlines before the reading begins.
+.IP "\fB\-\-line\-separator\fR" 4
+.IX Item "--line-separator"
+set the line separator character to \fIlinesep\fR.  By default this is a
+semicolon.
+.IP "\fB\-\-output\-file\fR" 4
+.IX Item "--output-file"
+write output to the file \fIoutfile\fR instead of to standard output; a
+file name of \*(L"\-\*(R" stands for standard output.
+.SH "INPUT"
+.IX Header "INPUT"
+\&\fBRhumbSolve\fR measures all angles in degrees and all lengths (\fIs12\fR)
+in meters.  On input angles (latitude, longitude, azimuth) can be as
+decimal degrees or degrees (d), minutes ('), seconds (\*(L").  A decimal
+point can only appear in the least significant component and the
+designator (d, ', or \*(R") for this component is optional; thus \f(CW\*(C`40d30\*(C'\fR,
+\&\f(CW\*(C`40d30\*(Aq\*(C'\fR, \f(CW\*(C`40.5d\*(C'\fR, and \f(CW40.5\fR are all equivalent.  By default,
+latitude precedes longitude for each point; however on input either
+may be given first by appending (or prepending) \fIN\fR or \fIS\fR to the
+latitude and \fIE\fR or \fIW\fR to the longitude.  Azimuths are measured
+clockwise from north; however this may be overridden with \fIE\fR or
+\&\fIW\fR.
+.PP
+See the \f(CW\*(C`QUOTING\*(C'\fR section of \fIGeoConvert\fR\|(1) for how to quote the \s-1DMS\s0
+designators ' and ".
+.SH "PRECISION"
+.IX Header "PRECISION"
+\&\fIprec\fR gives precision of the output with \fIprec\fR = 0 giving 1 m
+precision, \fIprec\fR = 3 giving 1 mm precision, etc.  \fIprec\fR is the
+number of digits after the decimal point for lengths.  For decimal
+degrees, the number of digits after the decimal point is \fIprec\fR + 5.
+For \s-1DMS \s0(degree, minute, seconds) output, the number of digits after the
+decimal point in the seconds component is \fIprec\fR + 1.  The minimum
+value of \fIprec\fR is 0 and the maximum is 10.
+.SH "ERRORS"
+.IX Header "ERRORS"
+An illegal line of input will print an error message to standard output
+beginning with \f(CW\*(C`ERROR:\*(C'\fR and causes \fBRhumbSolve\fR to return an exit code
+of 1.  However, an error does not cause \fBRhumbSolve\fR to terminate;
+following lines will be converted.
+.SH "ACCURACY"
+.IX Header "ACCURACY"
+The algorithm used by \fBRhumbSolve\fR uses exact formulas for converting
+between the latitude, rectifying latitude (\fImu\fR), and isometric
+latitude (\fIpsi\fR).  These formulas are accurate for any value of the
+flattening.  The computation of rhumb lines involves the ratio (\fIpsi1\fR
+\&\- \fIpsi2\fR) / (\fImu1\fR \- \fImu2\fR) and this is subject to large round-off
+errors if \fIlat1\fR is close to \fIlat2\fR.  So this ratio is computed using
+divided differences using one of two methods: by default, this uses the
+addition theorem for elliptic integrals (accurate for all values of
+\&\fIf\fR); however, with the \fB\-s\fR options, it is computed using the series
+expansions used by \fITransverseMercatorProj\fR\|(1) for the conversions between
+rectifying and conformal latitudes (accurate for |\fIf\fR| < 0.01).
+For the \s-1WGS84\s0 ellipsoid, the error is about 10 nanometers using either
+method.
+.SH "EXAMPLES"
+.IX Header "EXAMPLES"
+Route from \s-1JFK\s0 Airport to Singapore Changi Airport:
+.PP
+.Vb 2
+\&   echo 40:38:23N 073:46:44W 01:21:33N 103:59:22E |
+\&   RhumbSolve \-i \-: \-p 0
+\&
+\&   103:34:58.2 18523563
+.Ve
+.PP
+N.B. This is \fBnot\fR the route typically taken by aircraft because it's
+considerably longer than the geodesic given by \fIGeodSolve\fR\|(1).
+.PP
+Waypoints on the route at intervals of 2000km:
+.PP
+.Vb 2
+\&   for ((i = 0; i <= 20; i += 2)); do echo ${i}000000;done |
+\&   RhumbSolve \-l 40:38:23N 073:46:44W 103:34:58.2 \-: \-p 0
+\&
+\&   40:38:23.0N 073:46:44.0W
+\&   36:24:30.3N 051:28:26.4W
+\&   32:10:26.8N 030:20:57.3W
+\&   27:56:13.2N 010:10:54.2W
+\&   23:41:50.1N 009:12:45.5E
+\&   19:27:18.7N 027:59:22.1E
+\&   15:12:40.2N 046:17:01.1E
+\&   10:57:55.9N 064:12:52.8E
+\&   06:43:07.3N 081:53:28.8E
+\&   02:28:16.2N 099:24:54.5E
+\&   01:46:36.0S 116:52:59.7E
+.Ve
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIGeoConvert\fR\|(1), \fIGeodSolve\fR\|(1), \fITransverseMercatorProj\fR\|(1).
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+\&\fBRhumbSolve\fR was written by Charles Karney.
+.SH "HISTORY"
+.IX Header "HISTORY"
+\&\fBRhumbSolve\fR was added to GeographicLib, <http://geographiclib.sf.net>,
+in version 1.37.
diff --git a/man/RhumbSolve.1.html b/man/RhumbSolve.1.html
new file mode 100644
index 0000000..daffce5
--- /dev/null
+++ b/man/RhumbSolve.1.html
@@ -0,0 +1,202 @@
+<?xml version="1.0" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><link href="http://search.cpan.org/s/style.css" rel="stylesheet" type="text/css">
+<title>RhumbSolve(1)</title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root at localhost" />
+</head>
+
+<body style="background-color: white">
+
+
+
+<h1 id="NAME">NAME</h1>
+
+<p>RhumbSolve -- perform rhumb line calculations</p>
+
+<h1 id="SYNOPSIS">SYNOPSIS</h1>
+
+<p><b>RhumbSolve</b> [ <b>-i</b> | <b>-l</b> <i>lat1</i> <i>lon1</i> <i>azi12</i> ] [ <b>-e</b> <i>a</i> <i>f</i> ] [ <b>-d</b> | <b>-:</b> ] [ <b>-f</b> ] [ <b>-p</b> <i>prec</i> ] [ <b>-s</b> ] [ <b>--comment-delimiter</b> <i>commentdelim</i> ] [ <b>--version</b> | <b>-h</b> | <b>--help</b> ] [ <b>--input-file</b> <i>infile</i> | <b>--input-string</b> <i>instring</i> ] [ <b>--line-separator</b> <i>linesep</i> ] [ <b>--output-file</b> <i>outfile</i> ]</p>
+
+<h1 id="DESCRIPTION">DESCRIPTION</h1>
+
+<p>The path with constant heading between two points on the ellipsoid at (<i>lat1</i>, <i>lon1</i>) and (<i>lat2</i>, <i>lon2</i>) is called the rhumb line or loxodrome. Its length is <i>s12</i> and the rhumb line has a forward azimuth <i>azi12</i> along its length. A point at a pole is treated as a point a tiny distance away from the pole on the given line of longitude. The longitude becomes indeterminate when a rhumb line passes through a pole, and <b>RhumbSolve</b> reports NaNs for th [...]
+
+<p><b>NOTE:</b> the rhumb line is <b>not</b> the shortest path between two points; that is the geodesic and it is calculated by GeodSolve(1).</p>
+
+<p><b>RhumbSolve</b> operates in one of three modes:</p>
+
+<ol>
+
+<li><p>By default, <b>RhumbSolve</b> accepts lines on the standard input containing <i>lat1</i> <i>lon1</i> <i>azi12</i> <i>s12</i> and prints <i>lat2</i> <i>lon2</i> on standard output. This is the direct calculation.</p>
+
+</li>
+<li><p>Command line arguments <b>-l</b> <i>lat1</i> <i>lon1</i> <i>azi12</i> specify a rhumb line. <b>RhumbSolve</b> then accepts a sequence of <i>s12</i> values (one per line) on standard input and prints <i>lat2</i> <i>lon2</i> for each. This generates a sequence of points on a rhumb line.</p>
+
+</li>
+<li><p>With the <b>-i</b> command line argument, <b>RhumbSolve</b> performs the inverse calculation. It reads lines containing <i>lat1</i> <i>lon1</i> <i>lat2</i> <i>lon2</i> and prints the values of <i>azi12</i> <i>s12</i> for the corresponding shortest rhumb lines</p>
+
+</li>
+</ol>
+
+<h1 id="OPTIONS">OPTIONS</h1>
+
+<dl>
+
+<dt id="i"><b>-i</b></dt>
+<dd>
+
+<p>perform an inverse calculation (see 3 above).</p>
+
+</dd>
+<dt id="l"><b>-l</b></dt>
+<dd>
+
+<p>line mode (see 2 above); generate a sequence of points along the rhumb line specified by <i>lat1</i> <i>lon1</i> <i>azi12</i>.</p>
+
+</dd>
+<dt id="e"><b>-e</b></dt>
+<dd>
+
+<p>specify the ellipsoid via <i>a</i> <i>f</i>; the equatorial radius is <i>a</i> and the flattening is <i>f</i>. Setting <i>f</i> = 0 results in a sphere. Specify <i>f</i> < 0 for a prolate ellipsoid. A simple fraction, e.g., 1/297, is allowed for <i>f</i>. (Also, if <i>f</i> > 1, the flattening is set to 1/<i>f</i>.) By default, the WGS84 ellipsoid is used, <i>a</i> = 6378137 m, <i>f</i> = 1/298.257223563.</p>
+
+</dd>
+<dt id="d"><b>-d</b></dt>
+<dd>
+
+<p>output angles as degrees, minutes, seconds instead of decimal degrees.</p>
+
+</dd>
+<dt id="pod"><b>-:</b></dt>
+<dd>
+
+<p>like <b>-d</b>, except use : as a separator instead of the d, ', and " delimiters.</p>
+
+</dd>
+<dt id="p"><b>-p</b></dt>
+<dd>
+
+<p>set the output precision to <i>prec</i> (default 3); <i>prec</i> is the precision relative to 1 m. See <a href="#PRECISION">"PRECISION"</a>.</p>
+
+</dd>
+<dt id="s"><b>-s</b></dt>
+<dd>
+
+<p>By default, the rhumb line calculations are carried out exactly in terms of elliptic integrals. This includes the use of the addition theorem for elliptic integrals to compute the divided difference of the isometric and rectifying latitudes. If <b>-s</b> is supplied this divided difference is computed using Krueger series for the transverse Mercator projection which is only accurate for |<i>f</i>| < 0.01. See <a href="#ACCURACY">"ACCURACY"</a>.</p>
+
+</dd>
+<dt id="comment-delimiter"><b>--comment-delimiter</b></dt>
+<dd>
+
+<p>set the comment delimiter to <i>commentdelim</i> (e.g., "#" or "//"). If set, the input lines will be scanned for this delimiter and, if found, the delimiter and the rest of the line will be removed prior to processing and subsequently appended to the output line (separated by a space).</p>
+
+</dd>
+<dt id="version"><b>--version</b></dt>
+<dd>
+
+<p>print version and exit.</p>
+
+</dd>
+<dt id="h"><b>-h</b></dt>
+<dd>
+
+<p>print usage and exit.</p>
+
+</dd>
+<dt id="help"><b>--help</b></dt>
+<dd>
+
+<p>print full documentation and exit.</p>
+
+</dd>
+<dt id="input-file"><b>--input-file</b></dt>
+<dd>
+
+<p>read input from the file <i>infile</i> instead of from standard input; a file name of "-" stands for standard input.</p>
+
+</dd>
+<dt id="input-string"><b>--input-string</b></dt>
+<dd>
+
+<p>read input from the string <i>instring</i> instead of from standard input. All occurrences of the line separator character (default is a semicolon) in <i>instring</i> are converted to newlines before the reading begins.</p>
+
+</dd>
+<dt id="line-separator"><b>--line-separator</b></dt>
+<dd>
+
+<p>set the line separator character to <i>linesep</i>. By default this is a semicolon.</p>
+
+</dd>
+<dt id="output-file"><b>--output-file</b></dt>
+<dd>
+
+<p>write output to the file <i>outfile</i> instead of to standard output; a file name of "-" stands for standard output.</p>
+
+</dd>
+</dl>
+
+<h1 id="INPUT">INPUT</h1>
+
+<p><b>RhumbSolve</b> measures all angles in degrees and all lengths (<i>s12</i>) in meters. On input angles (latitude, longitude, azimuth) can be as decimal degrees or degrees (d), minutes ('), seconds ("). A decimal point can only appear in the least significant component and the designator (d, ', or ") for this component is optional; thus <code>40d30</code>, <code>40d30'</code>, <code>40.5d</code>, and <code>40.5</code> are all equivalent. By default, latitude pre [...]
+
+<p>See the <code>QUOTING</code> section of GeoConvert(1) for how to quote the DMS designators ' and ".</p>
+
+<h1 id="PRECISION">PRECISION</h1>
+
+<p><i>prec</i> gives precision of the output with <i>prec</i> = 0 giving 1 m precision, <i>prec</i> = 3 giving 1 mm precision, etc. <i>prec</i> is the number of digits after the decimal point for lengths. For decimal degrees, the number of digits after the decimal point is <i>prec</i> + 5. For DMS (degree, minute, seconds) output, the number of digits after the decimal point in the seconds component is <i>prec</i> + 1. The minimum value of <i>prec</i> is 0 and the maximum is 10.</p>
+
+<h1 id="ERRORS">ERRORS</h1>
+
+<p>An illegal line of input will print an error message to standard output beginning with <code>ERROR:</code> and causes <b>RhumbSolve</b> to return an exit code of 1. However, an error does not cause <b>RhumbSolve</b> to terminate; following lines will be converted.</p>
+
+<h1 id="ACCURACY">ACCURACY</h1>
+
+<p>The algorithm used by <b>RhumbSolve</b> uses exact formulas for converting between the latitude, rectifying latitude (<i>mu</i>), and isometric latitude (<i>psi</i>). These formulas are accurate for any value of the flattening. The computation of rhumb lines involves the ratio (<i>psi1</i> - <i>psi2</i>) / (<i>mu1</i> - <i>mu2</i>) and this is subject to large round-off errors if <i>lat1</i> is close to <i>lat2</i>. So this ratio is computed using divided differences using one of two  [...]
+
+<h1 id="EXAMPLES">EXAMPLES</h1>
+
+<p>Route from JFK Airport to Singapore Changi Airport:</p>
+
+<pre><code>   echo 40:38:23N 073:46:44W 01:21:33N 103:59:22E |
+   RhumbSolve -i -: -p 0
+
+   103:34:58.2 18523563</code></pre>
+
+<p>N.B. This is <b>not</b> the route typically taken by aircraft because it's considerably longer than the geodesic given by GeodSolve(1).</p>
+
+<p>Waypoints on the route at intervals of 2000km:</p>
+
+<pre><code>   for ((i = 0; i <= 20; i += 2)); do echo ${i}000000;done |
+   RhumbSolve -l 40:38:23N 073:46:44W 103:34:58.2 -: -p 0
+
+   40:38:23.0N 073:46:44.0W
+   36:24:30.3N 051:28:26.4W
+   32:10:26.8N 030:20:57.3W
+   27:56:13.2N 010:10:54.2W
+   23:41:50.1N 009:12:45.5E
+   19:27:18.7N 027:59:22.1E
+   15:12:40.2N 046:17:01.1E
+   10:57:55.9N 064:12:52.8E
+   06:43:07.3N 081:53:28.8E
+   02:28:16.2N 099:24:54.5E
+   01:46:36.0S 116:52:59.7E</code></pre>
+
+<h1 id="SEE-ALSO">SEE ALSO</h1>
+
+<p>GeoConvert(1), GeodSolve(1), TransverseMercatorProj(1).</p>
+
+<h1 id="AUTHOR">AUTHOR</h1>
+
+<p><b>RhumbSolve</b> was written by Charles Karney.</p>
+
+<h1 id="HISTORY">HISTORY</h1>
+
+<p><b>RhumbSolve</b> was added to GeographicLib, <a href="http://geographiclib.sf.net">http://geographiclib.sf.net</a>, in version 1.37.</p>
+
+
+</body>
+
+</html>
+
+
diff --git a/man/RhumbSolve.pod b/man/RhumbSolve.pod
new file mode 100644
index 0000000..61ef335
--- /dev/null
+++ b/man/RhumbSolve.pod
@@ -0,0 +1,234 @@
+=head1 NAME
+
+RhumbSolve -- perform rhumb line calculations
+
+=head1 SYNOPSIS
+
+B<RhumbSolve> [ B<-i> | B<-l> I<lat1> I<lon1> I<azi12> ]
+[ B<-e> I<a> I<f> ]
+[ B<-d> | B<-:> ] [ B<-f> ] [ B<-p> I<prec> ] [ B<-s> ]
+[ B<--comment-delimiter> I<commentdelim> ]
+[ B<--version> | B<-h> | B<--help> ]
+[ B<--input-file> I<infile> | B<--input-string> I<instring> ]
+[ B<--line-separator> I<linesep> ]
+[ B<--output-file> I<outfile> ]
+
+=head1 DESCRIPTION
+
+The path with constant heading between two points on the ellipsoid at
+(I<lat1>, I<lon1>) and (I<lat2>, I<lon2>) is called the rhumb line or
+loxodrome.  Its length is I<s12> and the rhumb line has a forward
+azimuth I<azi12> along its length.  A point at a pole is treated as a
+point a tiny distance away from the pole on the given line of longitude.
+The longitude becomes indeterminate when a rhumb line passes through a
+pole, and B<RhumbSolve> reports NaNs for the longitude in this case.
+
+B<NOTE:> the rhumb line is B<not> the shortest path between two points;
+that is the geodesic and it is calculated by GeodSolve(1).
+
+B<RhumbSolve> operates in one of three modes:
+
+=over
+
+=item 1.
+
+By default, B<RhumbSolve> accepts lines on the standard input
+containing I<lat1> I<lon1> I<azi12> I<s12> and prints I<lat2> I<lon2> on
+standard output.  This is the direct calculation.
+
+=item 2.
+
+Command line arguments B<-l> I<lat1> I<lon1> I<azi12> specify a rhumb
+line.  B<RhumbSolve> then accepts a sequence of I<s12> values (one per
+line) on standard input and prints I<lat2> I<lon2> for each.  This
+generates a sequence of points on a rhumb line.
+
+=item 3.
+
+With the B<-i> command line argument, B<RhumbSolve> performs the inverse
+calculation.  It reads lines containing I<lat1> I<lon1> I<lat2> I<lon2>
+and prints the values of I<azi12> I<s12> for the corresponding shortest
+rhumb lines
+
+=back
+
+=head1 OPTIONS
+
+=over
+
+=item B<-i>
+
+perform an inverse calculation (see 3 above).
+
+=item B<-l>
+
+line mode (see 2 above); generate a sequence of points along the
+rhumb line specified by I<lat1> I<lon1> I<azi12>.
+
+=item B<-e>
+
+specify the ellipsoid via I<a> I<f>; the equatorial radius is I<a> and
+the flattening is I<f>.  Setting I<f> = 0 results in a sphere.  Specify
+I<f> E<lt> 0 for a prolate ellipsoid.  A simple fraction, e.g., 1/297,
+is allowed for I<f>.  (Also, if I<f> E<gt> 1, the flattening is set to
+1/I<f>.)  By default, the WGS84 ellipsoid is used, I<a> = 6378137 m,
+I<f> = 1/298.257223563.
+
+=item B<-d>
+
+output angles as degrees, minutes, seconds instead of decimal degrees.
+
+=item B<-:>
+
+like B<-d>, except use : as a separator instead of the d, ', and "
+delimiters.
+
+=item B<-p>
+
+set the output precision to I<prec> (default 3); I<prec> is the
+precision relative to 1 m.  See L</PRECISION>.
+
+=item B<-s>
+
+By default, the rhumb line calculations are carried out exactly in terms
+of elliptic integrals.  This includes the use of the addition theorem
+for elliptic integrals to compute the divided difference of the
+isometric and rectifying latitudes.  If B<-s> is supplied this divided
+difference is computed using Krueger series for the transverse Mercator
+projection which is only accurate for |I<f>| E<lt> 0.01.  See
+L</ACCURACY>.
+
+=item B<--comment-delimiter>
+
+set the comment delimiter to I<commentdelim> (e.g., "#" or "//").  If
+set, the input lines will be scanned for this delimiter and, if found,
+the delimiter and the rest of the line will be removed prior to
+processing and subsequently appended to the output line (separated by a
+space).
+
+=item B<--version>
+
+print version and exit.
+
+=item B<-h>
+
+print usage and exit.
+
+=item B<--help>
+
+print full documentation and exit.
+
+=item B<--input-file>
+
+read input from the file I<infile> instead of from standard input; a file
+name of "-" stands for standard input.
+
+=item B<--input-string>
+
+read input from the string I<instring> instead of from standard input.
+All occurrences of the line separator character (default is a semicolon)
+in I<instring> are converted to newlines before the reading begins.
+
+=item B<--line-separator>
+
+set the line separator character to I<linesep>.  By default this is a
+semicolon.
+
+=item B<--output-file>
+
+write output to the file I<outfile> instead of to standard output; a
+file name of "-" stands for standard output.
+
+=back
+
+=head1 INPUT
+
+B<RhumbSolve> measures all angles in degrees and all lengths (I<s12>)
+in meters.  On input angles (latitude, longitude, azimuth) can be as
+decimal degrees or degrees (d), minutes ('), seconds (").  A decimal
+point can only appear in the least significant component and the
+designator (d, ', or ") for this component is optional; thus C<40d30>,
+C<40d30'>, C<40.5d>, and C<40.5> are all equivalent.  By default,
+latitude precedes longitude for each point; however on input either
+may be given first by appending (or prepending) I<N> or I<S> to the
+latitude and I<E> or I<W> to the longitude.  Azimuths are measured
+clockwise from north; however this may be overridden with I<E> or
+I<W>.
+
+See the C<QUOTING> section of GeoConvert(1) for how to quote the DMS
+designators ' and ".
+
+=head1 PRECISION
+
+I<prec> gives precision of the output with I<prec> = 0 giving 1 m
+precision, I<prec> = 3 giving 1 mm precision, etc.  I<prec> is the
+number of digits after the decimal point for lengths.  For decimal
+degrees, the number of digits after the decimal point is I<prec> + 5.
+For DMS (degree, minute, seconds) output, the number of digits after the
+decimal point in the seconds component is I<prec> + 1.  The minimum
+value of I<prec> is 0 and the maximum is 10.
+
+=head1 ERRORS
+
+An illegal line of input will print an error message to standard output
+beginning with C<ERROR:> and causes B<RhumbSolve> to return an exit code
+of 1.  However, an error does not cause B<RhumbSolve> to terminate;
+following lines will be converted.
+
+=head1 ACCURACY
+
+The algorithm used by B<RhumbSolve> uses exact formulas for converting
+between the latitude, rectifying latitude (I<mu>), and isometric
+latitude (I<psi>).  These formulas are accurate for any value of the
+flattening.  The computation of rhumb lines involves the ratio (I<psi1>
+- I<psi2>) / (I<mu1> - I<mu2>) and this is subject to large round-off
+errors if I<lat1> is close to I<lat2>.  So this ratio is computed using
+divided differences using one of two methods: by default, this uses the
+addition theorem for elliptic integrals (accurate for all values of
+I<f>); however, with the B<-s> options, it is computed using the series
+expansions used by TransverseMercatorProj(1) for the conversions between
+rectifying and conformal latitudes (accurate for |I<f>| E<lt> 0.01).
+For the WGS84 ellipsoid, the error is about 10 nanometers using either
+method.
+
+=head1 EXAMPLES
+
+Route from JFK Airport to Singapore Changi Airport:
+
+   echo 40:38:23N 073:46:44W 01:21:33N 103:59:22E |
+   RhumbSolve -i -: -p 0
+
+   103:34:58.2 18523563
+
+N.B. This is B<not> the route typically taken by aircraft because it's
+considerably longer than the geodesic given by GeodSolve(1).
+
+Waypoints on the route at intervals of 2000km:
+
+   for ((i = 0; i <= 20; i += 2)); do echo ${i}000000;done |
+   RhumbSolve -l 40:38:23N 073:46:44W 103:34:58.2 -: -p 0
+
+   40:38:23.0N 073:46:44.0W
+   36:24:30.3N 051:28:26.4W
+   32:10:26.8N 030:20:57.3W
+   27:56:13.2N 010:10:54.2W
+   23:41:50.1N 009:12:45.5E
+   19:27:18.7N 027:59:22.1E
+   15:12:40.2N 046:17:01.1E
+   10:57:55.9N 064:12:52.8E
+   06:43:07.3N 081:53:28.8E
+   02:28:16.2N 099:24:54.5E
+   01:46:36.0S 116:52:59.7E
+
+=head1 SEE ALSO
+
+GeoConvert(1), GeodSolve(1), TransverseMercatorProj(1).
+
+=head1 AUTHOR
+
+B<RhumbSolve> was written by Charles Karney.
+
+=head1 HISTORY
+
+B<RhumbSolve> was added to GeographicLib, L<http://geographiclib.sf.net>,
+in version 1.37.
diff --git a/man/RhumbSolve.usage b/man/RhumbSolve.usage
new file mode 100644
index 0000000..4c7317f
--- /dev/null
+++ b/man/RhumbSolve.usage
@@ -0,0 +1,198 @@
+int usage(int retval, bool brief) {
+  if (brief)
+    ( retval ? std::cerr : std::cout ) << "Usage:\n"
+"    RhumbSolve [ -i | -l lat1 lon1 azi12 ] [ -e a f ] [ -d | -: ] [ -f ] [\n"
+"    -p prec ] [ -s ] [ --comment-delimiter commentdelim ] [ --version | -h\n"
+"    | --help ] [ --input-file infile | --input-string instring ] [\n"
+"    --line-separator linesep ] [ --output-file outfile ]\n"
+"\n"
+"For full documentation type:\n"
+"    RhumbSolve --help\n"
+"or visit:\n"
+"    http://geographiclib.sf.net/1.37/RhumbSolve.1.html\n";
+  else
+    ( retval ? std::cerr : std::cout ) << "Man page:\n"
+"NAME\n"
+"       RhumbSolve -- perform rhumb line calculations\n"
+"\n"
+"SYNOPSIS\n"
+"       RhumbSolve [ -i | -l lat1 lon1 azi12 ] [ -e a f ] [ -d | -: ] [ -f ] [\n"
+"       -p prec ] [ -s ] [ --comment-delimiter commentdelim ] [ --version | -h\n"
+"       | --help ] [ --input-file infile | --input-string instring ] [\n"
+"       --line-separator linesep ] [ --output-file outfile ]\n"
+"\n"
+"DESCRIPTION\n"
+"       The path with constant heading between two points on the ellipsoid at\n"
+"       (lat1, lon1) and (lat2, lon2) is called the rhumb line or loxodrome.\n"
+"       Its length is s12 and the rhumb line has a forward azimuth azi12 along\n"
+"       its length.  A point at a pole is treated as a point a tiny distance\n"
+"       away from the pole on the given line of longitude.  The longitude\n"
+"       becomes indeterminate when a rhumb line passes through a pole, and\n"
+"       RhumbSolve reports NaNs for the longitude in this case.\n"
+"\n"
+"       NOTE: the rhumb line is not the shortest path between two points; that\n"
+"       is the geodesic and it is calculated by GeodSolve(1).\n"
+"\n"
+"       RhumbSolve operates in one of three modes:\n"
+"\n"
+"       1.  By default, RhumbSolve accepts lines on the standard input\n"
+"           containing lat1 lon1 azi12 s12 and prints lat2 lon2 on standard\n"
+"           output.  This is the direct calculation.\n"
+"\n"
+"       2.  Command line arguments -l lat1 lon1 azi12 specify a rhumb line.\n"
+"           RhumbSolve then accepts a sequence of s12 values (one per line) on\n"
+"           standard input and prints lat2 lon2 for each.  This generates a\n"
+"           sequence of points on a rhumb line.\n"
+"\n"
+"       3.  With the -i command line argument, RhumbSolve performs the inverse\n"
+"           calculation.  It reads lines containing lat1 lon1 lat2 lon2 and\n"
+"           prints the values of azi12 s12 for the corresponding shortest rhumb\n"
+"           lines\n"
+"\n"
+"OPTIONS\n"
+"       -i  perform an inverse calculation (see 3 above).\n"
+"\n"
+"       -l  line mode (see 2 above); generate a sequence of points along the\n"
+"           rhumb line specified by lat1 lon1 azi12.\n"
+"\n"
+"       -e  specify the ellipsoid via a f; the equatorial radius is a and the\n"
+"           flattening is f.  Setting f = 0 results in a sphere.  Specify f < 0\n"
+"           for a prolate ellipsoid.  A simple fraction, e.g., 1/297, is\n"
+"           allowed for f.  (Also, if f > 1, the flattening is set to 1/f.)  By\n"
+"           default, the WGS84 ellipsoid is used, a = 6378137 m, f =\n"
+"           1/298.257223563.\n"
+"\n"
+"       -d  output angles as degrees, minutes, seconds instead of decimal\n"
+"           degrees.\n"
+"\n"
+"       -:  like -d, except use : as a separator instead of the d, ', and \"\n"
+"           delimiters.\n"
+"\n"
+"       -p  set the output precision to prec (default 3); prec is the precision\n"
+"           relative to 1 m.  See \"PRECISION\".\n"
+"\n"
+"       -s  By default, the rhumb line calculations are carried out exactly in\n"
+"           terms of elliptic integrals.  This includes the use of the addition\n"
+"           theorem for elliptic integrals to compute the divided difference of\n"
+"           the isometric and rectifying latitudes.  If -s is supplied this\n"
+"           divided difference is computed using Krueger series for the\n"
+"           transverse Mercator projection which is only accurate for |f| <\n"
+"           0.01.  See \"ACCURACY\".\n"
+"\n"
+"       --comment-delimiter\n"
+"           set the comment delimiter to commentdelim (e.g., \"#\" or \"//\").  If\n"
+"           set, the input lines will be scanned for this delimiter and, if\n"
+"           found, the delimiter and the rest of the line will be removed prior\n"
+"           to processing and subsequently appended to the output line\n"
+"           (separated by a space).\n"
+"\n"
+"       --version\n"
+"           print version and exit.\n"
+"\n"
+"       -h  print usage and exit.\n"
+"\n"
+"       --help\n"
+"           print full documentation and exit.\n"
+"\n"
+"       --input-file\n"
+"           read input from the file infile instead of from standard input; a\n"
+"           file name of \"-\" stands for standard input.\n"
+"\n"
+"       --input-string\n"
+"           read input from the string instring instead of from standard input.\n"
+"           All occurrences of the line separator character (default is a\n"
+"           semicolon) in instring are converted to newlines before the reading\n"
+"           begins.\n"
+"\n"
+"       --line-separator\n"
+"           set the line separator character to linesep.  By default this is a\n"
+"           semicolon.\n"
+"\n"
+"       --output-file\n"
+"           write output to the file outfile instead of to standard output; a\n"
+"           file name of \"-\" stands for standard output.\n"
+"\n"
+"INPUT\n"
+"       RhumbSolve measures all angles in degrees and all lengths (s12) in\n"
+"       meters.  On input angles (latitude, longitude, azimuth) can be as\n"
+"       decimal degrees or degrees (d), minutes ('), seconds (\").  A decimal\n"
+"       point can only appear in the least significant component and the\n"
+"       designator (d, ', or \") for this component is optional; thus \"40d30\",\n"
+"       \"40d30'\", \"40.5d\", and 40.5 are all equivalent.  By default, latitude\n"
+"       precedes longitude for each point; however on input either may be given\n"
+"       first by appending (or prepending) N or S to the latitude and E or W to\n"
+"       the longitude.  Azimuths are measured clockwise from north; however\n"
+"       this may be overridden with E or W.\n"
+"\n"
+"       See the \"QUOTING\" section of GeoConvert(1) for how to quote the DMS\n"
+"       designators ' and \".\n"
+"\n"
+"PRECISION\n"
+"       prec gives precision of the output with prec = 0 giving 1 m precision,\n"
+"       prec = 3 giving 1 mm precision, etc.  prec is the number of digits\n"
+"       after the decimal point for lengths.  For decimal degrees, the number\n"
+"       of digits after the decimal point is prec + 5.  For DMS (degree,\n"
+"       minute, seconds) output, the number of digits after the decimal point\n"
+"       in the seconds component is prec + 1.  The minimum value of prec is 0\n"
+"       and the maximum is 10.\n"
+"\n"
+"ERRORS\n"
+"       An illegal line of input will print an error message to standard output\n"
+"       beginning with \"ERROR:\" and causes RhumbSolve to return an exit code of\n"
+"       1.  However, an error does not cause RhumbSolve to terminate; following\n"
+"       lines will be converted.\n"
+"\n"
+"ACCURACY\n"
+"       The algorithm used by RhumbSolve uses exact formulas for converting\n"
+"       between the latitude, rectifying latitude (mu), and isometric latitude\n"
+"       (psi).  These formulas are accurate for any value of the flattening.\n"
+"       The computation of rhumb lines involves the ratio (psi1 - psi2) / (mu1\n"
+"       - mu2) and this is subject to large round-off errors if lat1 is close\n"
+"       to lat2.  So this ratio is computed using divided differences using one\n"
+"       of two methods: by default, this uses the addition theorem for elliptic\n"
+"       integrals (accurate for all values of f); however, with the -s options,\n"
+"       it is computed using the series expansions used by\n"
+"       TransverseMercatorProj(1) for the conversions between rectifying and\n"
+"       conformal latitudes (accurate for |f| < 0.01).  For the WGS84\n"
+"       ellipsoid, the error is about 10 nanometers using either method.\n"
+"\n"
+"EXAMPLES\n"
+"       Route from JFK Airport to Singapore Changi Airport:\n"
+"\n"
+"          echo 40:38:23N 073:46:44W 01:21:33N 103:59:22E |\n"
+"          RhumbSolve -i -: -p 0\n"
+"\n"
+"          103:34:58.2 18523563\n"
+"\n"
+"       N.B. This is not the route typically taken by aircraft because it's\n"
+"       considerably longer than the geodesic given by GeodSolve(1).\n"
+"\n"
+"       Waypoints on the route at intervals of 2000km:\n"
+"\n"
+"          for ((i = 0; i <= 20; i += 2)); do echo ${i}000000;done |\n"
+"          RhumbSolve -l 40:38:23N 073:46:44W 103:34:58.2 -: -p 0\n"
+"\n"
+"          40:38:23.0N 073:46:44.0W\n"
+"          36:24:30.3N 051:28:26.4W\n"
+"          32:10:26.8N 030:20:57.3W\n"
+"          27:56:13.2N 010:10:54.2W\n"
+"          23:41:50.1N 009:12:45.5E\n"
+"          19:27:18.7N 027:59:22.1E\n"
+"          15:12:40.2N 046:17:01.1E\n"
+"          10:57:55.9N 064:12:52.8E\n"
+"          06:43:07.3N 081:53:28.8E\n"
+"          02:28:16.2N 099:24:54.5E\n"
+"          01:46:36.0S 116:52:59.7E\n"
+"\n"
+"SEE ALSO\n"
+"       GeoConvert(1), GeodSolve(1), TransverseMercatorProj(1).\n"
+"\n"
+"AUTHOR\n"
+"       RhumbSolve was written by Charles Karney.\n"
+"\n"
+"HISTORY\n"
+"       RhumbSolve was added to GeographicLib, <http://geographiclib.sf.net>,\n"
+"       in version 1.37.\n"
+;
+  return retval;
+}
diff --git a/man/TransverseMercatorProj.1 b/man/TransverseMercatorProj.1
index 3a5d3d1..c71a8c1 100644
--- a/man/TransverseMercatorProj.1
+++ b/man/TransverseMercatorProj.1
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.20)
+.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -38,6 +38,8 @@
 .    ds PI \(*p
 .    ds L" ``
 .    ds R" ''
+.    ds C`
+.    ds C'
 'br\}
 .\"
 .\" Escape single quotes in literal strings from groff's Unicode transform.
@@ -48,17 +50,24 @@
 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
 .\" entries marked with X<> in POD.  Of course, you'll have to process the
 .\" output yourself in some meaningful fashion.
-.ie \nF \{\
-.    de IX
-.    tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
 ..
-.    nr % 0
-.    rr F
-.\}
-.el \{\
-.    de IX
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+.    if \nF \{
+.        de IX
+.        tm Index:\\$1\t\\n%\t"\\$2"
 ..
+.        if !\nF==2 \{
+.            nr % 0
+.            nr F 2
+.        \}
+.    \}
 .\}
+.rr rF
 .\"
 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
@@ -124,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "TRANSVERSEMERCATORPROJ 1"
-.TH TRANSVERSEMERCATORPROJ 1 "2014-03-13" "GeographicLib 1.35" "GeographicLib Utilities"
+.TH TRANSVERSEMERCATORPROJ 1 "2014-08-08" "GeographicLib 1.37" "GeographicLib Utilities"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -135,7 +144,7 @@ TransverseMercatorProj \-\- perform transverse Mercator projection
 .IX Header "SYNOPSIS"
 \&\fBTransverseMercatorProj\fR [ \fB\-s\fR | \fB\-t\fR ]
 [ \fB\-l\fR \fIlon0\fR ] [ \fB\-k\fR \fIk0\fR ] [ \fB\-r\fR ]
-[ \fB\-e\fR \fIa\fR \fIf\fR ]
+[ \fB\-e\fR \fIa\fR \fIf\fR ] [ \fB\-p\fR \fIprec\fR ]
 [ \fB\-\-comment\-delimiter\fR \fIcommentdelim\fR ]
 [ \fB\-\-version\fR | \fB\-h\fR | \fB\-\-help\fR ]
 [ \fB\-\-input\-file\fR \fIinfile\fR | \fB\-\-input\-string\fR \fIinstring\fR ]
@@ -164,7 +173,7 @@ use the sixth-order Krueger series approximation to the transverse
 Mercator projection instead of the exact projection.
 .IP "\fB\-t\fR" 4
 .IX Item "-t"
-use the exact algorithm with the \*(L"\s-1EXTENDED\s0 \s-1DOMAIN\s0\*(R".
+use the exact algorithm with the \*(L"\s-1EXTENDED DOMAIN\*(R"\s0.
 .IP "\fB\-l\fR" 4
 .IX Item "-l"
 specify the longitude of origin \fIlon0\fR (degrees, default 0).
@@ -185,6 +194,13 @@ is allowed for \fIf\fR.  (Also, if \fIf\fR > 1, the flattening is set to
 1/\fIf\fR.)  By default, the \s-1WGS84\s0 ellipsoid is used, \fIa\fR = 6378137 m,
 \&\fIf\fR = 1/298.257223563.  If the exact algorithm is used, \fIf\fR must be
 positive.
+.IP "\fB\-p\fR" 4
+.IX Item "-p"
+set the output precision to \fIprec\fR (default 6).  \fIprec\fR is the number
+of digits after the decimal point for lengths (in meters).  For
+latitudes and longitudes (in degrees), the number of digits after the
+decimal point is \fIprec\fR + 5.  For the convergence (in degrees) and
+scale, the number of digits after the decimal point is \fIprec\fR + 6.
 .IP "\fB\-\-comment\-delimiter\fR" 4
 .IX Item "--comment-delimiter"
 set the comment delimiter to \fIcommentdelim\fR (e.g., \*(L"#\*(R" or \*(L"//\*(R").  If
@@ -249,8 +265,8 @@ terminate; following lines will be converted.
 .IX Header "SEE ALSO"
 The algorithms for the transverse Mercator projection are described in
 C. F. F. Karney, \fITransverse Mercator with an accuracy of a few
-nanometers\fR, J. Geodesy \fB85\fR(8), 475\-485 (Aug. 2011); \s-1DOI\s0
-http://dx.doi.org/10.1007/s00190\-011\-0445\-3 <http://dx.doi.org/10.1007/s00190-011-0445-3>; preprint
+nanometers\fR, J. Geodesy \fB85\fR(8), 475\-485 (Aug. 2011); \s-1DOI
+\&\s0<http://dx.doi.org/10.1007/s00190\-011\-0445\-3>; preprint
 <http://arxiv.org/abs/1002.1417>.  The explanation of the extended
 domain of the projection with the \fB\-t\fR option is given in Section 5 of
 this paper.
diff --git a/man/TransverseMercatorProj.1.html b/man/TransverseMercatorProj.1.html
index 8b28a7d..106d02f 100644
--- a/man/TransverseMercatorProj.1.html
+++ b/man/TransverseMercatorProj.1.html
@@ -17,7 +17,7 @@
 
 <h1 id="SYNOPSIS">SYNOPSIS</h1>
 
-<p><b>TransverseMercatorProj</b> [ <b>-s</b> | <b>-t</b> ] [ <b>-l</b> <i>lon0</i> ] [ <b>-k</b> <i>k0</i> ] [ <b>-r</b> ] [ <b>-e</b> <i>a</i> <i>f</i> ] [ <b>--comment-delimiter</b> <i>commentdelim</i> ] [ <b>--version</b> | <b>-h</b> | <b>--help</b> ] [ <b>--input-file</b> <i>infile</i> | <b>--input-string</b> <i>instring</i> ] [ <b>--line-separator</b> <i>linesep</i> ] [ <b>--output-file</b> <i>outfile</i> ]</p>
+<p><b>TransverseMercatorProj</b> [ <b>-s</b> | <b>-t</b> ] [ <b>-l</b> <i>lon0</i> ] [ <b>-k</b> <i>k0</i> ] [ <b>-r</b> ] [ <b>-e</b> <i>a</i> <i>f</i> ] [ <b>-p</b> <i>prec</i> ] [ <b>--comment-delimiter</b> <i>commentdelim</i> ] [ <b>--version</b> | <b>-h</b> | <b>--help</b> ] [ <b>--input-file</b> <i>infile</i> | <b>--input-string</b> <i>instring</i> ] [ <b>--line-separator</b> <i>linesep</i> ] [ <b>--output-file</b> <i>outfile</i> ]</p>
 
 <h1 id="DESCRIPTION">DESCRIPTION</h1>
 
@@ -65,6 +65,12 @@
 <p>specify the ellipsoid via <i>a</i> <i>f</i>; the equatorial radius is <i>a</i> and the flattening is <i>f</i>. Setting <i>f</i> = 0 results in a sphere. Specify <i>f</i> < 0 for a prolate ellipsoid. A simple fraction, e.g., 1/297, is allowed for <i>f</i>. (Also, if <i>f</i> > 1, the flattening is set to 1/<i>f</i>.) By default, the WGS84 ellipsoid is used, <i>a</i> = 6378137 m, <i>f</i> = 1/298.257223563. If the exact algorithm is used, <i>f</i> must be positive.</p>
 
 </dd>
+<dt id="p"><b>-p</b></dt>
+<dd>
+
+<p>set the output precision to <i>prec</i> (default 6). <i>prec</i> is the number of digits after the decimal point for lengths (in meters). For latitudes and longitudes (in degrees), the number of digits after the decimal point is <i>prec</i> + 5. For the convergence (in degrees) and scale, the number of digits after the decimal point is <i>prec</i> + 6.</p>
+
+</dd>
 <dt id="comment-delimiter"><b>--comment-delimiter</b></dt>
 <dd>
 
diff --git a/man/TransverseMercatorProj.pod b/man/TransverseMercatorProj.pod
index 459414a..2aa2ade 100644
--- a/man/TransverseMercatorProj.pod
+++ b/man/TransverseMercatorProj.pod
@@ -6,7 +6,7 @@ TransverseMercatorProj -- perform transverse Mercator projection
 
 B<TransverseMercatorProj> [ B<-s> | B<-t> ]
 [ B<-l> I<lon0> ] [ B<-k> I<k0> ] [ B<-r> ]
-[ B<-e> I<a> I<f> ]
+[ B<-e> I<a> I<f> ] [ B<-p> I<prec> ]
 [ B<--comment-delimiter> I<commentdelim> ]
 [ B<--version> | B<-h> | B<--help> ]
 [ B<--input-file> I<infile> | B<--input-string> I<instring> ]
@@ -66,6 +66,14 @@ is allowed for I<f>.  (Also, if I<f> E<gt> 1, the flattening is set to
 I<f> = 1/298.257223563.  If the exact algorithm is used, I<f> must be
 positive.
 
+=item B<-p>
+
+set the output precision to I<prec> (default 6).  I<prec> is the number
+of digits after the decimal point for lengths (in meters).  For
+latitudes and longitudes (in degrees), the number of digits after the
+decimal point is I<prec> + 5.  For the convergence (in degrees) and
+scale, the number of digits after the decimal point is I<prec> + 6.
+
 =item B<--comment-delimiter>
 
 set the comment delimiter to I<commentdelim> (e.g., "#" or "//").  If
diff --git a/man/TransverseMercatorProj.usage b/man/TransverseMercatorProj.usage
index 62d6045..2be47fd 100644
--- a/man/TransverseMercatorProj.usage
+++ b/man/TransverseMercatorProj.usage
@@ -2,14 +2,14 @@ int usage(int retval, bool brief) {
   if (brief)
     ( retval ? std::cerr : std::cout ) << "Usage:\n"
 "    TransverseMercatorProj [ -s | -t ] [ -l lon0 ] [ -k k0 ] [ -r ] [ -e a\n"
-"    f ] [ --comment-delimiter commentdelim ] [ --version | -h | --help ] [\n"
-"    --input-file infile | --input-string instring ] [ --line-separator\n"
-"    linesep ] [ --output-file outfile ]\n"
+"    f ] [ -p prec ] [ --comment-delimiter commentdelim ] [ --version | -h |\n"
+"    --help ] [ --input-file infile | --input-string instring ] [\n"
+"    --line-separator linesep ] [ --output-file outfile ]\n"
 "\n"
 "For full documentation type:\n"
 "    TransverseMercatorProj --help\n"
 "or visit:\n"
-"    http://geographiclib.sf.net/1.35/TransverseMercatorProj.1.html\n";
+"    http://geographiclib.sf.net/1.37/TransverseMercatorProj.1.html\n";
   else
     ( retval ? std::cerr : std::cout ) << "Man page:\n"
 "NAME\n"
@@ -17,9 +17,9 @@ int usage(int retval, bool brief) {
 "\n"
 "SYNOPSIS\n"
 "       TransverseMercatorProj [ -s | -t ] [ -l lon0 ] [ -k k0 ] [ -r ] [ -e a\n"
-"       f ] [ --comment-delimiter commentdelim ] [ --version | -h | --help ] [\n"
-"       --input-file infile | --input-string instring ] [ --line-separator\n"
-"       linesep ] [ --output-file outfile ]\n"
+"       f ] [ -p prec ] [ --comment-delimiter commentdelim ] [ --version | -h |\n"
+"       --help ] [ --input-file infile | --input-string instring ] [\n"
+"       --line-separator linesep ] [ --output-file outfile ]\n"
 "\n"
 "DESCRIPTION\n"
 "       Perform the transverse Mercator projections.  Convert geodetic\n"
@@ -58,6 +58,13 @@ int usage(int retval, bool brief) {
 "           1/298.257223563.  If the exact algorithm is used, f must be\n"
 "           positive.\n"
 "\n"
+"       -p  set the output precision to prec (default 6).  prec is the number\n"
+"           of digits after the decimal point for lengths (in meters).  For\n"
+"           latitudes and longitudes (in degrees), the number of digits after\n"
+"           the decimal point is prec + 5.  For the convergence (in degrees)\n"
+"           and scale, the number of digits after the decimal point is prec +\n"
+"           6.\n"
+"\n"
 "       --comment-delimiter\n"
 "           set the comment delimiter to commentdelim (e.g., \"#\" or \"//\").  If\n"
 "           set, the input lines will be scanned for this delimiter and, if\n"
@@ -120,7 +127,6 @@ int usage(int retval, bool brief) {
 "       The algorithms for the transverse Mercator projection are described in\n"
 "       C. F. F. Karney, Transverse Mercator with an accuracy of a few\n"
 "       nanometers, J. Geodesy 85(8), 475-485 (Aug. 2011); DOI\n"
-"       http://dx.doi.org/10.1007/s00190-011-0445-3\n"
 "       <http://dx.doi.org/10.1007/s00190-011-0445-3>; preprint\n"
 "       <http://arxiv.org/abs/1002.1417>.  The explanation of the extended\n"
 "       domain of the projection with the -t option is given in Section 5 of\n"
diff --git a/matlab/Makefile.in b/matlab/Makefile.in
index ce51f72..e5e3fa6 100644
--- a/matlab/Makefile.in
+++ b/matlab/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.12.2 from Makefile.am.
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -19,23 +19,51 @@
 #
 # Copyright (C) 2011, Charles Karney <charles at karney.com>
 VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
+        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; \
-    test $$am__dry = yes; \
-  }
+  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@
@@ -56,7 +84,7 @@ build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
 subdir = matlab
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
 	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
@@ -68,6 +96,18 @@ mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/include/GeographicLib/Config-ac.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 = \
@@ -75,9 +115,11 @@ am__can_run_installinfo = \
     n|no|NO) false;; \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -146,7 +188,6 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POD2HTML = @POD2HTML@
 POD2MAN = @POD2MAN@
-POW_LIB = @POW_LIB@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
@@ -329,11 +370,9 @@ mostlyclean-libtool:
 
 clean-libtool:
 	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
+tags TAGS:
 
-ctags: CTAGS
-CTAGS:
+ctags CTAGS:
 
 cscope cscopelist:
 
@@ -470,16 +509,16 @@ uninstall-am:
 .MAKE: install-am install-strip
 
 .PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	clean-local 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 \
+	clean-local 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 \
-	uninstall uninstall-am
+	tags-am uninstall uninstall-am
 
 
 install:
diff --git a/maxima/geod.mac b/maxima/geod.mac
index 48bc682..bbdb78b 100644
--- a/maxima/geod.mac
+++ b/maxima/geod.mac
@@ -226,12 +226,12 @@ computeall():=(
 
 /* If nA1, nC1, nC1p, nA2, nA3, nC3 are compile-time constants
 indicating the required order, the compiler will include only the needed
-code.  STATIC_ASSERT is a macro to cause a compile-time error if the
-assertion is false.  */
+code.  GEOGRAPHICLIB_STATIC_ASSERT is a macro to cause a compile-time
+error if the assertion is false.  */
 
 codeA1(maxpow):=block([tab2:"    ",tab3:"      "],
   print("  // The scale factor A1-1 = mean value of (d/dsigma)I1 - 1
-  Math::real Geodesic::A1m1f(real eps) throw() {
+  Math::real Geodesic::A1m1f(real eps) {
     real
       eps2 = Math::sq(eps),
       t;
@@ -243,7 +243,7 @@ codeA1(maxpow):=block([tab2:"    ",tab3:"      "],
     print(concat(tab3,"t = ",string(q),";")),
     print(concat(tab3,"break;"))),
   print(concat(tab2,"default:")),
-  print(concat(tab3,"STATIC_ASSERT(nA1_ >= ",string(0),
+  print(concat(tab3,"GEOGRAPHICLIB_STATIC_ASSERT(nA1_ >= ",string(0),
       " && nA1_ <= ",string(maxpow),", \"Bad value of nA1_\");")),
   print(concat(tab3,"t = 0;")),
   print("    }
@@ -253,7 +253,7 @@ codeA1(maxpow):=block([tab2:"    ",tab3:"      "],
 
 codeC1(maxpow):=block([tab2:"    ",tab3:"      "],
   print("  // The coefficients C1[l] in the Fourier expansion of B1
-  void Geodesic::C1f(real eps, real c[]) throw() {
+  void Geodesic::C1f(real eps, real c[]) {
     real
       eps2 = Math::sq(eps),
       d = eps;
@@ -267,7 +267,7 @@ codeC1(maxpow):=block([tab2:"    ",tab3:"      "],
       print(concat(tab3,"c[",string(m),"] = ",string(q),";"))),
     print(concat(tab3,"break;"))),
   print(concat(tab2,"default:")),
-  print(concat(tab3,"STATIC_ASSERT(nC1_ >= ",string(0),
+  print(concat(tab3,"GEOGRAPHICLIB_STATIC_ASSERT(nC1_ >= ",string(0),
       " && nC1_ <= ",string(maxpow),", \"Bad value of nC1_\");")),
   print("    }
   }"),
@@ -275,7 +275,7 @@ codeC1(maxpow):=block([tab2:"    ",tab3:"      "],
 
 codeC1p(maxpow):=block([tab2:"    ",tab3:"      "],
   print("  // The coefficients C1p[l] in the Fourier expansion of B1p
-  void Geodesic::C1pf(real eps, real c[]) throw() {
+  void Geodesic::C1pf(real eps, real c[]) {
     real
       eps2 = Math::sq(eps),
       d = eps;
@@ -289,7 +289,7 @@ codeC1p(maxpow):=block([tab2:"    ",tab3:"      "],
       print(concat(tab3,"c[",string(m),"] = ",string(q),";"))),
     print(concat(tab3,"break;"))),
   print(concat(tab2,"default:")),
-  print(concat(tab3,"STATIC_ASSERT(nC1p_ >= ",string(0),
+  print(concat(tab3,"GEOGRAPHICLIB_STATIC_ASSERT(nC1p_ >= ",string(0),
       " && nC1p_ <= ",string(maxpow),", \"Bad value of nC1p_\");")),
   print("    }
   }"),
@@ -297,7 +297,7 @@ codeC1p(maxpow):=block([tab2:"    ",tab3:"      "],
 
 codeA2(maxpow):=block([tab2:"    ",tab3:"      "],
   print("  // The scale factor A2-1 = mean value of (d/dsigma)I2 - 1
-  Math::real Geodesic::A2m1f(real eps) throw() {
+  Math::real Geodesic::A2m1f(real eps) {
     real
       eps2 = Math::sq(eps),
       t;
@@ -309,7 +309,7 @@ codeA2(maxpow):=block([tab2:"    ",tab3:"      "],
     print(concat(tab3,"t = ",string(q),";")),
     print(concat(tab3,"break;"))),
   print(concat(tab2,"default:")),
-  print(concat(tab3,"STATIC_ASSERT(nA2_ >= ",string(0),
+  print(concat(tab3,"GEOGRAPHICLIB_STATIC_ASSERT(nA2_ >= ",string(0),
       " && nA2_ <= ",string(maxpow),", \"Bad value of nA2_\");")),
   print(concat(tab3,"t = 0;")),
   print("    }
@@ -319,7 +319,7 @@ codeA2(maxpow):=block([tab2:"    ",tab3:"      "],
 
 codeC2(maxpow):=block([tab2:"    ",tab3:"      "],
   print("  // The coefficients C2[l] in the Fourier expansion of B2
-  void Geodesic::C2f(real eps, real c[]) throw() {
+  void Geodesic::C2f(real eps, real c[]) {
     real
       eps2 = Math::sq(eps),
       d = eps;
@@ -333,7 +333,7 @@ codeC2(maxpow):=block([tab2:"    ",tab3:"      "],
       print(concat(tab3,"c[",string(m),"] = ",string(q),";"))),
     print(concat(tab3,"break;"))),
   print(concat(tab2,"default:")),
-  print(concat(tab3,"STATIC_ASSERT(nC2_ >= ",string(0),
+  print(concat(tab3,"GEOGRAPHICLIB_STATIC_ASSERT(nC2_ >= ",string(0),
       " && nC2_ <= ",string(maxpow),", \"Bad value of nC2_\");")),
   print("    }
   }"),
@@ -341,7 +341,7 @@ codeC2(maxpow):=block([tab2:"    ",tab3:"      "],
 
 codeA3(maxpow):=block([tab2:"    ",tab3:"      "],
   print("  // The scale factor A3 = mean value of (d/dsigma)I3
-  void Geodesic::A3coeff() throw() {
+  void Geodesic::A3coeff() {
     switch (nA3_) {"),
   for nn:0 thru maxpow do block(
     [q:if nn=0 then 0 else
@@ -353,7 +353,7 @@ codeA3(maxpow):=block([tab2:"    ",tab3:"      "],
         string(horner(coeff(q,eps,i))),";")),
     print(concat(tab3,"break;"))),
   print(concat(tab2,"default:")),
-  print(concat(tab3,"STATIC_ASSERT(nA3_ >= ",string(0),
+  print(concat(tab3,"GEOGRAPHICLIB_STATIC_ASSERT(nA3_ >= ",string(0),
       " && nA3_ <= ",string(maxpow),", \"Bad value of nA3_\");")),
   print("    }
   }"),
@@ -361,7 +361,7 @@ codeA3(maxpow):=block([tab2:"    ",tab3:"      "],
 
 codeC3(maxpow):=block([tab2:"    ",tab3:"      "],
   print("  // The coefficients C3[l] in the Fourier expansion of B3
-  void Geodesic::C3coeff() throw() {
+  void Geodesic::C3coeff() {
     switch (nC3_) {"),
   for nn:0 thru maxpow do block([c],
     print(concat(tab2,"case ",string(nn),":")),
@@ -377,7 +377,7 @@ codeC3(maxpow):=block([tab2:"    ",tab3:"      "],
     ),
     print(concat(tab3,"break;"))),
   print(concat(tab2,"default:")),
-  print(concat(tab3,"STATIC_ASSERT(nC3_ >= ",string(0),
+  print(concat(tab3,"GEOGRAPHICLIB_STATIC_ASSERT(nC3_ >= ",string(0),
       " && nC3_ <= ",string(maxpow),", \"Bad value of nC3_\");")),
   print("    }
   }"),
@@ -385,7 +385,7 @@ codeC3(maxpow):=block([tab2:"    ",tab3:"      "],
 
 codeC4(maxpow):=block([tab2:"    ",tab3:"      "],
   print("  // The coefficients C4[l] in the Fourier expansion of I4
-  void Geodesic::C4coeff() throw() {
+  void Geodesic::C4coeff() {
     switch (nC4_) {"),
   for nn:0 thru maxpow do block([c],
     print(concat(tab2,"case ",string(nn),":")),
@@ -400,7 +400,7 @@ codeC4(maxpow):=block([tab2:"    ",tab3:"      "],
     ),
     print(concat(tab3,"break;"))),
   print(concat(tab2,"default:")),
-  print(concat(tab3,"STATIC_ASSERT(nC4_ >= ",string(0),
+  print(concat(tab3,"GEOGRAPHICLIB_STATIC_ASSERT(nC4_ >= ",string(0),
       " && nC4_ <= ",string(maxpow),", \"Bad value of nC4_\");")),
   print("    }
   }"),
diff --git a/maxima/geodC4.mac b/maxima/geodC4.mac
new file mode 100644
index 0000000..51ba995
--- /dev/null
+++ b/maxima/geodC4.mac
@@ -0,0 +1,58 @@
+load("geod30.lsp")$
+taylordepth:5$
+jtaylor(expr,var1,var2,ord):=expand(subst([zz=1],
+    ratdisrep(taylor(subst([var1=zz*var1,var2=zz*var2],expr),zz,0,ord))))$
+h(x):=if x=0 then 0 else block([n:0],while integerp(x/16) do (x:x/16,n:n+1),n);
+formatnum(x):=block([n:h(x)],
+  if n>4 then (x:x/16^n,n:concat("<<",4*n)) else n:"",
+  concat(if x=0 then "0"
+  else if abs(x)<1000000 then string(x)
+  else concat(if x<0 then "-" else "",
+    "0x",block([obase:16,s],
+      s:sdowncase(string(abs(x))),
+      if substring(s,1,2) = "0" then s:substring(s,2),
+      s)),"LL",n))$
+formatnumx(x):=if abs(x)<2^63
+then concat("real(",formatnum(x),")") else
+concat("reale(",formatnum(floor(x/2^52)),",",
+  formatnum(x-floor(x/2^52)*2^52),")")$
+printterm(x,line):=block([lx:slength(x)+1,lline:slength(line)],
+  x:concat(x,","),
+  if lline=0 then line:concat("      ",x)
+  else (if lx+lline<80 then line:concat(line,x)
+    else (print(line),line:concat("      ",x))),
+  line)$
+flushline(line):=(if slength(line)>0 then (print(line),line:""),line)$
+codeC4():=block([tab2:"    ",tab3:"      ",linel:90],
+  print(concat("  // Generated by Maxima on ",timedate())),
+  print("  // The coefficients n^k in C4[l] in the Fourier expansion of I4
+  const Math::real* GeodesicExact::rawC4coeff() {"),
+  for nn:0 thru maxpow do block([c],
+    if nn = 0 then
+    print(concat("#if GEOGRAPHICLIB_GEODESICEXACT_ORDER == ",nn))
+    else
+    print(concat("#elif GEOGRAPHICLIB_GEODESICEXACT_ORDER == ",nn)),
+    print(concat(tab2,"static const real coeff[] = {")),
+    c:0,
+    for m:0 thru nn-1 do block(
+      [q:jtaylor(subst([n=_n],C4[m]),_n,eps,nn-1),line:""],
+      for j:m thru nn-1 do block(
+        [p:ratsimp(coeff(q,eps,j)),den],
+        d:abs(denom(p)),
+        p:expand(d*p),
+        line:flushline(line),
+        print(concat(tab3,"// _C4x[",c,"]")),
+        for k:nn-1-j step -1 thru 0 do block(
+          [t:coeff(p,_n,k)],
+          line:printterm(formatnumx(t),line)),
+        line:printterm(formatnumx(d),line),
+        c:c+1),
+      line:flushline(line)),
+    print(concat(tab2,"};"))),
+  print("#else
+#error \"Bad value for GEOGRAPHICLIB_GEODESICEXACT_ORDER\"
+#endif
+    return coeff;
+  }
+"),
+'done)$
diff --git a/missing b/missing
index 9a55648..cdea514 100755
--- a/missing
+++ b/missing
@@ -1,10 +1,10 @@
 #! /bin/sh
-# Common stub for a few missing GNU programs while installing.
+# Common wrapper for a few potentially missing GNU programs.
 
-scriptversion=2012-01-06.18; # UTC
+scriptversion=2012-06-26.16; # UTC
 
-# Copyright (C) 1996-2012 Free Software Foundation, Inc.
-# Originally by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
+# Copyright (C) 1996-2013 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
@@ -29,61 +29,33 @@ if test $# -eq 0; then
   exit 1
 fi
 
-run=:
-sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
-sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
-
-# In the cases where this matters, 'missing' is being run in the
-# srcdir already.
-if test -f configure.ac; then
-  configure_ac=configure.ac
-else
-  configure_ac=configure.in
-fi
+case $1 in
 
-msg="missing on your system"
+  --is-lightweight)
+    # Used by our autoconf macros to check whether the available missing
+    # script is modern enough.
+    exit 0
+    ;;
 
-case $1 in
---run)
-  # Try to run requested program, and just exit if it succeeds.
-  run=
-  shift
-  "$@" && exit 0
-  # Exit code 63 means version mismatch.  This often happens
-  # when the user try to use an ancient version of a tool on
-  # a file that requires a minimum version.  In this case we
-  # we should proceed has if the program had been absent, or
-  # if --run hadn't been passed.
-  if test $? = 63; then
-    run=:
-    msg="probably too old"
-  fi
-  ;;
+  --run)
+    # Back-compat with the calling convention used by older automake.
+    shift
+    ;;
 
   -h|--h|--he|--hel|--help)
     echo "\
 $0 [OPTION]... PROGRAM [ARGUMENT]...
 
-Handle 'PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
-error status if there is no known handling for PROGRAM.
+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
-  --run           try to run the given command, and emulate it if it fails
 
 Supported PROGRAM values:
-  aclocal      touch file 'aclocal.m4'
-  autoconf     touch file 'configure'
-  autoheader   touch file 'config.h.in'
-  autom4te     touch the output file, or create a stub one
-  automake     touch all 'Makefile.in' files
-  bison        create 'y.tab.[ch]', if possible, from existing .[ch]
-  flex         create 'lex.yy.c', if possible, from existing .c
-  help2man     touch the output file
-  lex          create 'lex.yy.c', if possible, from existing .c
-  makeinfo     touch the output file
-  yacc         create 'y.tab.[ch]', if possible, from existing .[ch]
+  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.
@@ -98,228 +70,141 @@ Send bug reports to <bug-automake at gnu.org>."
     ;;
 
   -*)
-    echo 1>&2 "$0: Unknown '$1' option"
+    echo 1>&2 "$0: unknown '$1' option"
     echo 1>&2 "Try '$0 --help' for more information"
     exit 1
     ;;
 
 esac
 
-# normalize program name to check for.
-program=`echo "$1" | sed '
-  s/^gnu-//; t
-  s/^gnu//; t
-  s/^g//; t'`
-
-# Now exit if we have it, but it failed.  Also exit now if we
-# don't have it and --version was passed (most likely to detect
-# the program).  This is about non-GNU programs, so use $1 not
-# $program.
-case $1 in
-  lex*|yacc*)
-    # Not GNU programs, they don't have --version.
-    ;;
-
-  *)
-    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
-       # We have it, but it failed.
-       exit 1
-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-       # Could not run --version or --help.  This is probably someone
-       # running '$TOOL --version' or '$TOOL --help' to check whether
-       # $TOOL exists and not knowing $TOOL uses missing.
-       exit 1
-    fi
-    ;;
-esac
-
-# If it does not exist, or fails to run (possibly an outdated version),
-# try to emulate it.
-case $program in
-  aclocal*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified 'acinclude.m4' or '${configure_ac}'.  You might want
-         to install the Automake and Perl packages.  Grab them from
-         any GNU archive site."
-    touch aclocal.m4
-    ;;
-
-  autoconf*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified '${configure_ac}'.  You might want to install the
-         Autoconf and GNU m4 packages.  Grab them from any GNU
-         archive site."
-    touch configure
-    ;;
-
-  autoheader*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified 'acconfig.h' or '${configure_ac}'.  You might want
-         to install the Autoconf and GNU m4 packages.  Grab them
-         from any GNU archive site."
-    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
-    test -z "$files" && files="config.h"
-    touch_files=
-    for f in $files; do
-      case $f in
-      *:*) touch_files="$touch_files "`echo "$f" |
-				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
-      *) touch_files="$touch_files $f.in";;
-      esac
-    done
-    touch $touch_files
-    ;;
-
-  automake*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified 'Makefile.am', 'acinclude.m4' or '${configure_ac}'.
-         You might want to install the Automake and Perl packages.
-         Grab them from any GNU archive site."
-    find . -type f -name Makefile.am -print |
-	   sed 's/\.am$/.in/' |
-	   while read f; do touch "$f"; done
-    ;;
-
-  autom4te*)
-    echo 1>&2 "\
-WARNING: '$1' is needed, but is $msg.
-         You might have modified some files without having the
-         proper tools for further handling them.
-         You can get '$1' as part of Autoconf from any GNU
-         archive site."
-
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -f "$file"; then
-	touch $file
-    else
-	test -z "$file" || exec >$file
-	echo "#! /bin/sh"
-	echo "# Created by GNU Automake missing as a replacement of"
-	echo "#  $ $@"
-	echo "exit 0"
-	chmod +x $file
-	exit 1
-    fi
-    ;;
-
-  bison*|yacc*)
-    echo 1>&2 "\
-WARNING: '$1' $msg.  You should only need it if
-         you modified a '.y' file.  You may need the Bison package
-         in order for those modifications to take effect.  You can get
-         Bison from any GNU archive site."
-    rm -f y.tab.c y.tab.h
-    if test $# -ne 1; then
-        eval LASTARG=\${$#}
-	case $LASTARG in
-	*.y)
-	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
-	    if test -f "$SRCFILE"; then
-	         cp "$SRCFILE" y.tab.c
-	    fi
-	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
-	    if test -f "$SRCFILE"; then
-	         cp "$SRCFILE" y.tab.h
-	    fi
-	  ;;
-	esac
-    fi
-    if test ! -f y.tab.h; then
-	echo >y.tab.h
-    fi
-    if test ! -f y.tab.c; then
-	echo 'main() { return 0; }' >y.tab.c
-    fi
-    ;;
-
-  lex*|flex*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified a '.l' file.  You may need the Flex package
-         in order for those modifications to take effect.  You can get
-         Flex from any GNU archive site."
-    rm -f lex.yy.c
-    if test $# -ne 1; then
-        eval LASTARG=\${$#}
-	case $LASTARG in
-	*.l)
-	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
-	    if test -f "$SRCFILE"; then
-	         cp "$SRCFILE" lex.yy.c
-	    fi
-	  ;;
-	esac
-    fi
-    if test ! -f lex.yy.c; then
-	echo 'main() { return 0; }' >lex.yy.c
-    fi
-    ;;
-
-  help2man*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-	 you modified a dependency of a manual page.  You may need the
-	 Help2man package in order for those modifications to take
-	 effect.  You can get Help2man from any GNU archive site."
-
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -f "$file"; then
-	touch $file
-    else
-	test -z "$file" || exec >$file
-	echo ".ab help2man is required to generate this page"
-	exit $?
-    fi
-    ;;
-
-  makeinfo*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified a '.texi' or '.texinfo' file, or any other file
-         indirectly affecting the aspect of the manual.  The spurious
-         call might also be the consequence of using a buggy 'make' (AIX,
-         DU, IRIX).  You might want to install the Texinfo package or
-         the GNU make package.  Grab either from any GNU archive site."
-    # The file to touch is that specified with -o ...
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -z "$file"; then
-      # ... or it is the one specified with @setfilename ...
-      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
-      file=`sed -n '
-	/^@setfilename/{
-	  s/.* \([^ ]*\) *$/\1/
-	  p
-	  q
-	}' $infile`
-      # ... or it is derived from the source name (dir/f.texi becomes f.info)
-      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
-    fi
-    # If the file does not exist, the user really needs makeinfo;
-    # let's fail without touching anything.
-    test -f $file || exit 1
-    touch $file
-    ;;
+# 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
 
-  *)
-    echo 1>&2 "\
-WARNING: '$1' is needed, and is $msg.
-         You might have modified some files without having the
-         proper tools for further handling them.  Check the 'README' file,
-         it often tells you about the needed prerequisites for installing
-         this package.  You may also peek at any GNU archive site, in case
-         some other package would contain this missing '$1' program."
-    exit 1
+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 'automa4te' 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/>"
     ;;
-esac
-
-exit 0
+    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)
diff --git a/pom.xml b/pom.xml
index 2d40845..e4516a3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,12 +7,12 @@
   <parent>
     <groupId>com.sri.vt.majic</groupId>
     <artifactId>majic-parent</artifactId>
-    <version>0.1.9-SNAPSHOT</version>
+    <version>0.1.11</version>
   </parent>
 
   <groupId>com.sri.vt</groupId>
   <artifactId>geographiclib</artifactId>
-  <version>1.35-SNAPSHOT</version>
+  <version>1.37-001-SNAPSHOT</version>
   <packaging>majic-cmake</packaging>
   <name>GeographicLib</name>
 
@@ -59,7 +59,6 @@
             <id>default-cmake-configure</id>
             <configuration>
               <options>
-                <COMMON_INSTALL_PATH>ON</COMMON_INSTALL_PATH>
                 <GEOGRAPHICLIB_LIB_TYPE>BOTH</GEOGRAPHICLIB_LIB_TYPE>
                 <MATLAB_COMPILER>OFF</MATLAB_COMPILER>
                 <GEOGRAPHICLIB_DOCUMENTATION>OFF</GEOGRAPHICLIB_DOCUMENTATION>
diff --git a/python/Makefile.in b/python/Makefile.in
index 6a0d08a..036433c 100644
--- a/python/Makefile.in
+++ b/python/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.12.2 from Makefile.am.
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -19,23 +19,51 @@
 #
 # Copyright (C) 2011, Charles Karney <charles at karney.com>
 VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
+        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; \
-    test $$am__dry = yes; \
-  }
+  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@
@@ -56,7 +84,7 @@ build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
 subdir = python
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
 	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
@@ -68,6 +96,18 @@ mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/include/GeographicLib/Config-ac.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 = \
@@ -75,9 +115,11 @@ am__can_run_installinfo = \
     n|no|NO) false;; \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -146,7 +188,6 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POD2HTML = @POD2HTML@
 POD2MAN = @POD2MAN@
-POW_LIB = @POW_LIB@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
@@ -263,11 +304,9 @@ mostlyclean-libtool:
 
 clean-libtool:
 	-rm -rf .libs _libs
-tags: TAGS
-TAGS:
+tags TAGS:
 
-ctags: CTAGS
-CTAGS:
+ctags CTAGS:
 
 cscope cscopelist:
 
@@ -404,16 +443,16 @@ uninstall-am:
 .MAKE: install-am install-strip
 
 .PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	clean-local 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 \
+	clean-local 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 \
-	uninstall uninstall-am
+	tags-am uninstall uninstall-am
 
 
 install:
diff --git a/src/AlbersEqualArea.cpp b/src/AlbersEqualArea.cpp
index 055a187..d99e3de 100644
--- a/src/AlbersEqualArea.cpp
+++ b/src/AlbersEqualArea.cpp
@@ -9,21 +9,22 @@
 
 #include <GeographicLib/AlbersEqualArea.hpp>
 
+#if defined(_MSC_VER)
+// Squelch warnings about constant conditional expressions
+#  pragma warning (disable: 4127)
+#endif
+
 namespace GeographicLib {
 
   using namespace std;
 
-  const Math::real AlbersEqualArea::eps_ = numeric_limits<real>::epsilon();
-  const Math::real AlbersEqualArea::epsx_ = Math::sq(eps_);
-  const Math::real AlbersEqualArea::epsx2_ = Math::sq(epsx_);
-  const Math::real AlbersEqualArea::tol_ = sqrt(eps_);
-  const Math::real AlbersEqualArea::tol0_ = tol_ * sqrt(sqrt(eps_));
-  const Math::real AlbersEqualArea::ahypover_ =
-    real(numeric_limits<real>::digits) * log(real(numeric_limits<real>::radix))
-    + 2;
-
   AlbersEqualArea::AlbersEqualArea(real a, real f, real stdlat, real k0)
-    : _a(a)
+    : eps_(numeric_limits<real>::epsilon())
+    , epsx_(Math::sq(eps_))
+    , epsx2_(Math::sq(epsx_))
+    , tol_(sqrt(eps_))
+    , tol0_(tol_ * sqrt(sqrt(eps_)))
+    , _a(a)
     , _f(f <= 1 ? f : 1/f)
     , _fm(1 - _f)
     , _e2(_f * (2 - _f))
@@ -41,7 +42,7 @@ namespace GeographicLib {
     if (!(abs(stdlat) <= 90))
       throw GeographicErr("Standard latitude not in [-90d, 90d]");
     real
-      phi = stdlat * Math::degree<real>(),
+      phi = stdlat * Math::degree(),
       sphi = sin(phi),
       cphi = abs(stdlat) != 90 ? cos(phi) : 0;
     Init(sphi, cphi, sphi, cphi, k0);
@@ -49,7 +50,12 @@ namespace GeographicLib {
 
   AlbersEqualArea::AlbersEqualArea(real a, real f, real stdlat1, real stdlat2,
                                    real k1)
-    : _a(a)
+    : eps_(numeric_limits<real>::epsilon())
+    , epsx_(Math::sq(eps_))
+    , epsx2_(Math::sq(epsx_))
+    , tol_(sqrt(eps_))
+    , tol0_(tol_ * sqrt(sqrt(eps_)))
+    , _a(a)
     , _f(f <= 1 ? f : 1/f)
     , _fm(1 - _f)
     , _e2(_f * (2 - _f))
@@ -69,8 +75,8 @@ namespace GeographicLib {
     if (!(abs(stdlat2) <= 90))
       throw GeographicErr("Standard latitude 2 not in [-90d, 90d]");
     real
-      phi1 = stdlat1 * Math::degree<real>(),
-      phi2 = stdlat2 * Math::degree<real>();
+      phi1 = stdlat1 * Math::degree(),
+      phi2 = stdlat2 * Math::degree();
     Init(sin(phi1), abs(stdlat1) != 90 ? cos(phi1) : 0,
          sin(phi2), abs(stdlat2) != 90 ? cos(phi2) : 0, k1);
   }
@@ -79,7 +85,12 @@ namespace GeographicLib {
                                    real sinlat1, real coslat1,
                                    real sinlat2, real coslat2,
                                    real k1)
-    : _a(a)
+    : eps_(numeric_limits<real>::epsilon())
+    , epsx_(Math::sq(eps_))
+    , epsx2_(Math::sq(epsx_))
+    , tol_(sqrt(eps_))
+    , tol0_(tol_ * sqrt(sqrt(eps_)))
+    , _a(a)
     , _f(f <= 1 ? f : 1/f)
     , _fm(1 - _f)
     , _e2(_f * (2 - _f))
@@ -109,7 +120,7 @@ namespace GeographicLib {
   }
 
   void AlbersEqualArea::Init(real sphi1, real cphi1,
-                             real sphi2, real cphi2, real k1) throw() {
+                             real sphi2, real cphi2, real k1) {
     {
       real r;
       r = Math::hypot(sphi1, cphi1);
@@ -194,7 +205,7 @@ namespace GeographicLib {
       C = den / (2 * scbet12 * scbet22 * dsxi);
       tphi0 = (tphi2 + tphi1)/2;
       real stol = tol0_ * max(real(1), abs(tphi0));
-      for (int i = 0; i < 2*numit0_; ++i) {
+      for (int i = 0; i < 2*numit0_ || GEOGRAPHICLIB_PANIC; ++i) {
         // Solve (scbet0^2 * sphi0) / (1/qZ + scbet0^2 * sphi0 * sxi0) = s
         // for tphi0 by Newton's method on
         // v(tphi0) = (scbet0^2 * sphi0) - s * (1/qZ + scbet0^2 * sphi0 * sxi0)
@@ -261,28 +272,31 @@ namespace GeographicLib {
     _nrho0 = polar ? 0 : _a * sqrt(_m02);
     _k0 = sqrt(tphi1 == tphi2 ? 1 : C / (_m02 + _n0 * _qZ * _sxi0)) * k1;
     _k2 = Math::sq(_k0);
-    _lat0 = _sign * atan(tphi0)/Math::degree<real>();
+    _lat0 = _sign * atan(tphi0)/Math::degree();
   }
 
-  const AlbersEqualArea
-  AlbersEqualArea::CylindricalEqualArea(Constants::WGS84_a<real>(),
-                                        Constants::WGS84_f<real>(),
-                                        real(0), real(1), real(0), real(1),
-                                        real(1));
+  const AlbersEqualArea& AlbersEqualArea::CylindricalEqualArea() {
+    static const AlbersEqualArea
+      cylindricalequalarea(Constants::WGS84_a(), Constants::WGS84_f(),
+                           real(0), real(1), real(0), real(1), real(1));
+    return cylindricalequalarea;
+  }
 
-  const AlbersEqualArea
-  AlbersEqualArea::AzimuthalEqualAreaNorth(Constants::WGS84_a<real>(),
-                                           Constants::WGS84_f<real>(),
-                                           real(1), real(0), real(1), real(0),
-                                           real(1));
+  const AlbersEqualArea& AlbersEqualArea::AzimuthalEqualAreaNorth() {
+    static const AlbersEqualArea
+      azimuthalequalareanorth(Constants::WGS84_a(), Constants::WGS84_f(),
+                              real(1), real(0), real(1), real(0), real(1));
+    return azimuthalequalareanorth;
+  }
 
-  const AlbersEqualArea
-  AlbersEqualArea::AzimuthalEqualAreaSouth(Constants::WGS84_a<real>(),
-                                           Constants::WGS84_f<real>(),
-                                           real(-1), real(0), real(-1), real(0),
-                                           real(1));
+  const AlbersEqualArea& AlbersEqualArea::AzimuthalEqualAreaSouth() {
+    static const AlbersEqualArea
+      azimuthalequalareasouth(Constants::WGS84_a(), Constants::WGS84_f(),
+                              real(-1), real(0), real(-1), real(0), real(1));
+    return azimuthalequalareasouth;
+  }
 
-  Math::real AlbersEqualArea::txif(real tphi) const throw() {
+  Math::real AlbersEqualArea::txif(real tphi) const {
     // sxi = ( sphi/(1-e2*sphi^2) + atanhee(sphi) ) /
     //       ( 1/(1-e2) + atanhee(1) )
     //
@@ -309,12 +323,12 @@ namespace GeographicLib {
             ( es1m1 / es2m1a + atanhee(es1p1) ) );
   }
 
-  Math::real AlbersEqualArea::tphif(real txi) const throw() {
+  Math::real AlbersEqualArea::tphif(real txi) const {
     real
       tphi = txi,
       stol = tol_ * max(real(1), abs(txi));
     // CHECK: min iterations = 1, max iterations = 2; mean = 1.99
-    for (int i = 0; i < numit_; ++i) {
+    for (int i = 0; i < numit_ || GEOGRAPHICLIB_PANIC; ++i) {
       // dtxi/dtphi = (scxi/scphi)^3 * 2*(1-e^2)/(qZ*(1-e^2*sphi^2)^2)
       real
         txia = txif(tphi),
@@ -332,7 +346,7 @@ namespace GeographicLib {
 
   // return atanh(sqrt(x))/sqrt(x) - 1 = y/3 + y^2/5 + y^3/7 + ...
   // typical x < e^2 = 2*f
-  Math::real AlbersEqualArea::atanhxm1(real x) throw() {
+  Math::real AlbersEqualArea::atanhxm1(real x) {
     real s = 0;
     if (abs(x) < real(0.5)) {
       real os = -1, y = 1, k = 1;
@@ -350,7 +364,7 @@ namespace GeographicLib {
   }
 
   // return (Datanhee(1,y) - Datanhee(1,x))/(y-x)
-  Math::real AlbersEqualArea::DDatanhee(real x, real y) const throw() {
+  Math::real AlbersEqualArea::DDatanhee(real x, real y) const {
     real s = 0;
     if (_e2 * (abs(x) + abs(y)) < real(0.5)) {
       real os = -1, z = 1, k = 1, t = 0, c = 0, en = 1;
@@ -372,38 +386,38 @@ namespace GeographicLib {
 
   void AlbersEqualArea::Forward(real lon0, real lat, real lon,
                                 real& x, real& y, real& gamma, real& k)
-    const throw() {
+    const {
     lon = Math::AngDiff(Math::AngNormalize(lon0), Math::AngNormalize(lon));
     lat *= _sign;
     real
-      lam = lon * Math::degree<real>(),
-      phi = lat * Math::degree<real>(),
+      lam = lon * Math::degree(),
+      phi = lat * Math::degree(),
       sphi = sin(phi), cphi = abs(lat) != 90 ? cos(phi) : epsx_,
       tphi = sphi/cphi, txi = txif(tphi), sxi = txi/hyp(txi),
       dq = _qZ * Dsn(txi, _txi0, sxi, _sxi0) * (txi - _txi0),
       drho = - _a * dq / (sqrt(_m02 - _n0 * dq) + _nrho0 / _a),
       theta = _k2 * _n0 * lam, stheta = sin(theta), ctheta = cos(theta),
       t = _nrho0 + _n0 * drho;
-    x = t * (_n0 != 0 ? stheta / _n0 : _k2 * lam) / _k0;
+    x = t * (_n0 ? stheta / _n0 : _k2 * lam) / _k0;
     y = (_nrho0 *
-         (_n0 != 0 ?
+         (_n0 ?
           (ctheta < 0 ? 1 - ctheta : Math::sq(stheta)/(1 + ctheta)) / _n0 :
           0)
          - drho * ctheta) / _k0;
-    k = _k0 * (t != 0 ? t * hyp(_fm * tphi) / _a : 1);
+    k = _k0 * (t ? t * hyp(_fm * tphi) / _a : 1);
     y *= _sign;
-    gamma = _sign * theta / Math::degree<real>();
+    gamma = _sign * theta / Math::degree();
   }
 
   void AlbersEqualArea::Reverse(real lon0, real x, real y,
                                 real& lat, real& lon,
                                 real& gamma, real& k)
-    const throw() {
+    const {
     y *= _sign;
     real
       nx = _k0 * _n0 * x, ny = _k0 * _n0 * y, y1 =  _nrho0 - ny,
       den = Math::hypot(nx, y1) + _nrho0, // 0 implies origin with polar aspect
-      drho = den != 0 ? (_k0*x*nx - 2*_k0*y*_nrho0 + _k0*y*ny) / den : 0,
+      drho = den ? (_k0*x*nx - 2*_k0*y*_nrho0 + _k0*y*ny) / den : 0,
       // dsxia = scxi0 * dsxi
       dsxia = - _scxi0 * (2 * _nrho0 + _n0 * drho) * drho /
               (Math::sq(_a) * _qZ),
@@ -411,12 +425,12 @@ namespace GeographicLib {
       tphi = tphif(txi),
       phi = _sign * atan(tphi),
       theta = atan2(nx, y1),
-      lam = _n0 != 0 ? theta / (_k2 * _n0) : x / (y1 * _k0);
-    gamma = _sign * theta / Math::degree<real>();
-    lat = phi / Math::degree<real>();
-    lon = lam / Math::degree<real>();
+      lam = _n0 ? theta / (_k2 * _n0) : x / (y1 * _k0);
+    gamma = _sign * theta / Math::degree();
+    lat = phi / Math::degree();
+    lon = lam / Math::degree();
     lon = Math::AngNormalize(lon + Math::AngNormalize(lon0));
-    k = _k0 * (den != 0 ? (_nrho0 + _n0 * drho) * hyp(_fm * tphi) / _a : 1);
+    k = _k0 * (den ? (_nrho0 + _n0 * drho) * hyp(_fm * tphi) / _a : 1);
   }
 
   void AlbersEqualArea::SetScale(real lat, real k) {
diff --git a/src/AzimuthalEquidistant.cpp b/src/AzimuthalEquidistant.cpp
index f55d2b7..387c2d5 100644
--- a/src/AzimuthalEquidistant.cpp
+++ b/src/AzimuthalEquidistant.cpp
@@ -13,15 +13,16 @@ namespace GeographicLib {
 
   using namespace std;
 
-  const Math::real AzimuthalEquidistant::eps_ =
-    real(0.01) * sqrt(numeric_limits<real>::min());
+  AzimuthalEquidistant::AzimuthalEquidistant(const Geodesic& earth)
+      : eps_(real(0.01) * sqrt(numeric_limits<real>::min()))
+      , _earth(earth) {}
 
   void AzimuthalEquidistant::Forward(real lat0, real lon0, real lat, real lon,
                                      real& x, real& y, real& azi, real& rk)
-    const throw() {
+    const {
     real sig, s, azi0, m;
     sig = _earth.Inverse(lat0, lon0, lat, lon, s, azi0, azi, m);
-    azi0 *= Math::degree<real>();
+    azi0 *= Math::degree();
     x = s * sin(azi0);
     y = s * cos(azi0);
     rk = !(sig <= eps_) ? m / s : 1;
@@ -29,9 +30,9 @@ namespace GeographicLib {
 
   void AzimuthalEquidistant::Reverse(real lat0, real lon0, real x, real y,
                                      real& lat, real& lon, real& azi, real& rk)
-    const throw() {
+    const {
     real
-      azi0 = atan2(x, y) / Math::degree<real>(),
+      azi0 = atan2(x, y) / Math::degree(),
       s = Math::hypot(x, y);
     real sig, m;
     sig = _earth.Direct(lat0, lon0, azi0, s, lat, lon, azi, m);
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 45a0193..6ea0e36 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -6,6 +6,7 @@ file (GLOB HEADERS
   ${PROJECT_BINARY_DIR}/include/GeographicLib/Config.h
   ../include/GeographicLib/[A-Za-z]*.hpp)
 
+add_definitions(-DGEOGRAPHICLIB_DATA="${GEOGRAPHICLIB_DATA}")
 # Define the library and specify whether it is shared or not.
 if (GEOGRAPHICLIB_SHARED_LIB)
   add_library (${PROJECT_SHARED_LIBRARIES} SHARED ${SOURCES} ${HEADERS})
@@ -44,6 +45,14 @@ else ()
     ${PROJECT_SHARED_LIBRARIES} ${PROJECT_STATIC_LIBRARIES} PROPERTIES
     VERSION "${LIBVERSIONFULL}" SOVERSION "${LIBVERSION}"
     OUTPUT_NAME ${LIBNAME})
+  if (APPLE AND GEOGRAPHICLIB_PRECISION EQUAL 5)
+    if (GEOGRAPHICLIB_SHARED_LIB)
+      target_link_libraries (${PROJECT_SHARED_LIBRARIES} ${MPFR_LIBRARIES})
+    endif ()
+    if (GEOGRAPHICLIB_STATIC_LIB)
+      target_link_libraries (${PROJECT_STATIC_LIBRARIES} ${MPFR_LIBRARIES})
+    endif ()
+  endif ()
 endif ()
 
 # Specify where the library is installed, adding it to the export depends
diff --git a/src/CassiniSoldner.cpp b/src/CassiniSoldner.cpp
index 8ba1053..0f64ae4 100644
--- a/src/CassiniSoldner.cpp
+++ b/src/CassiniSoldner.cpp
@@ -13,17 +13,24 @@ namespace GeographicLib {
 
   using namespace std;
 
-  const Math::real CassiniSoldner::eps1_ =
-    real(0.01) * sqrt(numeric_limits<real>::epsilon());
-  const Math::real CassiniSoldner::tiny_ = sqrt(numeric_limits<real>::min());
+  CassiniSoldner::CassiniSoldner(const Geodesic& earth)
+    : eps1_(real(0.01) * sqrt(numeric_limits<real>::epsilon()))
+    , tiny_(sqrt(numeric_limits<real>::min()))
+    , _earth(earth) {}
 
-  void CassiniSoldner::Reset(real lat0, real lon0) throw() {
+  CassiniSoldner::CassiniSoldner(real lat0, real lon0, const Geodesic& earth)
+    : eps1_(real(0.01) * sqrt(numeric_limits<real>::epsilon()))
+    , tiny_(sqrt(numeric_limits<real>::min()))
+    , _earth(earth)
+  { Reset(lat0, lon0); }
+
+  void CassiniSoldner::Reset(real lat0, real lon0) {
     _meridian = _earth.Line(lat0, lon0, real(0),
                             Geodesic::LATITUDE | Geodesic::LONGITUDE |
                             Geodesic::DISTANCE | Geodesic::DISTANCE_IN |
                             Geodesic::AZIMUTH);
     real
-      phi = LatitudeOrigin() * Math::degree<real>(),
+      phi = LatitudeOrigin() * Math::degree(),
       f = _earth.Flattening();
     _sbet0 = (1 - f) * sin(phi);
     _cbet0 = abs(LatitudeOrigin()) == 90 ? 0 : cos(phi);
@@ -31,7 +38,7 @@ namespace GeographicLib {
   }
 
   void CassiniSoldner::Forward(real lat, real lon, real& x, real& y,
-                               real& azi, real& rk) const throw() {
+                               real& azi, real& rk) const {
     if (!Init())
       return;
     real dlon = Math::AngDiff(LongitudeOrigin(), Math::AngNormalize(lon));
@@ -66,20 +73,20 @@ namespace GeographicLib {
                      t, t, t, t, t, t, rk, t);
 
     real
-      alp0 = perp.EquatorialAzimuth() * Math::degree<real>(),
+      alp0 = perp.EquatorialAzimuth() * Math::degree(),
       calp0 = cos(alp0), salp0 = sin(alp0),
       sbet1 = lat >=0 ? calp0 : -calp0,
       cbet1 = abs(dlon) <= 90 ? abs(salp0) : -abs(salp0),
       sbet01 = sbet1 * _cbet0 - cbet1 * _sbet0,
       cbet01 = cbet1 * _cbet0 + sbet1 * _sbet0,
-      sig01 = atan2(sbet01, cbet01) / Math::degree<real>();
+      sig01 = atan2(sbet01, cbet01) / Math::degree();
     _meridian.GenPosition(true, sig01,
                           Geodesic::DISTANCE,
                           t, t, t, y, t, t, t, t);
   }
 
   void CassiniSoldner::Reverse(real x, real y, real& lat, real& lon,
-                               real& azi, real& rk) const throw() {
+                               real& azi, real& rk) const {
     if (!Init())
       return;
     real lat1, lon1;
diff --git a/src/CircularEngine.cpp b/src/CircularEngine.cpp
index e15cccd..c1e1d76 100644
--- a/src/CircularEngine.cpp
+++ b/src/CircularEngine.cpp
@@ -15,7 +15,7 @@ namespace GeographicLib {
 
   Math::real CircularEngine::Value(bool gradp, real cl, real sl,
                                    real& gradx, real& grady, real& gradz)
-    const throw() {
+    const {
     gradp = _gradp && gradp;
     const vector<real>& root_( SphericalEngine::root_ );
 
@@ -69,7 +69,7 @@ namespace GeographicLib {
         default:
           A = B = 0;
         }
-        qs = _q / SphericalEngine::scale_;
+        qs = _q / SphericalEngine::scale();
         vc = qs * (_wc[m] + A * (cl * vc + sl * vs ) + B * vc2);
         if (gradp) {
           qs /= _r;
diff --git a/src/DMS.cpp b/src/DMS.cpp
index be83c3d..06ce5be 100644
--- a/src/DMS.cpp
+++ b/src/DMS.cpp
@@ -272,7 +272,7 @@ namespace GeographicLib {
 
     // 15 - 2 * trailing = ceiling(log10(2^53/90/60^trailing)).
     // This suffices to give full real precision for numbers in [-90,90]
-    prec = min(15 + Math::extradigits - 2 * unsigned(trailing), prec);
+    prec = min(15 + Math::extra_digits() - 2 * unsigned(trailing), prec);
     real scale = 1;
     for (unsigned i = 0; i < unsigned(trailing); ++i)
       scale *= 60;
diff --git a/src/Ellipsoid.cpp b/src/Ellipsoid.cpp
index 7ad23c7..a2119b2 100644
--- a/src/Ellipsoid.cpp
+++ b/src/Ellipsoid.cpp
@@ -13,15 +13,14 @@ namespace GeographicLib {
 
   using namespace std;
 
-  const Math::real Ellipsoid::stol_ =
-    0.01 * sqrt(numeric_limits<real>::epsilon());
-
   Ellipsoid::Ellipsoid(real a, real f)
-    : _a(a)
+    : stol_(real(0.01) * sqrt(numeric_limits<real>::epsilon()))
+    , _a(a)
     , _f(f <= 1 ? f : 1/f)
     , _f1(1 - _f)
     , _f12(Math::sq(_f1))
     , _e2(_f * (2 - _f))
+    , _e(sqrt(abs(_e2)))
     , _e12(_e2 / (1 - _e2))
     , _n(_f / (2  - _f))
     , _b(_a * _f1)
@@ -30,92 +29,94 @@ namespace GeographicLib {
     , _au(_a, _f, real(0), real(1), real(0), real(1), real(1))
   {}
 
-  const Ellipsoid Ellipsoid::WGS84(Constants::WGS84_a<real>(),
-                                   Constants::WGS84_f<real>());
+  const Ellipsoid& Ellipsoid::WGS84() {
+    static const Ellipsoid wgs84(Constants::WGS84_a(), Constants::WGS84_f());
+    return wgs84;
+  }
 
-  Math::real Ellipsoid::QuarterMeridian() const throw()
+  Math::real Ellipsoid::QuarterMeridian() const
   { return _b * _ell.E(); }
 
-  Math::real Ellipsoid::Area() const throw() {
-    return 4 * Math::pi<real>() *
+  Math::real Ellipsoid::Area() const {
+    return 4 * Math::pi() *
       ((Math::sq(_a) + Math::sq(_b) *
         (_e2 == 0 ? 1 :
          (_e2 > 0 ? Math::atanh(sqrt(_e2)) : atan(sqrt(-_e2))) /
          sqrt(abs(_e2))))/2);
   }
 
-  Math::real Ellipsoid::ParametricLatitude(real phi) const throw()
+  Math::real Ellipsoid::ParametricLatitude(real phi) const
   { return atand(_f1 * tand(phi)); }
 
-  Math::real Ellipsoid::InverseParametricLatitude(real beta) const throw()
+  Math::real Ellipsoid::InverseParametricLatitude(real beta) const
   { return atand(tand(beta) / _f1); }
 
-  Math::real Ellipsoid::GeocentricLatitude(real phi) const throw()
+  Math::real Ellipsoid::GeocentricLatitude(real phi) const
   { return atand(_f12 * tand(phi)); }
 
-  Math::real Ellipsoid::InverseGeocentricLatitude(real theta) const throw()
+  Math::real Ellipsoid::InverseGeocentricLatitude(real theta) const
   { return atand(tand(theta) / _f12); }
 
-  Math::real Ellipsoid::RectifyingLatitude(real phi) const throw() {
+  Math::real Ellipsoid::RectifyingLatitude(real phi) const {
     return abs(phi) == 90 ? phi:
       90 * MeridianDistance(phi) / QuarterMeridian();
   }
 
-  Math::real Ellipsoid::InverseRectifyingLatitude(real mu) const throw() {
+  Math::real Ellipsoid::InverseRectifyingLatitude(real mu) const {
     if (abs(mu) == 90)
       return mu;
     return InverseParametricLatitude(_ell.Einv(mu * _ell.E() / 90) /
-                                     Math::degree<real>());
+                                     Math::degree());
   }
 
-  Math::real Ellipsoid::AuthalicLatitude(real phi) const throw()
+  Math::real Ellipsoid::AuthalicLatitude(real phi) const
   { return atand(_au.txif(tand(phi))); }
 
-  Math::real Ellipsoid::InverseAuthalicLatitude(real xi) const throw()
+  Math::real Ellipsoid::InverseAuthalicLatitude(real xi) const
   { return atand(_au.tphif(tand(xi))); }
 
-  Math::real Ellipsoid::ConformalLatitude(real phi) const throw()
+  Math::real Ellipsoid::ConformalLatitude(real phi) const
   { return atand(_tm.taupf(tand(phi))); }
 
-  Math::real Ellipsoid::InverseConformalLatitude(real chi) const throw()
+  Math::real Ellipsoid::InverseConformalLatitude(real chi) const
   { return atand(_tm.tauf(tand(chi))); }
 
-  Math::real Ellipsoid::IsometricLatitude(real phi) const throw()
-  { return Math::asinh(_tm.taupf(tand(phi))) / Math::degree<real>(); }
+  Math::real Ellipsoid::IsometricLatitude(real phi) const
+  { return Math::asinh(_tm.taupf(tand(phi))) / Math::degree(); }
 
-  Math::real Ellipsoid::InverseIsometricLatitude(real psi) const throw()
-  { return atand(_tm.tauf(sinh(psi * Math::degree<real>()))); }
+  Math::real Ellipsoid::InverseIsometricLatitude(real psi) const
+  { return atand(_tm.tauf(sinh(psi * Math::degree()))); }
 
-  Math::real Ellipsoid::CircleRadius(real phi) const throw() {
+  Math::real Ellipsoid::CircleRadius(real phi) const {
     return abs(phi) == 90 ? 0 :
       // a * cos(beta)
       _a / Math::hypot(real(1), _f1 * tand(phi));
   }
 
-  Math::real Ellipsoid::CircleHeight(real phi) const throw() {
+  Math::real Ellipsoid::CircleHeight(real phi) const {
     real tbeta = _f1 * tand(phi);
     // b * sin(beta)
     return _b * tbeta / Math::hypot(real(1), _f1 * tand(phi));
   }
 
-  Math::real Ellipsoid::MeridianDistance(real phi) const throw()
+  Math::real Ellipsoid::MeridianDistance(real phi) const
   { return _b * _ell.Ed( ParametricLatitude(phi) ); }
 
-  Math::real Ellipsoid::MeridionalCurvatureRadius(real phi) const throw() {
-    real v = 1 - _e2 * Math::sq(sin(phi * Math::degree<real>()));
+  Math::real Ellipsoid::MeridionalCurvatureRadius(real phi) const {
+    real v = 1 - _e2 * Math::sq(sin(phi * Math::degree()));
     return _a * (1 - _e2) / (v * sqrt(v));
   }
 
-  Math::real Ellipsoid::TransverseCurvatureRadius(real phi) const throw() {
-    real v = 1 - _e2 * Math::sq(sin(phi * Math::degree<real>()));
+  Math::real Ellipsoid::TransverseCurvatureRadius(real phi) const {
+    real v = 1 - _e2 * Math::sq(sin(phi * Math::degree()));
     return _a / sqrt(v);
   }
 
   Math::real Ellipsoid::NormalCurvatureRadius(real phi, real azi)
-    const throw() {
+    const {
     real
-      alpha = azi * Math::degree<real>(),
-      v = 1 - _e2 * Math::sq(sin(phi * Math::degree<real>()));
+      alpha = azi * Math::degree(),
+      v = 1 - _e2 * Math::sq(sin(phi * Math::degree()));
     return _a / (sqrt(v) *
                  (Math::sq(cos(alpha)) * v / (1 - _e2) + Math::sq(sin(alpha))));
   }
diff --git a/src/EllipticFunction.cpp b/src/EllipticFunction.cpp
index 3f8b412..eba6c61 100644
--- a/src/EllipticFunction.cpp
+++ b/src/EllipticFunction.cpp
@@ -9,17 +9,15 @@
 
 #include <GeographicLib/EllipticFunction.hpp>
 
+#if defined(_MSC_VER)
+// Squelch warnings about constant conditional expressions
+#  pragma warning (disable: 4127)
+#endif
+
 namespace GeographicLib {
 
   using namespace std;
 
-  const Math::real EllipticFunction::tol_ =
-    numeric_limits<real>::epsilon() * real(0.01);
-  const Math::real EllipticFunction::tolRF_ = pow(3 * tol_, 1/real(8));
-  const Math::real EllipticFunction::tolRD_ = pow(real(0.2) * tol_, 1/real(8));
-  const Math::real EllipticFunction::tolRG0_ = real(2.7) * sqrt(tol_);
-  const Math::real EllipticFunction::tolJAC_ = sqrt(tol_);
-
   /*
    * Implementation of methods given in
    *
@@ -28,12 +26,14 @@ namespace GeographicLib {
    *   Numerical Algorithms 10, 13-26 (1995)
    */
 
-  Math::real EllipticFunction::RF(real x, real y, real z) throw() {
+  Math::real EllipticFunction::RF(real x, real y, real z) {
     // Carlson, eqs 2.2 - 2.7
+    real tolRF =
+      pow(3 * numeric_limits<real>::epsilon() * real(0.01), 1/real(8));
     real
       A0 = (x + y + z)/3,
       An = A0,
-      Q = max(max(abs(A0-x), abs(A0-y)), abs(A0-z)) / tolRF_,
+      Q = max(max(abs(A0-x), abs(A0-y)), abs(A0-z)) / tolRF,
       x0 = x,
       y0 = y,
       z0 = z,
@@ -63,20 +63,22 @@ namespace GeographicLib {
       (240240 * sqrt(An));
   }
 
-  Math::real EllipticFunction::RF(real x, real y) throw() {
+  Math::real EllipticFunction::RF(real x, real y) {
     // Carlson, eqs 2.36 - 2.38
+    real tolRG0 =
+      real(2.7) * sqrt((numeric_limits<real>::epsilon() * real(0.01)));
     real xn = sqrt(x), yn = sqrt(y);
     if (xn < yn) swap(xn, yn);
-    while (abs(xn-yn) > tolRG0_ * xn) {
+    while (abs(xn-yn) > tolRG0 * xn) {
       // Max 4 trips
       real t = (xn + yn) /2;
       yn = sqrt(xn * yn);
       xn = t;
     }
-    return Math::pi<real>() / (xn + yn);
+    return Math::pi() / (xn + yn);
   }
 
-  Math::real EllipticFunction::RC(real x, real y) throw() {
+  Math::real EllipticFunction::RC(real x, real y) {
     return ( !(x >= y) ?        // x < y  and catch nans
              // http://dlmf.nist.gov/19.2.E18
              atan(sqrt((y - x) / x)) / sqrt(y - x) :
@@ -88,7 +90,7 @@ namespace GeographicLib {
                             sqrt(x / (x - y)) ) / sqrt(x - y) ) );
   }
 
-  Math::real EllipticFunction::RG(real x, real y, real z) throw() {
+  Math::real EllipticFunction::RG(real x, real y, real z) {
     if (z == 0)
       swap(y, z);
     // Carlson, eq 1.7
@@ -96,8 +98,10 @@ namespace GeographicLib {
             + sqrt(x * y / z)) / 2;
   }
 
-  Math::real EllipticFunction::RG(real x, real y) throw() {
+  Math::real EllipticFunction::RG(real x, real y) {
     // Carlson, eqs 2.36 - 2.39
+    real tolRG0 =
+      real(2.7) * sqrt((numeric_limits<real>::epsilon() * real(0.01)));
     real
       x0 = sqrt(max(x, y)),
       y0 = sqrt(min(x, y)),
@@ -105,7 +109,7 @@ namespace GeographicLib {
       yn = y0,
       s = 0,
       mul = real(0.25);
-    while (abs(xn-yn) > tolRG0_ * xn) {
+    while (abs(xn-yn) > tolRG0 * xn) {
       // Max 4 trips
       real t = (xn + yn) /2;
       yn = sqrt(xn * yn);
@@ -114,16 +118,18 @@ namespace GeographicLib {
       t = xn - yn;
       s += mul * t * t;
     }
-    return (Math::sq( (x0 + y0)/2 ) - s) * Math::pi<real>() / (2 * (xn + yn));
+    return (Math::sq( (x0 + y0)/2 ) - s) * Math::pi() / (2 * (xn + yn));
   }
 
-  Math::real EllipticFunction::RJ(real x, real y, real z, real p) throw() {
+  Math::real EllipticFunction::RJ(real x, real y, real z, real p) {
     // Carlson, eqs 2.17 - 2.25
+    real tolRD = pow(real(0.2) * (numeric_limits<real>::epsilon() * real(0.01)),
+                     1/real(8));
     real
       A0 = (x + y + z + 2*p)/5,
       An = A0,
       delta = (p-x) * (p-y) * (p-z),
-      Q = max(max(abs(A0-x), abs(A0-y)), max(abs(A0-z), abs(A0-p))) / tolRD_,
+      Q = max(max(abs(A0-x), abs(A0-y)), max(abs(A0-z), abs(A0-p))) / tolRD,
       x0 = x,
       y0 = y,
       z0 = z,
@@ -167,12 +173,14 @@ namespace GeographicLib {
       (4084080 * mul * An * sqrt(An)) + 6 * s;
   }
 
-  Math::real EllipticFunction::RD(real x, real y, real z) throw() {
+  Math::real EllipticFunction::RD(real x, real y, real z) {
     // Carlson, eqs 2.28 - 2.34
+    real tolRD = pow(real(0.2) * (numeric_limits<real>::epsilon() * real(0.01)),
+                     1/real(8));
     real
       A0 = (x + y + 3*z)/5,
       An = A0,
-      Q = max(max(abs(A0-x), abs(A0-y)), abs(A0-z)) / tolRD_,
+      Q = max(max(abs(A0-x), abs(A0-y)), abs(A0-z)) / tolRD,
       x0 = x,
       y0 = y,
       z0 = z,
@@ -208,50 +216,29 @@ namespace GeographicLib {
       (4084080 * mul * An * sqrt(An)) + 3 * s;
   }
 
-  EllipticFunction::EllipticFunction(real k2, real alpha2) throw()
-    : _k2(k2)
-    , _kp2(1 - k2)
-    , _alpha2(alpha2)
-    , _alphap2(1 - alpha2)
-    , _eps(_k2/Math::sq(sqrt(_kp2) + 1))
-      // Don't initialize _Kc, _Ec, _Dc since this constructor might be called
-      // before the static real constants tolRF_, etc., are initialized.
-    , _init(false)
-  {}
-
-  EllipticFunction::EllipticFunction(real k2, real alpha2,
-                                     real kp2, real alphap2) throw()
-    : _k2(k2)
-    , _kp2(kp2)
-    , _alpha2(alpha2)
-    , _alphap2(alphap2)
-    , _eps(_k2/Math::sq(sqrt(_kp2) + 1))
-    , _init(false)
-  {}
-
   void EllipticFunction::Reset(real k2, real alpha2,
-                               real kp2, real alphap2) throw() {
+                               real kp2, real alphap2) {
     _k2 = k2;
     _kp2 = kp2;
     _alpha2 = alpha2;
     _alphap2 = alphap2;
     _eps = _k2/Math::sq(sqrt(_kp2) + 1);
-    _init = false;
-  }
-
-  bool EllipticFunction::Init() const throw() {
-    // Complete elliptic integral K(k), Carlson eq. 4.1
-    // http://dlmf.nist.gov/19.25.E1
-    _Kc = _kp2 ? RF(_kp2, 1) : Math::infinity<real>();
-    // Complete elliptic integral E(k), Carlson eq. 4.2
-    // http://dlmf.nist.gov/19.25.E1
-    _Ec = _kp2 ? 2 * RG(_kp2, 1) : 1;
-    // D(k) = (K(k) - E(k))/m, Carlson eq.4.3
-    // http://dlmf.nist.gov/19.25.E1
-    _Dc = _kp2 ? RD(real(0), _kp2, 1) / 3 : Math::infinity<real>();
+    if (_k2) {
+      // Complete elliptic integral K(k), Carlson eq. 4.1
+      // http://dlmf.nist.gov/19.25.E1
+      _Kc = _kp2 ? RF(_kp2, 1) : Math::infinity();
+      // Complete elliptic integral E(k), Carlson eq. 4.2
+      // http://dlmf.nist.gov/19.25.E1
+      _Ec = _kp2 ? 2 * RG(_kp2, 1) : 1;
+      // D(k) = (K(k) - E(k))/k^2, Carlson eq.4.3
+      // http://dlmf.nist.gov/19.25.E1
+      _Dc = _kp2 ? RD(real(0), _kp2, 1) / 3 : Math::infinity();
+    } else {
+      _Kc = _Ec = Math::pi()/2; _Dc = _Kc/2;
+    }
     if (_alpha2) {
       // http://dlmf.nist.gov/19.25.E2
-      real rj = _kp2 ? RJ(0, _kp2, 1, _alphap2) : Math::infinity<real>();
+      real rj = _kp2 ? RJ(0, _kp2, 1, _alphap2) : Math::infinity();
       // Pi(alpha^2, k)
       _Pic = _Kc + _alpha2 * rj / 3;
       // G(alpha^2, k)
@@ -261,7 +248,6 @@ namespace GeographicLib {
     } else {
       _Pic = _Kc; _Gc = _Ec; _Hc = _Kc - _Dc;
     }
-    return _init = true;
   }
 
   /*
@@ -273,8 +259,9 @@ namespace GeographicLib {
    */
 
   void EllipticFunction::sncndn(real x, real& sn, real& cn, real& dn)
-    const throw() {
+    const {
     // Bulirsch's sncndn routine, p 89.
+    real tolJAC = sqrt(numeric_limits<real>::epsilon() * real(0.01));
     if (_kp2 != 0) {
       real mc = _kp2, d = 0;
       if (_kp2 < 0) {
@@ -286,12 +273,12 @@ namespace GeographicLib {
       real c = 0;           // To suppress warning about uninitialized variable
       real m[num_], n[num_];
       unsigned l = 0;
-      for (real a = 1; l < num_; ++l) {
-        // Max 5 trips
+      for (real a = 1; l < num_ || GEOGRAPHICLIB_PANIC; ++l) {
+        // This converges quadratically.  Max 5 trips
         m[l] = a;
         n[l] = mc = sqrt(mc);
         c = (a + mc) / 2;
-        if (!(abs(a - mc) > tolJAC_ * a)) {
+        if (!(abs(a - mc) > tolJAC * a)) {
           ++l;
           break;
         }
@@ -326,7 +313,7 @@ namespace GeographicLib {
     }
   }
 
-  Math::real EllipticFunction::F(real sn, real cn, real dn) const throw() {
+  Math::real EllipticFunction::F(real sn, real cn, real dn) const {
     // Carlson, eq. 4.5 and
     // http://dlmf.nist.gov/19.25.E5
     real fi = abs(sn) * RF(cn*cn, dn*dn, 1);
@@ -338,7 +325,7 @@ namespace GeographicLib {
     return fi;
   }
 
-  Math::real EllipticFunction::E(real sn, real cn, real dn) const throw() {
+  Math::real EllipticFunction::E(real sn, real cn, real dn) const {
     real
       cn2 = cn*cn, dn2 = dn*dn, sn2 = sn*sn,
       ei = ( _k2 <= 0 ?
@@ -361,7 +348,7 @@ namespace GeographicLib {
     return ei;
   }
 
-  Math::real EllipticFunction::D(real sn, real cn, real dn) const throw() {
+  Math::real EllipticFunction::D(real sn, real cn, real dn) const {
     // Carlson, eq. 4.8 and
     // http://dlmf.nist.gov/19.25.E5
     real di = abs(sn) * sn*sn * RD(cn*cn, dn*dn, 1) / 3;
@@ -373,7 +360,7 @@ namespace GeographicLib {
     return di;
   }
 
-  Math::real EllipticFunction::Pi(real sn, real cn, real dn) const throw() {
+  Math::real EllipticFunction::Pi(real sn, real cn, real dn) const {
     // Carlson, eq. 4.5 and
     // http://dlmf.nist.gov/19.25.E5
     real
@@ -388,7 +375,7 @@ namespace GeographicLib {
     return pii;
   }
 
-  Math::real EllipticFunction::G(real sn, real cn, real dn) const throw() {
+  Math::real EllipticFunction::G(real sn, real cn, real dn) const {
     real
       cn2 = cn*cn, dn2 = dn*dn, sn2 = sn*sn,
       gi = abs(sn) * (RF(cn2, dn2, 1) +
@@ -402,7 +389,7 @@ namespace GeographicLib {
     return gi;
   }
 
-  Math::real EllipticFunction::H(real sn, real cn, real dn) const throw() {
+  Math::real EllipticFunction::H(real sn, real cn, real dn) const {
     real
       cn2 = cn*cn, dn2 = dn*dn, sn2 = sn*sn,
       hi = abs(sn) * (RF(cn2, dn2, 1) -
@@ -416,109 +403,109 @@ namespace GeographicLib {
     return hi;
   }
 
-  Math::real EllipticFunction::deltaF(real sn, real cn, real dn) const throw() {
+  Math::real EllipticFunction::deltaF(real sn, real cn, real dn) const {
     // Function is periodic with period pi
     if (cn < 0) { cn = -cn; sn = -sn; }
-    return F(sn, cn, dn) * (Math::pi<real>()/2) / K() - atan2(sn, cn);
+    return F(sn, cn, dn) * (Math::pi()/2) / K() - atan2(sn, cn);
   }
 
-  Math::real EllipticFunction::deltaE(real sn, real cn, real dn) const throw() {
+  Math::real EllipticFunction::deltaE(real sn, real cn, real dn) const {
     // Function is periodic with period pi
     if (cn < 0) { cn = -cn; sn = -sn; }
-    return E(sn, cn, dn) * (Math::pi<real>()/2) / E() - atan2(sn, cn);
+    return E(sn, cn, dn) * (Math::pi()/2) / E() - atan2(sn, cn);
   }
 
   Math::real EllipticFunction::deltaPi(real sn, real cn, real dn)
-    const throw() {
+    const {
     // Function is periodic with period pi
     if (cn < 0) { cn = -cn; sn = -sn; }
-    return Pi(sn, cn, dn) * (Math::pi<real>()/2) / Pi() - atan2(sn, cn);
+    return Pi(sn, cn, dn) * (Math::pi()/2) / Pi() - atan2(sn, cn);
   }
 
-  Math::real EllipticFunction::deltaD(real sn, real cn, real dn) const throw() {
+  Math::real EllipticFunction::deltaD(real sn, real cn, real dn) const {
     // Function is periodic with period pi
     if (cn < 0) { cn = -cn; sn = -sn; }
-    return D(sn, cn, dn) * (Math::pi<real>()/2) / D() - atan2(sn, cn);
+    return D(sn, cn, dn) * (Math::pi()/2) / D() - atan2(sn, cn);
   }
 
-  Math::real EllipticFunction::deltaG(real sn, real cn, real dn) const throw() {
+  Math::real EllipticFunction::deltaG(real sn, real cn, real dn) const {
     // Function is periodic with period pi
     if (cn < 0) { cn = -cn; sn = -sn; }
-    return G(sn, cn, dn) * (Math::pi<real>()/2) / G() - atan2(sn, cn);
+    return G(sn, cn, dn) * (Math::pi()/2) / G() - atan2(sn, cn);
   }
 
-  Math::real EllipticFunction::deltaH(real sn, real cn, real dn) const throw() {
+  Math::real EllipticFunction::deltaH(real sn, real cn, real dn) const {
     // Function is periodic with period pi
     if (cn < 0) { cn = -cn; sn = -sn; }
-    return H(sn, cn, dn) * (Math::pi<real>()/2) / H() - atan2(sn, cn);
+    return H(sn, cn, dn) * (Math::pi()/2) / H() - atan2(sn, cn);
   }
 
-  Math::real EllipticFunction::F(real phi) const throw() {
+  Math::real EllipticFunction::F(real phi) const {
     real sn = sin(phi), cn = cos(phi);
-    return (deltaF(sn, cn, Delta(sn, cn)) + phi) * K() / (Math::pi<real>()/2);
+    return (deltaF(sn, cn, Delta(sn, cn)) + phi) * K() / (Math::pi()/2);
   }
 
-  Math::real EllipticFunction::E(real phi) const throw() {
+  Math::real EllipticFunction::E(real phi) const {
     real sn = sin(phi), cn = cos(phi);
-    return (deltaE(sn, cn, Delta(sn, cn)) + phi) * E() / (Math::pi<real>()/2);
+    return (deltaE(sn, cn, Delta(sn, cn)) + phi) * E() / (Math::pi()/2);
   }
 
-  Math::real EllipticFunction::Ed(real ang) const throw() {
+  Math::real EllipticFunction::Ed(real ang) const {
     real n = ceil(ang/360 - real(0.5));
     ang -= 360 * n;
     real
-      phi = ang * Math::degree<real>(),
+      phi = ang * Math::degree(),
       sn = abs(ang) == 180 ? 0 : sin(phi),
       cn = abs(ang) ==  90 ? 0 : cos(phi);
     return E(sn, cn, Delta(sn, cn)) + 4 * E() * n;
   }
 
-  Math::real EllipticFunction::Pi(real phi) const throw() {
+  Math::real EllipticFunction::Pi(real phi) const {
     real sn = sin(phi), cn = cos(phi);
-    return (deltaPi(sn, cn, Delta(sn, cn)) + phi) * Pi() / (Math::pi<real>()/2);
+    return (deltaPi(sn, cn, Delta(sn, cn)) + phi) * Pi() / (Math::pi()/2);
   }
 
-  Math::real EllipticFunction::D(real phi) const throw() {
+  Math::real EllipticFunction::D(real phi) const {
     real sn = sin(phi), cn = cos(phi);
-    return (deltaD(sn, cn, Delta(sn, cn)) + phi) * D() / (Math::pi<real>()/2);
+    return (deltaD(sn, cn, Delta(sn, cn)) + phi) * D() / (Math::pi()/2);
   }
 
-  Math::real EllipticFunction::G(real phi) const throw() {
+  Math::real EllipticFunction::G(real phi) const {
     real sn = sin(phi), cn = cos(phi);
-    return (deltaG(sn, cn, Delta(sn, cn)) + phi) * G() / (Math::pi<real>()/2);
+    return (deltaG(sn, cn, Delta(sn, cn)) + phi) * G() / (Math::pi()/2);
   }
 
-  Math::real EllipticFunction::H(real phi) const throw() {
+  Math::real EllipticFunction::H(real phi) const {
     real sn = sin(phi), cn = cos(phi);
-    return (deltaH(sn, cn, Delta(sn, cn)) + phi) * H() / (Math::pi<real>()/2);
+    return (deltaH(sn, cn, Delta(sn, cn)) + phi) * H() / (Math::pi()/2);
   }
 
-  Math::real EllipticFunction::Einv(real x) const throw() {
-    _init || Init();
+  Math::real EllipticFunction::Einv(real x) const {
+    real tolJAC = sqrt(numeric_limits<real>::epsilon() * real(0.01));
     real n = floor(x / (2 * _Ec) + 0.5);
     x -= 2 * _Ec * n;           // x now in [-ec, ec)
     // Linear approximation
-    real phi = Math::pi<real>() * x / (2 * _Ec); // phi in [-pi/2, pi/2)
+    real phi = Math::pi() * x / (2 * _Ec); // phi in [-pi/2, pi/2)
     // First order correction
     phi -= _eps * sin(2 * phi) / 2;
-    for (int i = 0; i < num_; ++i) {
+    for (int i = 0; i < num_ || GEOGRAPHICLIB_PANIC; ++i) {
       real
         sn = sin(phi),
         cn = cos(phi),
         dn = Delta(sn, cn),
         err = (E(sn, cn, dn) - x)/dn;
       phi = phi - err;
-      if (abs(err) < tolJAC_)
+      if (abs(err) < tolJAC)
         break;
     }
-    return n * Math::pi<real>() + phi;
+    return n * Math::pi() + phi;
   }
 
-  Math::real EllipticFunction::deltaEinv(real stau, real ctau) const throw() {
+  Math::real EllipticFunction::deltaEinv(real stau, real ctau) const {
     // Function is periodic with period pi
     if (ctau < 0) { ctau = -ctau; stau = -stau; }
     real tau = atan2(stau, ctau);
-    return Einv( tau * E() / (Math::pi<real>()/2) ) - tau;
+    return Einv( tau * E() / (Math::pi()/2) ) - tau;
   }
 
 } // namespace GeographicLib
diff --git a/src/GeoCoords.cpp b/src/GeoCoords.cpp
index 5e723f6..baf1b6e 100644
--- a/src/GeoCoords.cpp
+++ b/src/GeoCoords.cpp
@@ -45,7 +45,7 @@ namespace GeographicLib {
       } else
         throw GeographicErr("Neither " + sa[0] + " nor " + sa[2]
                             + " of the form UTM/UPS Zone + Hemisphere"
-                            + " (ex: 38N, 09S, N)");
+                            + " (ex: 38n, 09s, n)");
       UTMUPS::DecodeZone(sa[zoneind], _zone, _northp);
       for (unsigned i = 0; i < 2; ++i)
         (i ? _northing : _easting) = DMS::Decode(sa[coordind + i]);
@@ -58,7 +58,7 @@ namespace GeographicLib {
   }
 
   string GeoCoords::GeoRepresentation(int prec, bool swaplatlong) const {
-    prec = max(0, min(9 + Math::extradigits, prec) + 5);
+    prec = max(0, min(9 + Math::extra_digits(), prec) + 5);
     ostringstream os;
     os << fixed << setprecision(prec);
     real a = swaplatlong ? _long : _lat;
@@ -77,7 +77,7 @@ namespace GeographicLib {
 
   string GeoCoords::DMSRepresentation(int prec, bool swaplatlong,
                                       char dmssep) const {
-    prec = max(0, min(10 + Math::extradigits, prec) + 5);
+    prec = max(0, min(10 + Math::extra_digits(), prec) + 5);
     return DMS::Encode(swaplatlong ? _long : _lat, unsigned(prec),
                        swaplatlong ? DMS::LONGITUDE : DMS::LATITUDE, dmssep) +
       " " + DMS::Encode(swaplatlong ? _lat : _long, unsigned(prec),
@@ -86,7 +86,7 @@ namespace GeographicLib {
 
   string GeoCoords::MGRSRepresentation(int prec) const {
     // Max precision is um
-    prec = max(0, min(6, prec) + 5);
+    prec = max(-1, min(6, prec) + 5);
     string mgrs;
     MGRS::Forward(_zone, _northp, _easting, _northing, _lat, prec, mgrs);
     return mgrs;
@@ -94,7 +94,7 @@ namespace GeographicLib {
 
   string GeoCoords::AltMGRSRepresentation(int prec) const {
     // Max precision is um
-    prec = max(0, min(6, prec) + 5);
+    prec = max(-1, min(6, prec) + 5);
     string mgrs;
     MGRS::Forward(_alt_zone, _northp, _alt_easting, _alt_northing, _lat, prec,
                   mgrs);
@@ -103,11 +103,11 @@ namespace GeographicLib {
 
   void GeoCoords::UTMUPSString(int zone, bool northp,
                                real easting, real northing, int prec,
-                               std::string& utm) {
+                               bool abbrev, std::string& utm) {
     ostringstream os;
-    prec = max(-5, min(9 + Math::extradigits, prec));
+    prec = max(-5, min(9 + Math::extra_digits(), prec));
     real scale = prec < 0 ? pow(real(10), -prec) : real(1);
-    os << UTMUPS::EncodeZone(zone, northp) << fixed << setfill('0');
+    os << UTMUPS::EncodeZone(zone, northp, abbrev) << fixed << setfill('0');
     if (Math::isfinite(easting)) {
       os << " " << setprecision(max(0, prec)) << easting / scale;
       if (prec < 0 && abs(easting / scale) > real(0.5))
@@ -123,35 +123,38 @@ namespace GeographicLib {
     utm = os.str();
   }
 
-  string GeoCoords::UTMUPSRepresentation(int prec) const {
+  string GeoCoords::UTMUPSRepresentation(int prec, bool abbrev) const {
     string utm;
-    UTMUPSString(_zone, _northp, _easting, _northing, prec, utm);
+    UTMUPSString(_zone, _northp, _easting, _northing, prec, abbrev, utm);
     return utm;
   }
 
-  string GeoCoords::UTMUPSRepresentation(bool northp, int prec) const {
+  string GeoCoords::UTMUPSRepresentation(bool northp, int prec, bool abbrev)
+    const {
     real e, n;
     int z;
     UTMUPS::Transfer(_zone, _northp, _easting, _northing,
                      _zone,  northp,  e,        n,       z);
     string utm;
-    UTMUPSString(_zone, northp, e, n, prec, utm);
+    UTMUPSString(_zone, northp, e, n, prec, abbrev, utm);
     return utm;
   }
 
-  string GeoCoords::AltUTMUPSRepresentation(int prec) const {
+  string GeoCoords::AltUTMUPSRepresentation(int prec, bool abbrev) const {
     string utm;
-    UTMUPSString(_alt_zone, _northp, _alt_easting, _alt_northing, prec, utm);
+    UTMUPSString(_alt_zone, _northp, _alt_easting, _alt_northing, prec,
+                 abbrev, utm);
     return utm;
   }
 
-  string GeoCoords::AltUTMUPSRepresentation(bool northp, int prec) const {
+  string GeoCoords::AltUTMUPSRepresentation(bool northp, int prec, bool abbrev)
+    const {
     real e, n;
     int z;
     UTMUPS::Transfer(_alt_zone, _northp, _alt_easting, _alt_northing,
                      _alt_zone,  northp,      e,            n,       z);
     string utm;
-    UTMUPSString(_alt_zone, northp, e, n, prec, utm);
+    UTMUPSString(_alt_zone, northp, e, n, prec, abbrev, utm);
     return utm;
   }
 
diff --git a/src/Geocentric.cpp b/src/Geocentric.cpp
index 9f62493..634cede 100644
--- a/src/Geocentric.cpp
+++ b/src/Geocentric.cpp
@@ -28,16 +28,18 @@ namespace GeographicLib {
       throw GeographicErr("Minor radius is not positive");
   }
 
-  const Geocentric Geocentric::WGS84(Constants::WGS84_a<real>(),
-                                     Constants::WGS84_f<real>());
+  const Geocentric& Geocentric::WGS84() {
+    static const Geocentric wgs84(Constants::WGS84_a(), Constants::WGS84_f());
+    return wgs84;
+  }
 
   void Geocentric::IntForward(real lat, real lon, real h,
                               real& X, real& Y, real& Z,
-                              real M[dim2_]) const throw() {
+                              real M[dim2_]) const {
     lon = Math::AngNormalize(lon);
     real
-      phi = lat * Math::degree<real>(),
-      lam = lon * Math::degree<real>(),
+      phi = lat * Math::degree(),
+      lam = lon * Math::degree(),
       sphi = sin(phi),
       cphi = abs(lat) == 90 ? 0 : cos(phi),
       n = _a/sqrt(1 - _e2 * Math::sq(sphi)),
@@ -53,7 +55,7 @@ namespace GeographicLib {
 
   void Geocentric::IntReverse(real X, real Y, real Z,
                               real& lat, real& lon, real& h,
-                              real M[dim2_]) const throw() {
+                              real M[dim2_]) const {
     real
       R = Math::hypot(X, Y),
       slam = R ? Y / R : 0,
@@ -107,7 +109,7 @@ namespace GeographicLib {
           // N.B. cbrt always returns the real root.  cbrt(-8) = -2.
           real T = Math::cbrt(T3); // T = r * t
           // T can be zero; but then r2 / T -> 0.
-          u += T + (T != 0 ? r2 / T : 0);
+          u += T + (T ? r2 / T : 0);
         } else {
           // T is complex, but the way u is defined the result is real.
           real ang = atan2(sqrt(-disc), -(S + r3));
@@ -149,15 +151,15 @@ namespace GeographicLib {
         h = - _a * (_f >= 0 ? _e2m : 1) * H / _e2a;
       }
     }
-    lat = atan2(sphi, cphi) / Math::degree<real>();
+    lat = atan2(sphi, cphi) / Math::degree();
     // Negative signs return lon in [-180, 180).
-    lon = -atan2(-slam, clam) / Math::degree<real>();
+    lon = -atan2(-slam, clam) / Math::degree();
     if (M)
       Rotation(sphi, cphi, slam, clam, M);
   }
 
   void Geocentric::Rotation(real sphi, real cphi, real slam, real clam,
-                            real M[dim2_]) throw() {
+                            real M[dim2_]) {
     // This rotation matrix is given by the following quaternion operations
     // qrot(lam, [0,0,1]) * qrot(phi, [0,-1,0]) * [1,1,1,1]/2
     // or
diff --git a/src/Geodesic.cpp b/src/Geodesic.cpp
index a1e350a..c0482e2 100644
--- a/src/Geodesic.cpp
+++ b/src/Geodesic.cpp
@@ -30,30 +30,31 @@
 #include <GeographicLib/GeodesicLine.hpp>
 
 #if defined(_MSC_VER)
-// Squelch warnings about potentially uninitialized local variables
-#  pragma warning (disable: 4701)
+// Squelch warnings about potentially uninitialized local variables and
+// constant conditional expressions
+#  pragma warning (disable: 4701 4127)
 #endif
 
 namespace GeographicLib {
 
   using namespace std;
 
-  // Underflow guard.  We require
-  //   tiny_ * epsilon() > 0
-  //   tiny_ + epsilon() == epsilon()
-  const Math::real Geodesic::tiny_ = sqrt(numeric_limits<real>::min());
-  const Math::real Geodesic::tol0_ = numeric_limits<real>::epsilon();
-  // Increase multiplier in defn of tol1_ from 100 to 200 to fix inverse case
-  // 52.784459512564 0 -52.784459512563990912 179.634407464943777557
-  // which otherwise failed for Visual Studio 10 (Release and Debug)
-  const Math::real Geodesic::tol1_ = 200 * tol0_;
-  const Math::real Geodesic::tol2_ = sqrt(tol0_);
-  // Check on bisection interval
-  const Math::real Geodesic::tolb_ = tol0_ * tol2_;
-  const Math::real Geodesic::xthresh_ = 1000 * tol2_;
-
   Geodesic::Geodesic(real a, real f)
-    : _a(a)
+    : maxit2_(maxit1_ + Math::digits() + 10)
+      // Underflow guard.  We require
+      //   tiny_ * epsilon() > 0
+      //   tiny_ + epsilon() == epsilon()
+    , tiny_(sqrt(numeric_limits<real>::min()))
+    , tol0_(numeric_limits<real>::epsilon())
+      // Increase multiplier in defn of tol1_ from 100 to 200 to fix inverse
+      // case 52.784459512564 0 -52.784459512563990912 179.634407464943777557
+      // which otherwise failed for Visual Studio 10 (Release and Debug)
+    , tol1_(200 * tol0_)
+    , tol2_(sqrt(tol0_))
+      // Check on bisection interval
+    , tolb_(tol0_ * tol2_)
+    , xthresh_(1000 * tol2_)
+    , _a(a)
     , _f(f <= 1 ? f : 1/f)
     , _f1(1 - _f)
     , _e2(_f * (2 - _f))
@@ -86,12 +87,14 @@ namespace GeographicLib {
     C4coeff();
   }
 
-  const Geodesic Geodesic::WGS84(Constants::WGS84_a<real>(),
-                                 Constants::WGS84_f<real>());
+  const Geodesic& Geodesic::WGS84() {
+    static const Geodesic wgs84(Constants::WGS84_a(), Constants::WGS84_f());
+    return wgs84;
+  }
 
   Math::real Geodesic::SinCosSeries(bool sinp,
                                     real sinx, real cosx,
-                                    const real c[], int n) throw() {
+                                    const real c[], int n) {
     // Evaluate
     // y = sinp ? sum(c[i] * sin( 2*i    * x), i, 1, n) :
     //            sum(c[i] * cos((2*i+1) * x), i, 0, n-1)
@@ -114,7 +117,7 @@ namespace GeographicLib {
   }
 
   GeodesicLine Geodesic::Line(real lat1, real lon1, real azi1, unsigned caps)
-    const throw() {
+    const {
     return GeodesicLine(*this, lat1, lon1, azi1, caps);
   }
 
@@ -122,7 +125,7 @@ namespace GeographicLib {
                                  bool arcmode, real s12_a12, unsigned outmask,
                                  real& lat2, real& lon2, real& azi2,
                                  real& s12, real& m12, real& M12, real& M21,
-                                 real& S12) const throw() {
+                                 real& S12) const {
     return GeodesicLine(*this, lat1, lon1, azi1,
                         // Automatically supply DISTANCE_IN if necessary
                         outmask | (arcmode ? NONE : DISTANCE_IN))
@@ -135,7 +138,7 @@ namespace GeographicLib {
                                   unsigned outmask,
                                   real& s12, real& azi1, real& azi2,
                                   real& m12, real& M12, real& M21, real& S12)
-    const throw() {
+    const {
     outmask &= OUT_ALL;
     // Compute longitude difference (AngDiff does this carefully).  Result is
     // in [-180, 180] but -180 is only for west-going geodesics.  180 is for
@@ -174,13 +177,13 @@ namespace GeographicLib {
 
     real phi, sbet1, cbet1, sbet2, cbet2, s12x, m12x;
 
-    phi = lat1 * Math::degree<real>();
+    phi = lat1 * Math::degree();
     // Ensure cbet1 = +epsilon at poles
     sbet1 = _f1 * sin(phi);
     cbet1 = lat1 == -90 ? tiny_ : cos(phi);
     SinCosNorm(sbet1, cbet1);
 
-    phi = lat2 * Math::degree<real>();
+    phi = lat2 * Math::degree();
     // Ensure cbet2 = +epsilon at poles
     sbet2 = _f1 * sin(phi);
     cbet2 = abs(lat2) == 90 ? tiny_ : cos(phi);
@@ -207,7 +210,7 @@ namespace GeographicLib {
       dn2 = sqrt(1 + _ep2 * Math::sq(sbet2));
 
     real
-      lam12 = lon12 * Math::degree<real>(),
+      lam12 = lon12 * Math::degree(),
       slam12 = abs(lon12) == 180 ? 0 : sin(lam12),
       clam12 = cos(lam12);      // lon12 == 90 isn't interesting
 
@@ -249,7 +252,7 @@ namespace GeographicLib {
       if (sig12 < 1 || m12x >= 0) {
         m12x *= _b;
         s12x *= _b;
-        a12 = sig12 / Math::degree<real>();
+        a12 = sig12 / Math::degree();
       } else
         // m12 < 0, i.e., prolate and too close to anti-podal
         meridian = false;
@@ -259,7 +262,7 @@ namespace GeographicLib {
     if (!meridian &&
         sbet1 == 0 &&   // and sbet2 == 0
         // Mimic the way Lambda12 works with calp1 = 0
-        (_f <= 0 || lam12 <= Math::pi<real>() - _f * Math::pi<real>())) {
+        (_f <= 0 || lam12 <= Math::pi() - _f * Math::pi())) {
 
       // Geodesic runs along equator
       calp1 = calp2 = 0; salp1 = salp2 = 1;
@@ -288,7 +291,7 @@ namespace GeographicLib {
         m12x = Math::sq(dnm) * _b * sin(sig12 / dnm);
         if (outmask & GEODESICSCALE)
           M12 = M21 = cos(sig12 / dnm);
-        a12 = sig12 / Math::degree<real>();
+        a12 = sig12 / Math::degree();
         omg12 = lam12 / (_f1 * dnm);
       } else {
 
@@ -307,7 +310,9 @@ namespace GeographicLib {
         unsigned numit = 0;
         // Bracketing range
         real salp1a = tiny_, calp1a = 1, salp1b = tiny_, calp1b = -1;
-        for (bool tripn = false, tripb = false; numit < maxit2_; ++numit) {
+        for (bool tripn = false, tripb = false;
+             numit < maxit2_ || GEOGRAPHICLIB_PANIC;
+             ++numit) {
           // the WGS84 test set: mean = 1.47, sd = 1.25, max = 16
           // WGS84 and random input: mean = 2.85, sd = 0.60
           real dv;
@@ -329,7 +334,7 @@ namespace GeographicLib {
             real
               sdalp1 = sin(dalp1), cdalp1 = cos(dalp1),
               nsalp1 = salp1 * cdalp1 + calp1 * sdalp1;
-            if (nsalp1 > 0 && abs(dalp1) < Math::pi<real>()) {
+            if (nsalp1 > 0 && abs(dalp1) < Math::pi()) {
               calp1 = calp1 * cdalp1 - salp1 * sdalp1;
               salp1 = nsalp1;
               SinCosNorm(salp1, calp1);
@@ -363,7 +368,7 @@ namespace GeographicLib {
         }
         m12x *= _b;
         s12x *= _b;
-        a12 = sig12 / Math::degree<real>();
+        a12 = sig12 / Math::degree();
         omg12 = lam12 - omg12;
       }
     }
@@ -402,7 +407,7 @@ namespace GeographicLib {
         S12 = 0;
 
       if (!meridian &&
-          omg12 < real(0.75) * Math::pi<real>() && // Long difference too big
+          omg12 < real(0.75) * Math::pi() && // Long difference too big
           sbet2 - sbet1 < real(1.75)) {            // Lat difference too big
         // Use tan(Gamma/2) = tan(omg12/2)
         // * (tan(bet1/2)+tan(bet2/2))/(1+tan(bet1/2)*tan(bet2/2))
@@ -446,8 +451,8 @@ namespace GeographicLib {
 
     if (outmask & AZIMUTH) {
       // minus signs give range [-180, 180). 0- converts -0 to +0.
-      azi1 = 0 - atan2(-salp1, calp1) / Math::degree<real>();
-      azi2 = 0 - atan2(-salp2, calp2) / Math::degree<real>();
+      azi1 = 0 - atan2(-salp1, calp1) / Math::degree();
+      azi2 = 0 - atan2(-salp2, calp2) / Math::degree();
     }
 
     // Returned value in [0, 180]
@@ -461,7 +466,7 @@ namespace GeographicLib {
                          real& s12b, real& m12b, real& m0,
                          bool scalep, real& M12, real& M21,
                          // Scratch areas of the right size
-                         real C1a[], real C2a[]) const throw() {
+                         real C1a[], real C2a[]) const {
     // Return m12b = (reduced length)/_b; also calculate s12b = distance/_b,
     // and m0 = coefficient of secular term in expression for reduced length.
     C1f(eps, C1a);
@@ -489,7 +494,7 @@ namespace GeographicLib {
     }
   }
 
-  Math::real Geodesic::Astroid(real x, real y) throw() {
+  Math::real Geodesic::Astroid(real x, real y) {
     // Solve k^4+2*k^3-(x^2+y^2-1)*k^2-2*y^2*k-y^2 = 0 for positive root k.
     // This solution is adapted from Geocentric::Reverse.
     real k;
@@ -517,7 +522,7 @@ namespace GeographicLib {
         // N.B. cbrt always returns the real root.  cbrt(-8) = -2.
         real T = Math::cbrt(T3); // T = r * t
         // T can be zero; but then r2 / T -> 0.
-        u += T + (T != 0 ? r2 / T : 0);
+        u += T + (T ? r2 / T : 0);
       } else {
         // T is complex, but the way u is defined the result is real.
         real ang = atan2(sqrt(-disc), -(S + r3));
@@ -550,7 +555,7 @@ namespace GeographicLib {
                                     // Only updated for short lines
                                     real& dnm,
                                     // Scratch areas of the right size
-                                    real C1a[], real C2a[]) const throw() {
+                                    real C1a[], real C2a[]) const {
     // Return a starting point for Newton's method in salp1 and calp1 (function
     // value is -1).  If Newton's method doesn't need to be used, return also
     // salp2 and calp2 and function value is sig12.
@@ -569,8 +574,8 @@ namespace GeographicLib {
     // and g++ 4.4.0 (mingw) and g++ 4.6.1 (tdm mingw).
     real sbet12a;
     {
-      volatile real xx1 = sbet2 * cbet1;
-      volatile real xx2 = cbet2 * sbet1;
+      GEOGRAPHICLIB_VOLATILE real xx1 = sbet2 * cbet1;
+      GEOGRAPHICLIB_VOLATILE real xx2 = cbet2 * sbet1;
       sbet12a = xx1 + xx2;
     }
 #else
@@ -608,7 +613,7 @@ namespace GeographicLib {
       sig12 = atan2(ssig12, csig12);
     } else if (abs(_n) > real(0.1) || // Skip astroid calc if too eccentric
                csig12 >= 0 ||
-               ssig12 >= 6 * abs(_n) * Math::pi<real>() * Math::sq(cbet1)) {
+               ssig12 >= 6 * abs(_n) * Math::pi() * Math::sq(cbet1)) {
       // Nothing to do, zeroth order spherical approximation is OK
     } else {
       // Scale lam12 and bet2 to x, y coordinate system where antipodal point
@@ -617,18 +622,18 @@ namespace GeographicLib {
       // Volatile declaration needed to fix inverse case
       // 56.320923501171 0 -56.320923501171 179.664747671772880215
       // which otherwise fails with g++ 4.4.4 x86 -O3
-      volatile real x;
+      GEOGRAPHICLIB_VOLATILE real x;
       if (_f >= 0) {            // In fact f == 0 does not get here
         // x = dlong, y = dlat
         {
           real
             k2 = Math::sq(sbet1) * _ep2,
             eps = k2 / (2 * (1 + sqrt(1 + k2)) + k2);
-          lamscale = _f * cbet1 * A3f(eps) * Math::pi<real>();
+          lamscale = _f * cbet1 * A3f(eps) * Math::pi();
         }
         betscale = lamscale * cbet1;
 
-        x = (lam12 - Math::pi<real>()) / lamscale;
+        x = (lam12 - Math::pi()) / lamscale;
         y = sbet12a / betscale;
       } else {                  // _f < 0
         // x = dlat, y = dlong
@@ -638,15 +643,15 @@ namespace GeographicLib {
         real m12b, m0, dummy;
         // In the case of lon12 = 180, this repeats a calculation made in
         // Inverse.
-        Lengths(_n, Math::pi<real>() + bet12a,
+        Lengths(_n, Math::pi() + bet12a,
                 sbet1, -cbet1, dn1, sbet2, cbet2, dn2,
                 cbet1, cbet2, dummy, m12b, m0, false,
                 dummy, dummy, C1a, C2a);
-        x = -1 + m12b / (cbet1 * cbet2 * m0 * Math::pi<real>());
+        x = -1 + m12b / (cbet1 * cbet2 * m0 * Math::pi());
         betscale = x < -real(0.01) ? sbet12a / x :
-          -_f * Math::sq(cbet1) * Math::pi<real>();
+          -_f * Math::sq(cbet1) * Math::pi();
         lamscale = betscale / cbet1;
-        y = (lam12 - Math::pi<real>()) / lamscale;
+        y = (lam12 - Math::pi()) / lamscale;
       }
 
       if (y > -tol1_ && x > -1 - xthresh_) {
@@ -720,8 +725,7 @@ namespace GeographicLib {
                                 real& eps, real& domg12,
                                 bool diffp, real& dlam12,
                                 // Scratch areas of the right size
-                                real C1a[], real C2a[], real C3a[]) const
-    throw() {
+                                real C1a[], real C2a[], real C3a[]) const {
 
     if (sbet1 == 0 && calp1 == 0)
       // Break degeneracy of equatorial line.  This case has already been
@@ -795,7 +799,7 @@ namespace GeographicLib {
     return lam12;
   }
 
-  Math::real Geodesic::A3f(real eps) const throw() {
+  Math::real Geodesic::A3f(real eps) const {
     // Evaluate sum(_A3x[k] * eps^k, k, 0, nA3x_-1) by Horner's method
     real v = 0;
     for (int i = nA3x_; i > 0; )
@@ -803,7 +807,7 @@ namespace GeographicLib {
     return v;
   }
 
-  void Geodesic::C3f(real eps, real c[]) const throw() {
+  void Geodesic::C3f(real eps, real c[]) const {
     // Evaluate C3 coeffs by Horner's method
     // Elements c[1] thru c[nC3_ - 1] are set
     for (int j = nC3x_, k = nC3_ - 1; k > 0; ) {
@@ -821,7 +825,7 @@ namespace GeographicLib {
     }
   }
 
-  void Geodesic::C4f(real eps, real c[]) const throw() {
+  void Geodesic::C4f(real eps, real c[]) const {
     // Evaluate C4 coeffs by Horner's method
     // Elements c[0] thru c[nC4_ - 1] are set
     for (int j = nC4x_, k = nC4_; k > 0; ) {
@@ -841,7 +845,7 @@ namespace GeographicLib {
   // Generated by Maxima on 2010-09-04 10:26:17-04:00
 
   // The scale factor A1-1 = mean value of (d/dsigma)I1 - 1
-  Math::real Geodesic::A1m1f(real eps) throw() {
+  Math::real Geodesic::A1m1f(real eps) {
     real
       eps2 = Math::sq(eps),
       t;
@@ -862,14 +866,14 @@ namespace GeographicLib {
       t = eps2*(eps2*(eps2*(25*eps2+64)+256)+4096)/16384;
       break;
     default:
-      STATIC_ASSERT(nA1_ >= 0 && nA1_ <= 8, "Bad value of nA1_");
+      GEOGRAPHICLIB_STATIC_ASSERT(nA1_ >= 0 && nA1_ <= 8, "Bad value of nA1_");
       t = 0;
     }
     return (t + eps) / (1 - eps);
   }
 
   // The coefficients C1[l] in the Fourier expansion of B1
-  void Geodesic::C1f(real eps, real c[]) throw() {
+  void Geodesic::C1f(real eps, real c[]) {
     real
       eps2 = Math::sq(eps),
       d = eps;
@@ -957,12 +961,12 @@ namespace GeographicLib {
       c[8] = -429*d/262144;
       break;
     default:
-      STATIC_ASSERT(nC1_ >= 0 && nC1_ <= 8, "Bad value of nC1_");
+      GEOGRAPHICLIB_STATIC_ASSERT(nC1_ >= 0 && nC1_ <= 8, "Bad value of nC1_");
     }
   }
 
   // The coefficients C1p[l] in the Fourier expansion of B1p
-  void Geodesic::C1pf(real eps, real c[]) throw() {
+  void Geodesic::C1pf(real eps, real c[]) {
     real
       eps2 = Math::sq(eps),
       d = eps;
@@ -1050,12 +1054,13 @@ namespace GeographicLib {
       c[8] = 109167851*d/82575360;
       break;
     default:
-      STATIC_ASSERT(nC1p_ >= 0 && nC1p_ <= 8, "Bad value of nC1p_");
+      GEOGRAPHICLIB_STATIC_ASSERT(nC1p_ >= 0 && nC1p_ <= 8,
+                                  "Bad value of nC1p_");
     }
   }
 
   // The scale factor A2-1 = mean value of (d/dsigma)I2 - 1
-  Math::real Geodesic::A2m1f(real eps) throw() {
+  Math::real Geodesic::A2m1f(real eps) {
     real
       eps2 = Math::sq(eps),
       t;
@@ -1076,14 +1081,14 @@ namespace GeographicLib {
       t = eps2*(eps2*(eps2*(1225*eps2+1600)+2304)+4096)/16384;
       break;
     default:
-      STATIC_ASSERT(nA2_ >= 0 && nA2_ <= 8, "Bad value of nA2_");
+      GEOGRAPHICLIB_STATIC_ASSERT(nA2_ >= 0 && nA2_ <= 8, "Bad value of nA2_");
       t = 0;
     }
     return t * (1 - eps) - eps;
   }
 
   // The coefficients C2[l] in the Fourier expansion of B2
-  void Geodesic::C2f(real eps, real c[]) throw() {
+  void Geodesic::C2f(real eps, real c[]) {
     real
       eps2 = Math::sq(eps),
       d = eps;
@@ -1171,12 +1176,12 @@ namespace GeographicLib {
       c[8] = 6435*d/262144;
       break;
     default:
-      STATIC_ASSERT(nC2_ >= 0 && nC2_ <= 8, "Bad value of nC2_");
+      GEOGRAPHICLIB_STATIC_ASSERT(nC2_ >= 0 && nC2_ <= 8, "Bad value of nC2_");
     }
   }
 
   // The scale factor A3 = mean value of (d/dsigma)I3
-  void Geodesic::A3coeff() throw() {
+  void Geodesic::A3coeff() {
     switch (nA3_) {
     case 0:
       break;
@@ -1233,12 +1238,12 @@ namespace GeographicLib {
       _A3x[7] = -25/real(2048);
       break;
     default:
-      STATIC_ASSERT(nA3_ >= 0 && nA3_ <= 8, "Bad value of nA3_");
+      GEOGRAPHICLIB_STATIC_ASSERT(nA3_ >= 0 && nA3_ <= 8, "Bad value of nA3_");
     }
   }
 
   // The coefficients C3[l] in the Fourier expansion of B3
-  void Geodesic::C3coeff() throw() {
+  void Geodesic::C3coeff() {
     switch (nC3_) {
     case 0:
       break;
@@ -1343,14 +1348,14 @@ namespace GeographicLib {
       _C3x[27] = 429/real(114688);
       break;
     default:
-      STATIC_ASSERT(nC3_ >= 0 && nC3_ <= 8, "Bad value of nC3_");
+      GEOGRAPHICLIB_STATIC_ASSERT(nC3_ >= 0 && nC3_ <= 8, "Bad value of nC3_");
     }
   }
 
   // Generated by Maxima on 2012-10-19 08:02:34-04:00
 
   // The coefficients C4[l] in the Fourier expansion of I4
-  void Geodesic::C4coeff() throw() {
+  void Geodesic::C4coeff() {
     switch (nC4_) {
     case 0:
       break;
@@ -1498,7 +1503,7 @@ namespace GeographicLib {
       _C4x[35] = 1024/real(1640925);
       break;
     default:
-      STATIC_ASSERT(nC4_ >= 0 && nC4_ <= 8, "Bad value of nC4_");
+      GEOGRAPHICLIB_STATIC_ASSERT(nC4_ >= 0 && nC4_ <= 8, "Bad value of nC4_");
     }
   }
 
diff --git a/src/GeodesicExact.cpp b/src/GeodesicExact.cpp
index fad2bc9..d7c1ddd 100644
--- a/src/GeodesicExact.cpp
+++ b/src/GeodesicExact.cpp
@@ -2,7 +2,7 @@
  * \file GeodesicExact.cpp
  * \brief Implementation for GeographicLib::GeodesicExact class
  *
- * Copyright (c) Charles Karney (2012-2013) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2012-2014) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  *
@@ -30,30 +30,31 @@
 #include <GeographicLib/GeodesicLineExact.hpp>
 
 #if defined(_MSC_VER)
-// Squelch warnings about potentially uninitialized local variables
-#  pragma warning (disable: 4701)
+// Squelch warnings about potentially uninitialized local variables and
+// constant conditional expressions
+#  pragma warning (disable: 4701 4127)
 #endif
 
 namespace GeographicLib {
 
   using namespace std;
 
-  // Underflow guard.  We require
-  //   tiny_ * epsilon() > 0
-  //   tiny_ + epsilon() == epsilon()
-  const Math::real GeodesicExact::tiny_ = sqrt(numeric_limits<real>::min());
-  const Math::real GeodesicExact::tol0_ = numeric_limits<real>::epsilon();
-  // Increase multiplier in defn of tol1_ from 100 to 200 to fix inverse case
-  // 52.784459512564 0 -52.784459512563990912 179.634407464943777557
-  // which otherwise failed for Visual Studio 10 (Release and Debug)
-  const Math::real GeodesicExact::tol1_ = 200 * tol0_;
-  const Math::real GeodesicExact::tol2_ = sqrt(tol0_);
-  // Check on bisection interval
-  const Math::real GeodesicExact::tolb_ = tol0_ * tol2_;
-  const Math::real GeodesicExact::xthresh_ = 1000 * tol2_;
-
   GeodesicExact::GeodesicExact(real a, real f)
-    : _a(a)
+    : maxit2_(maxit1_ + Math::digits() + 10)
+      // Underflow guard.  We require
+      //   tiny_ * epsilon() > 0
+      //   tiny_ + epsilon() == epsilon()
+    , tiny_(sqrt(numeric_limits<real>::min()))
+    , tol0_(numeric_limits<real>::epsilon())
+      // Increase multiplier in defn of tol1_ from 100 to 200 to fix inverse
+      // case 52.784459512564 0 -52.784459512563990912 179.634407464943777557
+      // which otherwise failed for Visual Studio 10 (Release and Debug)
+    , tol1_(200 * tol0_)
+    , tol2_(sqrt(tol0_))
+      // Check on bisection interval
+    , tolb_(tol0_ * tol2_)
+    , xthresh_(1000 * tol2_)
+    , _a(a)
     , _f(f <= 1 ? f : 1/f)
     , _f1(1 - _f)
     , _e2(_f * (2 - _f))
@@ -84,11 +85,14 @@ namespace GeographicLib {
     C4coeff();
   }
 
-  const GeodesicExact GeodesicExact::WGS84(Constants::WGS84_a<real>(),
-                                           Constants::WGS84_f<real>());
+  const GeodesicExact& GeodesicExact::WGS84() {
+    static const GeodesicExact wgs84(Constants::WGS84_a(),
+                                     Constants::WGS84_f());
+    return wgs84;
+  }
 
   Math::real GeodesicExact::CosSeries(real sinx, real cosx,
-                                      const real c[], int n) throw() {
+                                      const real c[], int n) {
     // Evaluate
     // y = sum(c[i] * cos((2*i+1) * x), i, 0, n-1)
     // using Clenshaw summation.
@@ -108,7 +112,7 @@ namespace GeographicLib {
   }
 
   GeodesicLineExact GeodesicExact::Line(real lat1, real lon1, real azi1,
-                                        unsigned caps) const throw() {
+                                        unsigned caps) const {
     return GeodesicLineExact(*this, lat1, lon1, azi1, caps);
   }
 
@@ -118,7 +122,7 @@ namespace GeographicLib {
                                       real& lat2, real& lon2, real& azi2,
                                       real& s12, real& m12,
                                       real& M12, real& M21,
-                                      real& S12) const throw() {
+                                      real& S12) const {
     return GeodesicLineExact(*this, lat1, lon1, azi1,
                         // Automatically supply DISTANCE_IN if necessary
                         outmask | (arcmode ? NONE : DISTANCE_IN))
@@ -132,7 +136,7 @@ namespace GeographicLib {
                                        unsigned outmask,
                                        real& s12, real& azi1, real& azi2,
                                        real& m12, real& M12, real& M21,
-                                       real& S12) const throw() {
+                                       real& S12) const {
     outmask &= OUT_ALL;
     // Compute longitude difference (AngDiff does this carefully).  Result is
     // in [-180, 180] but -180 is only for west-going geodesics.  180 is for
@@ -174,13 +178,13 @@ namespace GeographicLib {
     // case to let the parameter default to 0.
     EllipticFunction E(-_ep2);
 
-    phi = lat1 * Math::degree<real>();
+    phi = lat1 * Math::degree();
     // Ensure cbet1 = +epsilon at poles
     sbet1 = _f1 * sin(phi);
     cbet1 = lat1 == -90 ? tiny_ : cos(phi);
     SinCosNorm(sbet1, cbet1);
 
-    phi = lat2 * Math::degree<real>();
+    phi = lat2 * Math::degree();
     // Ensure cbet2 = +epsilon at poles
     sbet2 = _f1 * sin(phi);
     cbet2 = abs(lat2) == 90 ? tiny_ : cos(phi);
@@ -209,7 +213,7 @@ namespace GeographicLib {
              sqrt(1 - _e2 * Math::sq(cbet2)) / _f1);
 
     real
-      lam12 = lon12 * Math::degree<real>(),
+      lam12 = lon12 * Math::degree(),
       slam12 = abs(lon12) == 180 ? 0 : sin(lam12),
       clam12 = cos(lam12);      // lon12 == 90 isn't interesting
 
@@ -249,7 +253,7 @@ namespace GeographicLib {
       if (sig12 < 1 || m12x >= 0) {
         m12x *= _b;
         s12x *= _b;
-        a12 = sig12 / Math::degree<real>();
+        a12 = sig12 / Math::degree();
       } else
         // m12 < 0, i.e., prolate and too close to anti-podal
         meridian = false;
@@ -259,7 +263,7 @@ namespace GeographicLib {
     if (!meridian &&
         sbet1 == 0 &&   // and sbet2 == 0
         // Mimic the way Lambda12 works with calp1 = 0
-        (_f <= 0 || lam12 <= Math::pi<real>() - _f * Math::pi<real>())) {
+        (_f <= 0 || lam12 <= Math::pi() - _f * Math::pi())) {
 
       // Geodesic runs along equator
       calp1 = calp2 = 0; salp1 = salp2 = 1;
@@ -287,7 +291,7 @@ namespace GeographicLib {
         m12x = Math::sq(dnm) * _b * sin(sig12 / dnm);
         if (outmask & GEODESICSCALE)
           M12 = M21 = cos(sig12 / dnm);
-        a12 = sig12 / Math::degree<real>();
+        a12 = sig12 / Math::degree();
         omg12 = lam12 / (_f1 * dnm);
       } else {
 
@@ -306,7 +310,9 @@ namespace GeographicLib {
         unsigned numit = 0;
         // Bracketing range
         real salp1a = tiny_, calp1a = 1, salp1b = tiny_, calp1b = -1;
-        for (bool tripn = false, tripb = false; numit < maxit2_; ++numit) {
+        for (bool tripn = false, tripb = false;
+             numit < maxit2_ || GEOGRAPHICLIB_PANIC;
+             ++numit) {
           // 1/4 meridan = 10e6 m and random input.  max err is estimated max
           // error in nm (checking solution of inverse problem by direct
           // solution).  iter is mean and sd of number of iterations
@@ -346,7 +352,7 @@ namespace GeographicLib {
             real
               sdalp1 = sin(dalp1), cdalp1 = cos(dalp1),
               nsalp1 = salp1 * cdalp1 + calp1 * sdalp1;
-            if (nsalp1 > 0 && abs(dalp1) < Math::pi<real>()) {
+            if (nsalp1 > 0 && abs(dalp1) < Math::pi()) {
               calp1 = calp1 * cdalp1 - salp1 * sdalp1;
               salp1 = nsalp1;
               SinCosNorm(salp1, calp1);
@@ -380,7 +386,7 @@ namespace GeographicLib {
         }
         m12x *= _b;
         s12x *= _b;
-        a12 = sig12 / Math::degree<real>();
+        a12 = sig12 / Math::degree();
       }
     }
 
@@ -418,7 +424,7 @@ namespace GeographicLib {
         S12 = 0;
 
       if (!meridian &&
-          omg12 < real(0.75) * Math::pi<real>() && // Long difference too big
+          omg12 < real(0.75) * Math::pi() && // Long difference too big
           sbet2 - sbet1 < real(1.75)) {            // Lat difference too big
         // Use tan(Gamma/2) = tan(omg12/2)
         // * (tan(bet1/2)+tan(bet2/2))/(1+tan(bet1/2)*tan(bet2/2))
@@ -462,8 +468,8 @@ namespace GeographicLib {
 
     if (outmask & AZIMUTH) {
       // minus signs give range [-180, 180). 0- converts -0 to +0.
-      azi1 = 0 - atan2(-salp1, calp1) / Math::degree<real>();
-      azi2 = 0 - atan2(-salp2, calp2) / Math::degree<real>();
+      azi1 = 0 - atan2(-salp1, calp1) / Math::degree();
+      azi2 = 0 - atan2(-salp2, calp2) / Math::degree();
     }
 
     // Returned value in [0, 180]
@@ -476,13 +482,13 @@ namespace GeographicLib {
                               real ssig2, real csig2, real dn2,
                               real cbet1, real cbet2,
                               real& s12b, real& m12b, real& m0,
-                              bool scalep, real& M12, real& M21) const throw() {
+                              bool scalep, real& M12, real& M21) const {
     // Return m12b = (reduced length)/_b; also calculate s12b = distance/_b,
     // and m0 = coefficient of secular term in expression for reduced length.
 
     // It's OK to have repeated dummy arguments,
     // e.g., s12b = m0 = M12 = M21 = dummy
-    m0 = - E.k2() * E.D() / (Math::pi<real>() / 2);
+    m0 = - E.k2() * E.D() / (Math::pi() / 2);
     real J12 = m0 *
       (sig12 + E.deltaD(ssig2, csig2, dn2) - E.deltaD(ssig1, csig1, dn1));
     // Missing a factor of _b.
@@ -490,7 +496,7 @@ namespace GeographicLib {
     // cancellation in the case of coincident points.
     m12b = dn2 * (csig1 * ssig2) - dn1 * (ssig1 * csig2) - csig1 * csig2 * J12;
     // Missing a factor of _b
-    s12b = E.E() / (Math::pi<real>() / 2) *
+    s12b = E.E() / (Math::pi() / 2) *
       (sig12 + E.deltaE(ssig2, csig2, dn2) - E.deltaE(ssig1, csig1, dn1));
     if (scalep) {
       real csig12 = csig1 * csig2 + ssig1 * ssig2;
@@ -500,7 +506,7 @@ namespace GeographicLib {
     }
   }
 
-  Math::real GeodesicExact::Astroid(real x, real y) throw() {
+  Math::real GeodesicExact::Astroid(real x, real y) {
     // Solve k^4+2*k^3-(x^2+y^2-1)*k^2-2*y^2*k-y^2 = 0 for positive root k.
     // This solution is adapted from Geocentric::Reverse.
     real k;
@@ -528,7 +534,7 @@ namespace GeographicLib {
         // N.B. cbrt always returns the real root.  cbrt(-8) = -2.
         real T = Math::cbrt(T3); // T = r * t
         // T can be zero; but then r2 / T -> 0.
-        u += T + (T != 0 ? r2 / T : 0);
+        u += T + (T ? r2 / T : 0);
       } else {
         // T is complex, but the way u is defined the result is real.
         real ang = atan2(sqrt(-disc), -(S + r3));
@@ -561,7 +567,7 @@ namespace GeographicLib {
                                          real& salp2, real& calp2,
                                          // Only updated for short lines
                                          real& dnm)
-    const throw() {
+    const {
     // Return a starting point for Newton's method in salp1 and calp1 (function
     // value is -1).  If Newton's method doesn't need to be used, return also
     // salp2 and calp2 and function value is sig12.
@@ -580,8 +586,8 @@ namespace GeographicLib {
     // and g++ 4.4.0 (mingw) and g++ 4.6.1 (tdm mingw).
     real sbet12a;
     {
-      volatile real xx1 = sbet2 * cbet1;
-      volatile real xx2 = cbet2 * sbet1;
+      GEOGRAPHICLIB_VOLATILE real xx1 = sbet2 * cbet1;
+      GEOGRAPHICLIB_VOLATILE real xx2 = cbet2 * sbet1;
       sbet12a = xx1 + xx2;
     }
 #else
@@ -619,7 +625,7 @@ namespace GeographicLib {
       sig12 = atan2(ssig12, csig12);
     } else if (abs(_n) > real(0.1) || // Skip astroid calc if too eccentric
                csig12 >= 0 ||
-               ssig12 >= 6 * abs(_n) * Math::pi<real>() * Math::sq(cbet1)) {
+               ssig12 >= 6 * abs(_n) * Math::pi() * Math::sq(cbet1)) {
       // Nothing to do, zeroth order spherical approximation is OK
     } else {
       // Scale lam12 and bet2 to x, y coordinate system where antipodal point
@@ -628,7 +634,7 @@ namespace GeographicLib {
       // Volatile declaration needed to fix inverse case
       // 56.320923501171 0 -56.320923501171 179.664747671772880215
       // which otherwise fails with g++ 4.4.4 x86 -O3
-      volatile real x;
+      GEOGRAPHICLIB_VOLATILE real x;
       if (_f >= 0) {            // In fact f == 0 does not get here
         // x = dlong, y = dlat
         {
@@ -638,7 +644,7 @@ namespace GeographicLib {
         }
         betscale = lamscale * cbet1;
 
-        x = (lam12 - Math::pi<real>()) / lamscale;
+        x = (lam12 - Math::pi()) / lamscale;
         y = sbet12a / betscale;
       } else {                  // _f < 0
         // x = dlat, y = dlong
@@ -648,15 +654,15 @@ namespace GeographicLib {
         real m12b, m0, dummy;
         // In the case of lon12 = 180, this repeats a calculation made in
         // Inverse.
-        Lengths(E, Math::pi<real>() + bet12a,
+        Lengths(E, Math::pi() + bet12a,
                 sbet1, -cbet1, dn1, sbet2, cbet2, dn2,
                 cbet1, cbet2, dummy, m12b, m0, false,
                 dummy, dummy);
-        x = -1 + m12b / (cbet1 * cbet2 * m0 * Math::pi<real>());
+        x = -1 + m12b / (cbet1 * cbet2 * m0 * Math::pi());
         betscale = x < -real(0.01) ? sbet12a / x :
-          -_f * Math::sq(cbet1) * Math::pi<real>();
+          -_f * Math::sq(cbet1) * Math::pi();
         lamscale = betscale / cbet1;
-        y = (lam12 - Math::pi<real>()) / lamscale;
+        y = (lam12 - Math::pi()) / lamscale;
       }
 
       if (y > -tol1_ && x > -1 - xthresh_) {
@@ -730,7 +736,7 @@ namespace GeographicLib {
                                      EllipticFunction& E,
                                      real& omg12,
                                      bool diffp, real& dlam12) const
-    throw() {
+    {
 
     if (sbet1 == 0 && calp1 == 0)
       // Break degeneracy of equatorial line.  This case has already been
@@ -790,7 +796,7 @@ namespace GeographicLib {
     real chi12 = atan2(max(cchi1 * somg2 - somg1 * cchi2, real(0)),
                        cchi1 * cchi2 + somg1 * somg2);
     lam12 = chi12 -
-      _e2/_f1 * salp0 * E.H() / (Math::pi<real>() / 2) *
+      _e2/_f1 * salp0 * E.H() / (Math::pi() / 2) *
       (sig12 + E.deltaH(ssig2, csig2, dn2) - E.deltaH(ssig1, csig1, dn1) );
 
     if (diffp) {
@@ -808,7 +814,7 @@ namespace GeographicLib {
     return lam12;
   }
 
-  void GeodesicExact::C4f(real eps, real c[]) const throw() {
+  void GeodesicExact::C4f(real eps, real c[]) const {
     // Evaluate C4 coeffs by Horner's method
     // Elements c[0] thru c[nC4_ - 1] are set
     for (int j = nC4x_, k = nC4_; k; ) {
@@ -825,7130 +831,25 @@ namespace GeographicLib {
     }
   }
 
-  // Generated by Maxima on 2012-10-19 10:22:27-04:00
-
-  // The coefficients C4[l] in the Fourier expansion of I4
-  void GeodesicExact::C4coeff() throw()
-  {
-    // Include only orders 24, 27, and 30 (using orders 24 and 27 to check for
-    // convergence of the order 30 results).
-    switch (nC4_) {
-    case 24:
-      _C4x[0] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(real(1999358874607380.L)*_n+
-        real(2285587345521480.L))+real(2629224603764220.L))+
-        real(3045433903974000.L))+real(3554456427923940.L))+
-        real(4183714264446360.L))+real(4970972324960460.L))+
-        real(5969200033218240.L))+real(7254236151480500.L))+
-        real(8937218938623976.L))+real(11185401342439324.L))+
-        real(14258313799153424.L))+real(18573329817318276.L))+
-        real(24830654835987000.L))+real(34266303673662060.L))+
-        real(49202897582694240.L))+real(74363470210208340.L))+
-        real(120397999387956360.L))+real(214996427478493500.L))+
-        real(447192569155266480.L))+real(1229779565176982820.L))+
-        real(7378677391061896920.L))-real(25825370868716639220.L))+
-        real(64563427171791598050.L))/real(96845140757687397075.L);
-      _C4x[1] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(real(14352196832160.L)*_n+real(18143010491760.L))+
-        real(23203305935040.L))+real(30058828143120.L))+real(39500055997920.L))+
-        real(52742411935920.L))+real(71702102501120.L))+real(99486667220304.L))+
-        real(141299904167968.L))+real(206182513224688.L))+
-        real(310525890362688.L))+real(485577250125968.L))+
-        real(794580954751584.L))+real(1375236267839280.L))+
-        real(2555994679620480.L))+real(5218489137558480.L))+
-        real(12140974728197280.L))+real(34399428396558960.L))+
-        real(137597713586235840.L))+real(1341577707465799440.L))-
-        real(9838236521415862560.L))+real(14757354782123793840.L))-
-        real(6456342717179159805.L))/real(32281713585895799025.L);
-      _C4x[2] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(real(112031767409760.L)*_n+real(143707902522240.L))+
-        real(186817232975520.L))+real(246503156195520.L))+
-        real(330747808183520.L))+real(452274800391680.L))+
-        real(631991683893024.L))+real(905472855280448.L))+
-        real(1335746999551328.L))+real(2039925298739328.L))+
-        real(3248344362911648.L))+real(5446614749664704.L))+
-        real(9751675353769440.L))+real(19040308193114880.L))+
-        real(41960912657102880.L))+real(111185768563490880.L))+
-        real(408746149182641760.L))+real(3577540553242131840.L))-
-        real(22910019312108267360.L))+real(30409094702558120640.L))-
-        real(9838236521415862560.L))-real(1844669347765474230.L))/
-        real(96845140757687397075.L);
-      _C4x[3] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(real(32480160924480.L)*_n+real(42473724825840.L))+
-        real(56434964292640.L))+real(76351584942160.L))+
-        real(105450461374720.L))+real(149151421424048.L))+
-        real(216924643757536.L))+real(326106771851536.L))+
-        real(510258085727936.L))+real(838941256641136.L))+
-        real(1469287881877408.L))+real(2798320262169040.L))+
-        real(5995739072484480.L))+real(15388225732922160.L))+
-        real(54558315006660960.L))+real(458055546543653520.L))-
-        real(2783173921025795520.L))+real(3297430922013008880.L))-
-        real(68798856793117920.L))-real(1469347012938732720.L))+
-        real(483127686319528965.L))/real(13835020108241056725.L);
-      _C4x[4] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(real(61593373053120.L)*_n+real(82664196067968.L))+
-        real(113184908345408.L))+real(158600828072960.L))+
-        real(228343862806464.L))+real(339524138046848.L))+
-        real(524951894472512.L))+real(851973503469312.L))+
-        real(1471189694291648.L))+real(2759208118818944.L))+
-        real(5813897943174720.L))+real(14652252730710528.L))+
-        real(50920388417623488.L))+real(417865440759569280.L))-
-        real(2463552872040872640.L))+real(2735888019452816640.L))+
-        real(225475244952235200.L))-real(1375977135862358400.L))+
-        real(334165875852287040.L))+real(47913489552349980.L))/
-        real(13835020108241056725.L);
-      _C4x[5] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(real(116901815052000.L)*_n+real(162665178856240.L))+
-        real(232452294471424.L))+real(342889966787280.L))+
-        real(525669616244512.L))+real(845442310622320.L))+
-        real(1445880195597120.L))+real(2683983711876112.L))+
-        real(5593692396246880.L))+real(13932464215913904.L))+
-        real(47800768353056640.L))+real(386485049557054800.L))-
-        real(2233470221772257376.L))+real(2379929378403817200.L))+
-        real(326011035683974080.L))-real(1258599165902406000.L))+
-        real(378682783189010400.L))-real(142511917642887120.L))+
-        real(89377086280345155.L))/real(13835020108241056725.L);
-      _C4x[6] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(1629228407930528.L)*_n+real(2388939356529152.L))+
-        real(3639389570725216.L))+real(5814633717932480.L))+
-        real(9875158781915168.L))+real(18197230911760768.L))+
-        real(37631963274426080.L))+real(92958596676550976.L))+
-        real(316045988259680672.L))+real(2528358390442176768.L))-
-        real(14403436411319236512.L))+real(14914788310942924992.L))+
-        real(2554348100439188256.L))-real(8119802402735802240.L))+
-        real(2646945490303642080.L))-real(1252011393900765120.L))+
-        real(530155896464614560.L))+real(107498213739246750.L))/
-        real(96845140757687397075.L);
-      _C4x[7] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(3578093269775104.L)*_n+real(5687997784397712.L))+
-        real(9609462802875040.L))+real(17610495752958640.L))+
-        real(36208089438373440.L))+real(88888351651007440.L))+
-        real(300146061507531232.L))+real(2381912272287266544.L))-
-        real(13423345505071318656.L))+real(13611289619044517904.L))+
-        real(2653631568740192544.L))-real(7554826635271531728.L))+
-        real(2567126221667232960.L))-real(1319935100341621680.L))+
-        real(712057517830938720.L))-real(318327837391067280.L))+
-        real(219675761488319535.L))/real(96845140757687397075.L);
-      _C4x[8] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(9344882134297728.L)*_n+real(17052302334045440.L))+
-        real(34902155158209920.L))+real(85267266561630720.L))+
-        real(286371850542771840.L))+real(2258215493643556608.L))-
-        real(12619091028769110144.L))+real(12592255538342194176.L))+
-        real(2674310239814054016.L))-real(7087386899159449344.L))+
-        real(2469789916329642368.L))-real(1324326286853409280.L))+
-        real(781134200132711040.L))-real(449188282392433920.L))+
-        real(207035569049258880.L))+real(46274153678962440.L))/
-        real(96845140757687397075.L);
-      _C4x[9] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(33710695719142240.L)*_n+real(82033363026426448.L))+
-        real(274307634242074048.L))+real(2151953414651649840.L))-
-        real(11943746423313440736.L))+real(11768554506156380688.L))+
-        real(2656740683050806912.L))-real(6694324846705525008.L))+
-        real(2372534111370988768.L))-real(1304152339674541616.L))+
-        real(804586292246013760.L))-real(508295041968638288.L))+
-        real(303435464042162592.L))-real(142566159766005360.L))+
-        real(101847069252273345.L))/real(96845140757687397075.L);
-      _C4x[10] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(37662210790798880.L)*_n+real(294198823886647680.L))-
-        real(1623746230123937568.L))+real(1583642912939883840.L))+
-        real(374294071218757536.L))-real(908376065974705920.L))+
-        real(325845462025050720.L))-real(182042393354443584.L))+
-        real(115324345382009120.L))-real(76410130129858432.L))+
-        real(50299418752812000.L))-real(30764544658330560.L))+
-        real(14642991880422048.L))+real(3412871389794750.L))/
-        real(13835020108241056725.L);
-      _C4x[11] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(1501075919503116528.L)-real(1552143373356932928.L)*_n)*_n+
-        real(367714452841178784.L))-real(866854101764130480.L))+
-        real(313774899291644032.L))-real(177299477003547728.L))+
-        real(114271319608011360.L))-real(77874555660641264.L))+
-        real(53885331728867392.L))-real(36449668807965072.L))+
-        real(22671434367950368.L))-real(10890804038539568.L))+
-        real(7910659659501261.L))/real(13835020108241056725.L);
-      _C4x[12] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(360538238351793216.L)*_n-real(830474209202681472.L))+
-        real(302723808493726400.L))-real(172487985807946240.L))+
-        real(112510525811343680.L))-real(78092355283414400.L))+
-        real(55660125309751232.L))-real(39649081749780736.L))+
-        real(27338126785513024.L))-real(17212736021193856.L))+
-        real(8325051251152064.L))+real(1983486709822292.L))/
-        real(13835020108241056725.L);
-      _C4x[13] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(2048343300695481504.L)*_n-real(1174575214532756400.L))+
-        real(772892184384100480.L))-real(543333033447540560.L))+
-        real(394812426258146400.L))-real(290054001262275824.L))+
-        real(210932617298009152.L))-real(147501043346970768.L))+
-        real(93725243308252192.L))-real(45566335422656048.L))+
-        real(33407285962107981.L))/real(96845140757687397075.L);
-      _C4x[14] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(757239210080028960.L)*_n-
-        real(537300905287869184.L))+real(395714242456307936.L))-
-        real(296644998767853120.L))+real(222719570867903648.L))-
-        real(164471843537244544.L))+real(116250524440194144.L))-
-        real(74392957708678336.L))+real(36314075371167776.L))+
-        real(8765349343650438.L))/real(96845140757687397075.L);
-      _C4x[15] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(394009676853677440.L)*_n-
-        real(299555477286704240.L))+real(229664829361176608.L))-
-        real(175256533651561040.L))+real(130955550851978944.L))-
-        real(93338256894526000.L))+real(60065708572935520.L))-
-        real(29414891274803216.L))+real(21690166092926695.L))/
-        real(96845140757687397075.L);
-      _C4x[16] = (_n*(_n*(_n*(_n*(_n*(_n*(real(233488686343708928.L)*_n-
-        real(182065233526783488.L))+real(140688277401572096.L))-
-        real(106104539418465280.L))+real(76131914426443008.L))-
-        real(49214116938230272.L))+real(24163608542877440.L))+
-        real(5881417679788560.L))/real(96845140757687397075.L);
-      _C4x[17] = (_n*(_n*(_n*(_n*(_n*(real(21019513180253472.L)*_n-
-        real(16404720495540944.L))+real(12464612278064320.L))-
-        real(8992138901419440.L))+real(5834254120326240.L))-
-        real(2870694135369360.L))+real(2124887947607295.L))/
-        real(13835020108241056725.L);
-      _C4x[18] = (_n*(_n*(_n*(_n*(real(13580299535160224.L)*_n-
-        real(10381521524479360.L))+real(7522850187332960.L))-
-        real(4895874088539840.L))+real(2413265325968160.L))+
-        real(590734532916630.L))/real(13835020108241056725.L);
-      _C4x[19] = (_n*(_n*(_n*(real(4472222311616.L)*_n-real(3252828257712.L))+
-        real(2122366467168.L))-real(1047720937104.L))+real(777582423783.L))/
-        real(7076736628256295.L);
-      _C4x[20] = (_n*(_n*(real(223285780800.L)*_n-real(146003016320.L))+
-        real(72167144896.L))+real(17737080900.L))/real(569392602273495.L);
-      _C4x[21] = (_n*(real(19420000.L)*_n-real(9609488.L))+real(7145551.L))/
-        real(87882790905.L);
-      _C4x[22] = (real(5189536.L)*_n+real(1279278.L))/real(54629842995.L);
-      _C4x[23] = real(2113.L)/real(34165005.L);
-      _C4x[24] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*((-real(14352196832160.L)*_n-
-        real(18143010491760.L))*_n-real(23203305935040.L))-
-        real(30058828143120.L))-real(39500055997920.L))-real(52742411935920.L))-
-        real(71702102501120.L))-real(99486667220304.L))-
-        real(141299904167968.L))-real(206182513224688.L))-
-        real(310525890362688.L))-real(485577250125968.L))-
-        real(794580954751584.L))-real(1375236267839280.L))-
-        real(2555994679620480.L))-real(5218489137558480.L))-
-        real(12140974728197280.L))-real(34399428396558960.L))-
-        real(137597713586235840.L))-real(1341577707465799440.L))+
-        real(9838236521415862560.L))-real(14757354782123793840.L))+
-        real(6456342717179159805.L))/real(290535422273062191225.L);
-      _C4x[25] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*((-real(37872873213120.L)*_n-real(48650645326080.L))*_n-
-        real(63349788344640.L))-real(83751522099840.L))-
-        real(112631492155840.L))-real(154435297694720.L))-
-        real(216509174726208.L))-real(311436523472256.L))-
-        real(461690986550976.L))-real(709436759006976.L))-
-        real(1138594931329856.L))-real(1928726420080768.L))-
-        real(3500601409045440.L))-real(6964159416936960.L))-
-        real(15761967190992960.L))-real(43451909553548160.L))-
-        real(169973646194761920.L))-real(1651172563034830080.L))+
-        real(12796587363519933120.L))-real(25042783872694922880.L))+
-        real(19676473042831725120.L))-real(5534008043296422690.L))/
-        real(290535422273062191225.L);
-      _C4x[26] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*((-real(11276216410560.L)*_n-real(14808964439760.L))*_n-
-        real(19775083935840.L))-real(26911076211952.L))-real(37426002516736.L))-
-        real(53377042346256.L))-real(78413480238496.L))-
-        real(119335663136560.L))-real(189587691508800.L))-
-        real(317745076104016.L))-real(570337600574176.L))-
-        real(1121753565657456.L))-real(2509425832455552.L))-
-        real(6835169002204560.L))-real(26381516514654240.L))-
-        real(251476405115755440.L))+real(1874335241372170560.L))-
-        real(3287602513899706320.L))+real(1778941868507763360.L))+
-        real(319423263682333200.L))-real(395286288806887335.L))/
-        real(41505060324723170175.L);
-      _C4x[27] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*((-real(22293547029120.L)*_n-real(30187829221632.L))*_n-
-        real(41765992461184.L))-real(59246321780736.L))-real(86549704883328.L))-
-        real(130956016858880.L))-real(206803820912000.L))-
-        real(344451241367040.L))-real(614280013891200.L))-
-        real(1199884405036288.L))-real(2663730758641536.L))-
-        real(7188536589640704.L))-real(27392007578988672.L))-
-        real(255694722422158080.L))+real(1829483620446449280.L))-
-        real(2903123099919413760.L))+real(950464878721729920.L))+
-        real(1179408973596307200.L))-real(904213546423835520.L))+
-        real(143740468657049940.L))/real(41505060324723170175.L);
-      _C4x[28] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*((-real(314227949431392.L)*_n-real(444118245821936.L))*_n-
-        real(646350803626752.L))-real(974173792477200.L))-
-        real(1532163562752928.L))-real(2541011617045552.L))-
-        real(4510409446842432.L))-real(8763719809996368.L))-
-        real(19331398316031200.L))-real(51734190824153712.L))-
-        real(194771904021722496.L))-real(1783527709272757392.L))+
-        real(12327423427055247840.L))-real(18094891139289678000.L))+
-        real(3507250699552568640.L))+real(9095826566764430640.L))-
-        real(5038504512201871200.L))+real(240795998775912720.L))+
-        real(32249464121774025.L))/real(290535422273062191225.L);
-      _C4x[29] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(676805490635072.L)*_n-real(1017107280444416.L))*_n-
-        real(1594713745528512.L))-real(2635732053411968.L))-
-        real(4660438333855808.L))-real(9013600870649088.L))-
-        real(19767938645110208.L))-real(52495817642344832.L))-
-        real(195480281809194816.L))-real(1760179895295155712.L))+
-        real(11824626509324258112.L))-real(16334739668315101824.L))+
-        real(1710845777953679808.L))+real(8831369095501451520.L))-
-        real(4080645506014096320.L))+real(706306529801792640.L))-
-        real(930808062495124800.L))+real(322494641217740250.L))/
-        real(290535422273062191225.L);
-      _C4x[30] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(234626124936960.L)*_n-real(386642889659472.L))*_n-
-        real(681291516288544.L))-real(1312131284359408.L))-
-        real(2862343556835648.L))-real(7547594230014864.L))-
-        real(27829430493060192.L))-real(246968747677612080.L))+
-        real(1620521417412248704.L))-real(2133351424824285904.L))+
-        real(88481749384377696.L))+real(1191321558116675728.L))-
-        real(497828914064756160.L))+real(139660898732647920.L))-
-        real(153511823317682400.L))+real(26761872865788240.L))+
-        real(6305357410923885.L))/real(41505060324723170175.L);
-      _C4x[31] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(4847557372167936.L)*_n-real(9299738212233728.L))*_n-
-        real(20186836594754816.L))-real(52886353091367936.L))-
-        real(193292214083564288.L))-real(1693873158585284096.L))+
-        real(10898220796744732416.L))-real(13798321323280807936.L))-
-        real(78275445405081344.L))+real(7837137740291016192.L))-
-        real(3094585124345421056.L))+real(1114048185423143936.L))-
-        real(1060048784781036288.L))+real(320499506783715840.L))-
-        real(294791386382895360.L))+real(138822461036887320.L))/
-        real(290535422273062191225.L);
-      _C4x[32] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(20252388370301728.L)*_n-real(52745822321880688.L))*_n-
-        real(191268063112166208.L))-real(1657850837456732688.L))+
-        real(10490563891587064992.L))-real(12861854000462901168.L))-
-        real(542049980036777856.L))+real(7379432078766515376.L))-
-        real(2820825068533490592.L))+real(1175289058330498832.L))-
-        real(1013781619318412224.L))+real(405766933644837744.L))-
-        real(400129854074239968.L))+real(106421061090067920.L))+
-        real(26045852034778485.L))/real(290535422273062191225.L);
-      _C4x[33] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(26991371956800576.L)*_n-real(231714588162759936.L))*_n+
-        real(1445534059265992256.L))-real(1725175886601230720.L))-
-        real(122816338489832256.L))+real(996460010778919424.L))-
-        real(373834302508781760.L))+real(170833322112089472.L))-
-        real(137893474113071680.L))+real(65398981000896768.L))-
-        real(62562454225008576.L))+real(24803908618368128.L))-
-        real(18609017165394240.L))+real(10238614169384250.L))/
-        real(41505060324723170175.L);
-      _C4x[34] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(1397065280037743040.L)*_n-real(1629617303203516880.L))-
-        real(154602841897228768.L))+real(945831163359565584.L))-
-        real(351046497363368320.L))+real(170621111324559856.L))-
-        real(131595528641218848.L))+real(69747367167890128.L))-
-        real(64126777100688576.L))+real(31033916201205168.L))-
-        real(27584611975678048.L))+real(9027432761923216.L))+
-        real(2232336230654433.L))/real(41505060324723170175.L);
-      _C4x[35] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(6309561957305042688.L)-real(1240589737259444352.L)*_n)*_n-
-        real(2327800175547030912.L))+real(1180980622816562176.L))-
-        real(882415277427055232.L))+real(504866510659064064.L))-
-        real(448407655736528768.L))+real(245693318054356480.L))-
-        real(224849316251462784.L))+real(103838551260338944.L))-
-        real(69226282290225536.L))+real(41653220906268132.L))/
-        real(290535422273062191225.L);
-      _C4x[36] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(1161351729795236112.L)-
-        real(2219511793934405088.L)*_n)*_n-real(848452198446344576.L))+
-        real(512670721913356272.L))-real(442910285238138144.L))+
-        real(264138399004226768.L))-real(241047580754142400.L))+
-        real(131028203398605744.L))-real(108394165078944864.L))+
-        real(39960256179269776.L))+real(9923358345356673.L))/
-        real(290535422273062191225.L);
-      _C4x[37] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(73543186501015040.L)-
-        real(116928193770523584.L)*_n)*_n-real(62178132929994816.L))+
-        real(39406949879342208.L))-real(35564764459944128.L))+
-        real(21367914697321216.L))-real(18783130966863168.L))+
-        real(9532087098753408.L))-real(5903541051061696.L))+
-        real(3756578290135902.L))/real(41505060324723170175.L);
-      _C4x[38] = (_n*(_n*(_n*(_n*(_n*(_n*((real(282962846327606480.L)-
-        real(426748832985298048.L)*_n)*_n-real(252224625488402784.L))+
-        real(162322457781691760.L))-real(145413778689772096.L))+
-        real(85282246727300112.L))-real(67164218836484896.L))+
-        real(26689586825247920.L))+real(6642057399330675.L))/
-        real(290535422273062191225.L);
-      _C4x[39] = (_n*(_n*(_n*(_n*(_n*((real(171060891416497152.L)-
-        real(252813007696723456.L)*_n)*_n-real(153870471779809792.L))+
-        real(98423709472671744.L))-real(83861959821448704.L))+
-        real(45293147485078528.L))-real(26715359837770240.L))+
-        real(17644253039365680.L))/real(290535422273062191225.L);
-      _C4x[40] = (_n*(_n*(_n*(_n*((real(15405921597572848.L)-
-        real(22703107707125856.L)*_n)*_n-real(13556613226824768.L))+
-        real(8376749793922704.L))-real(6372917643153440.L))+
-        real(2663272940347440.L))+real(663613230544875.L))/
-        real(41505060324723170175.L);
-      _C4x[41] = (_n*(_n*(_n*((real(9770829888267520.L)-
-        real(14611840804674368.L)*_n)*_n-real(8131320889364160.L))+
-        real(4585714449598080.L))-real(2614574103174720.L))+
-        real(1772203598749890.L))/real(41505060324723170175.L);
-      _C4x[42] = (_n*(_n*((real(365612970361968.L)-real(570013933313984.L)*_n)*
-        _n-real(271274216878560.L))+real(117458505580752.L))+
-        real(29290376930661.L))/real(2526394976287497315.L);
-      _C4x[43] = (_n*((real(138477414656.L)-real(237999188352.L)*_n)*_n-
-        real(77042430080.L))+real(53211242700.L))/real(1708177806820485.L);
-      _C4x[44] = ((real(571443856.L)-real(1286021216.L)*_n)*_n+
-        real(142575393.L))/real(16459191268065.L);
-      _C4x[45] = (real(3837834.L)-real(5479232.L)*_n)/real(163889528985.L);
-      _C4x[46] = real(3401.L)/real(512475075.L);
-      _C4x[47] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(real(317370445920.L)*_n+real(448806691200.L))+
-        real(646426411680.L))+real(950282020800.L))+real(1429333656800.L))+
-        real(2206218538496.L))+real(3507168057120.L))+real(5767343027264.L))+
-        real(9865192020320.L))+real(17676995656320.L))+real(33488086215584.L))+
-        real(67912902115520.L))+real(150025774673376.L))+
-        real(370434011539200.L))+real(1064997783175200.L))+
-        real(3833992019430720.L))+real(20234957880328800.L))+
-        real(275195427172471680.L))-real(3095948555690306400.L))+
-        real(8943851383105329600.L))-real(9838236521415862560.L))+
-        real(3689338695530948460.L))/real(484225703788436985375.L);
-      _C4x[48] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(real(273006835200.L)*_n+real(395945493120.L))+
-        real(586817304320.L))+real(891220401024.L))+real(1391712466944.L))+
-        real(2243902395520.L))+real(3755043092736.L))+real(6565741243776.L))+
-        real(12100962105856.L))+real(23789480601216.L))+real(50729386801920.L))+
-        real(120302855176064.L))+real(330215461714944.L))+
-        real(1127177777969280.L))+real(5598845488692480.L))+
-        real(71202708932284800.L))-real(749271583225889280.L))+
-        real(2083622520020142720.L))-real(2594699741911875840.L))+
-        real(1533231665675199360.L))-real(351365590050566520.L))/
-        real(69175100541205283625.L);
-      _C4x[49] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(real(7644783328320.L)*_n+real(11463151921536.L))+
-        real(17653672535744.L))+real(28034955275264.L))+real(46140945264960.L))+
-        real(79214129622656.L))+real(143068810189760.L))+
-        real(275002958065920.L))+real(571859737257536.L))+
-        real(1318302812812160.L))+real(3504178013294784.L))+
-        real(11527906439099904.L))+real(54835346728147776.L))+
-        real(661558101207857280.L))-real(6494356481802369600.L))+
-        real(16206710265246923520.L))-real(16001804691764015040.L))+
-        real(3577540553242131840.L))+real(3990333694000839360.L))-
-        real(2012366561198699160.L))/real(484225703788436985375.L);
-      _C4x[50] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(real(26475115861248.L)*_n+real(41539614960256.L))+
-        real(67477113432064.L))+real(114199555532160.L))+
-        real(203050973821696.L))+real(383622693306496.L))+
-        real(782605912198656.L))+real(1765867311381376.L))+
-        real(4580992737583360.L))+real(14651295594681984.L))+
-        real(67377092736070656.L))+real(778778239819321728.L))-
-        real(7199681361473583360.L))+real(16239641848872758400.L))-
-        real(12428950128767854080.L))-real(2389855025445148800.L))+
-        real(8126359084740046080.L))-real(3577540553242131840.L))+
-        real(361193998163869080.L))/real(484225703788436985375.L);
-      _C4x[51] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(real(89155245351584.L)*_n+real(149153978591744.L))+
-        real(261880564871520.L))+real(487975648687296.L))+
-        real(980374150402080.L))+real(2174528832954240.L))+
-        real(5532123220926176.L))+real(17294742643411520.L))+
-        real(77366539476712864.L))+real(863002470868620544.L))-
-        real(7585193591402132384.L))+real(15693208464551092160.L))-
-        real(9404921336417883360.L))-real(5330137948636394880.L))+
-        real(7799830764418529760.L))-real(1945537950304455360.L))-
-        real(117362755705907040.L))-real(77398713892257660.L))/
-        real(484225703788436985375.L);
-      _C4x[52] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(45457260285952.L)*_n+real(83737812023040.L))+
-        real(166114946518528.L))+real(363250972247296.L))+
-        real(909240139877376.L))+real(2788853668680448.L))+
-        real(12189279787747840.L))+real(131948929260364032.L))-
-        real(1111345019796781056.L))+real(2137393780481191680.L))-
-        real(1013996939409947136.L))-real(946776414349689600.L))+
-        real(953399774476010496.L))-real(157582628508775680.L))+
-        real(79357549100597760.L))-real(114167762356381440.L))+
-        real(25149161936980080.L))/real(69175100541205283625.L);
-      _C4x[53] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(189942318453120.L)*_n+real(410351442545408.L))+
-        real(1012980928078976.L))+real(3056778654199296.L))+
-        real(13096988628924288.L))+real(138181348526526720.L))-
-        real(1122379551011288448.L))+real(2028828416671970304.L))-
-        real(767178257387676288.L))-real(1016842863895980288.L))+
-        real(803459266534551680.L))-real(116643672730650112.L))+
-        real(140636860055192448.L))-real(111923990629344000.L))+
-        real(4746847262152320.L))+real(1110640545311280.L))/
-        real(69175100541205283625.L);
-      _C4x[54] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(7723646961783296.L)*_n+real(22978281808751360.L))+
-        real(96762881664332800.L))+real(998464281242844416.L))-
-        real(7861085196794636800.L))+real(13474627907417558784.L))-
-        real(4069958123809507328.L))-real(7215931220612210432.L))+
-        real(4792611664543980032.L))-real(761042021420289280.L))+
-        real(1171179839815236608.L))-real(655357035854691072.L))+
-        real(180682893468360192.L))-real(278195942665939200.L))+
-        real(89992312678304400.L))/real(484225703788436985375.L);
-      _C4x[55] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(14405141768265248.L)*_n+real(145779293550749568.L))-
-        real(1117102949679865632.L))+real(1828848446054729280.L))-
-        real(439926848739167328.L))-real(1017771749695568640.L))+
-        real(593959280462034528.L))-real(112253626276183104.L))+
-        real(174438761801173280.L))-real(79460142388452736.L))+
-        real(44691887225228256.L))-real(49229092559224512.L))+
-        real(6235198201372320.L))+real(1707469271938500.L))/
-        real(69175100541205283625.L);
-      _C4x[56] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(12188663518101012096.L)-real(7749529107656271360.L)*_n)*_n-
-        real(2314483605629072640.L))-real(6944389649078990976.L))+
-        real(3673561422166408192.L))-real(830336738803978112.L))+
-        real(1204673222855945472.L))-real(496615277157238400.L))+
-        real(402217782648790528.L))-real(342841473955274112.L))+
-        real(102042733322129152.L))-real(125663564514481280.L))+
-        real(51126839230125960.L))/real(484225703788436985375.L);
-      _C4x[57] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(1715470547628895552.L)*_n-real(6727179272983684480.L))*_n+
-        real(3300033497372594752.L))-real(872680083478257152.L))+
-        real(1159736499501920704.L))-real(464678016017634944.L))+
-        real(454556055863112000.L))-real(324768900924362496.L))+
-        real(155830643201675456.L))-real(176199306882910080.L))+
-        real(34298996071878720.L))+real(9223035149802040.L))/
-        real(484225703788436985375.L);
-      _C4x[58] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(3007114594707828480.L)*_n-real(906082597706305152.L))+
-        real(1105003357916695552.L))-real(449113673374669184.L))+
-        real(481005369829173504.L))-real(306747238116099200.L))+
-        real(197728999714817536.L))-real(193306485202325376.L))+
-        real(66552336586597120.L))-real(66923361204828800.L))+
-        real(31588680499089000.L))/real(484225703788436985375.L);
-      _C4x[59] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(149903898094015968.L)*_n-
-        real(63199387988859136.L))+real(70121541761931296.L))-
-        real(41821199445902016.L))+real(32494611518933600.L))-
-        real(28082826645933184.L))+real(13534411038166176.L))-
-        real(14448864464082496.L))+real(3591867311832800.L))+
-        real(949287373306860.L))/real(69175100541205283625.L);
-      _C4x[60] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(70080677533798400.L)*_n-
-        real(40403373734660608.L))+real(35306683625667584.L))-
-        real(27815314208570880.L))+real(16801954707449856.L))-
-        real(16857385363206656.L))+real(6576235280520192.L))-
-        real(5690097165903360.L))+real(2972595592208480.L))/
-        real(69175100541205283625.L);
-      _C4x[61] = (_n*(_n*(_n*(_n*(_n*(_n*(real(259248276999003392.L)*_n-
-        real(191355050237148672.L))+real(135196316193908480.L))-
-        real(125874310826349568.L))+real(63496051286798592.L))-
-        real(63243207899802112.L))+real(18410296043928320.L))+
-        real(4805639607595680.L))/real(484225703788436985375.L);
-      _C4x[62] = (_n*(_n*(_n*(_n*(_n*(real(21165482601397248.L)*_n-
-        real(18455065204743680.L))+real(11108412154980352.L))-
-        real(10988575908254208.L))+real(4725632718443520.L))-
-        real(3665098842785280.L))+real(2057863819620960.L))/
-        real(69175100541205283625.L);
-      _C4x[63] = (_n*(_n*(_n*(_n*(real(89112323189788000.L)*_n-
-        real(84868458671222912.L))+real(45057962898080160.L))-
-        real(42170268387240000.L))+real(13691762960410080.L))+
-        real(3542556815251020.L))/real(484225703788436985375.L);
-      _C4x[64] = (_n*(_n*(_n*(real(476846773530112.L)*_n-
-        real(459452602159488.L))+real(212997480208128.L))-
-        real(152371943821440.L))+real(90201719611080.L))/
-        real(4210658293812495525.L);
-      _C4x[65] = (_n*(_n*(real(76425666259392.L)*_n-real(67918143488384.L))+
-        real(23864233771840.L))+real(6135010589400.L))/
-        real(1113162537444682725.L);
-      _C4x[66] = (_n*(real(1053643008.L)*_n-real(709188480.L))+
-        real(436906360.L))/real(27431985446775.L);
-      _C4x[67] = (real(61416608.L)*_n+real(15713412.L))/real(3707025060375.L);
-      _C4x[68] = real(10384.L)/real(854125125.L);
-      _C4x[69] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*((-real(16545868800.L)*_n-real(26558972160.L))*_n-
-        real(43799006720.L))-real(74458311424.L))-real(131016159232.L))-
-        real(239806362880.L))-real(459418505728.L))-real(928488660736.L))-
-        real(1999821730816.L))-real(4653431335168.L))-real(11922014164480.L))-
-        real(34573841076992.L))-real(118538883692544.L))-
-        real(518607616154880.L))-real(3407992906160640.L))-
-        real(59639875857811200.L))+real(906526113038730240.L))-
-        real(3852735980414603520.L))+real(7705471960829207040.L))-
-        real(7155081106484263680.L))+real(2459559130353965640.L))/
-        real(677915985303811779525.L);
-      _C4x[70] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*((-real(58538142720.L)*_n-real(97662466048.L))*_n-
-        real(168340530176.L))-real(301206585344.L))-real(562729180160.L))-
-        real(1105930520576.L))-real(2308674507776.L))-real(5186350862336.L))-
-        real(12768092589056.L))-real(35381461391360.L))-
-        real(115132593931264.L))-real(474155534770176.L))-
-        real(2904202650467328.L))-real(46822859058554880.L))+
-        real(647518652170521600.L))-real(2481018835684945920.L))+
-        real(4532630565193651200.L))-real(4403126834759546880.L))+
-        real(2201563417379773440.L))-real(447192569155266480.L))/
-        real(225971995101270593175.L);
-      _C4x[71] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*((-real(1182937339392.L)*_n-real(2077423296256.L))*_n-
-        real(3802400960512.L))-real(7305888334080.L))-real(14874238192128.L))-
-        real(32495024308992.L))-real(77533332022272.L))-
-        real(207382612288768.L))-real(648129037319680.L))-
-        real(2547646522697472.L))-real(14773759952623616.L))-
-        real(223035848787675392.L))+real(2840932521296432640.L))-
-        real(9742784937492499200.L))+real(14947456886420567040.L))-
-        real(9871251452694293760.L))-real(323759326085260800.L))+
-        real(3852735980414603520.L))-real(1461975706853755800.L))/
-        real(677915985303811779525.L);
-      _C4x[72] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(6792109998080.L)*_n-real(12807852130304.L))*_n-
-        real(25543125909504.L))-real(54542001618944.L))-
-        real(126863277277184.L))-real(329740727844864.L))-
-        real(997480431632384.L))-real(3776015044788224.L))-
-        real(20945473526677504.L))-real(299514399427461120.L))+
-        real(3556918619555610624.L))-real(11032967086722301952.L))+
-        real(14155439335028834304.L))-real(5073464222040883200.L))-
-        real(5779955968848445440.L))+real(6434290606831288320.L))-
-        real(2072059686945669120.L))+real(137597713586235840.L))/
-        real(677915985303811779525.L);
-      _C4x[73] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(5498545266688.L)*_n-real(11517729268224.L))*_n-
-        real(26224700544000.L))-real(66552173766144.L))-
-        real(195930593347584.L))-real(718803292203520.L))-
-        real(3841803656018944.L))-real(52482742277303808.L))+
-        real(587039826765991936.L))-real(1667227192323994112.L))+
-        real(1804800343146912768.L))-real(179108019727873536.L))-
-        real(1118922391426406400.L))+real(731871768512448000.L))-
-        real(71080994899921920.L))-real(14118827754094080.L))-
-        real(15898895477401200.L))/real(96845140757687397075.L);
-      _C4x[74] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(35047232526336.L)*_n-real(87145686519808.L))*_n-
-        real(250690278295552.L))-real(895441870528512.L))-
-        real(4636554886002688.L))-real(60909165336457216.L))+
-        real(647030786881591296.L))-real(1701163016492072960.L))+
-        real(1569827665973733376.L))+real(199123813177257984.L))-
-        real(1156588948961511424.L))+real(493641069365731328.L))-
-        real(5537459281065984.L))+real(97709908415139840.L))-
-        real(91528952336885760.L))+real(14331827310729120.L))/
-        real(96845140757687397075.L);
-      _C4x[75] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(305285790954496.L)*_n-real(1065479510857216.L))*_n-
-        real(5367450969573376.L))-real(68156970345970176.L))+
-        real(692250924670313472.L))-real(1700792328461852160.L))+
-        real(1350276171120070656.L))+real(447958408510029312.L))-
-        real(1089580388522673152.L))+real(320713760839981568.L))-
-        real(27927099204524032.L))+real(156890446098642432.L))-
-        real(69929474315480064.L))-real(3111645696929280.L))-
-        real(1658353690944240.L))/real(96845140757687397075.L);
-      _C4x[76] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(42229901571899392.L)*_n-real(520507823176384512.L))*_n+
-        real(5082527022402486272.L))-real(11761333412881776640.L))+
-        real(8094934215344406528.L))+real(4248953186446409728.L))-
-        real(6925601345339801600.L))+real(1490686984511176704.L))-
-        real(493932233363537920.L))+real(1168235552825901056.L))-
-        real(301464818968707072.L))+real(164057815030480896.L))-
-        real(251302433428193280.L))+real(59732484360696000.L))/
-        real(677915985303811779525.L);
-      _C4x[77] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(5257878379207406592.L)*_n-real(11535963820106860288.L))+
-        real(6925708096131216896.L))+real(4941017122645820160.L))-
-        real(6204077377016465408.L))+real(1054133475733859584.L))-
-        real(755149447055721984.L))+real(1077253339035498240.L))-
-        real(219013245834249216.L))+real(335393525246959872.L))-
-        real(271285432312742400.L))+real(9794275265096448.L))+
-        real(2778718129058424.L))/real(677915985303811779525.L);
-      _C4x[78] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(5928474029428380672.L)*_n+real(5353966408098588672.L))-
-        real(5543142534577005568.L))+real(815909855239413760.L))-
-        real(938300516833369088.L))+real(938842870494599168.L))-
-        real(216299111776670720.L))+real(433964216427384832.L))-
-        real(229218182294162432.L))+real(74346910989223936.L))-
-        real(119253523284460544.L))+real(36991849087314128.L))/
-        real(677915985303811779525.L);
-      _C4x[79] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(695425721257037568.L)-
-        real(4966296417574646272.L)*_n)*_n-real(1049722309639055360.L))+
-        real(804126897969488128.L))-real(252106372259470848.L))+
-        real(471035971008664320.L))-real(191180581081469952.L))+
-        real(145544404923278592.L))-real(153181806523501056.L))+
-        real(15430278351984384.L))+real(4563635253280152.L))/
-        real(677915985303811779525.L);
-      _C4x[80] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(98700779151294464.L)-
-        real(158129642176020480.L)*_n)*_n-real(42775972435689472.L))+
-        real(67135745639350272.L))-real(24535176192491520.L))+
-        real(28605295271804928.L))-real(21639588578820096.L))+
-        real(6613915913256960.L))-real(9259482278559744.L))+
-        real(3453672900064128.L))/real(96845140757687397075.L);
-      _C4x[81] = (_n*(_n*(_n*(_n*(_n*(_n*((real(64180463283399680.L)-
-        real(49222696013062144.L)*_n)*_n-real(24040453782874112.L))+
-        real(33482163531023360.L))-real(20089351832301568.L))+
-        real(11542142133902336.L))-real(13185985838921728.L))+
-        real(2044543018972160.L))+real(583241277623200.L))/
-        real(96845140757687397075.L);
-      _C4x[82] = (_n*(_n*(_n*(_n*(_n*((real(35923936524951552.L)-
-        real(24968440568492032.L)*_n)*_n-real(18747458754613248.L))+
-        real(15819949076201472.L))-real(14330204513759232.L))+
-        real(4661828567015424.L))-real(5553113534976000.L))+
-        real(2366924995310400.L))/real(96845140757687397075.L);
-      _C4x[83] = (_n*(_n*(_n*(_n*((real(133168047742901248.L)-
-        real(126150281396164608.L)*_n)*_n-real(100154530892681216.L))+
-        real(52047248303490048.L))-real(59189313238272000.L))+
-        real(11893293825960960.L))+real(3297500546790240.L))/
-        real(677915985303811779525.L);
-      _C4x[84] = (_n*(_n*(_n*((real(69695693352140800.L)-
-        real(97688010118627328.L)*_n)*_n-real(68445171555532800.L))+
-        real(24262380620513280.L))-real(25086978805432320.L))+
-        real(11812840276083840.L))/real(677915985303811779525.L);
-      _C4x[85] = (_n*(_n*((real(7314406029616896.L)-real(14381433989094400.L)*
-        _n)*_n-real(8001235764039168.L))+real(1917432226983168.L))+
-        real(520752507222024.L))/real(135583197060762355905.L);
-      _C4x[86] = (_n*((real(1294831347712.L)-real(3365292432384.L)*_n)*_n-
-        real(1193044751360.L))+real(606224480400.L))/real(47225077346138055.L);
-      _C4x[87] = ((real(37023086848.L)-real(135977211392.L)*_n)*_n+
-        real(9903771944.L))/real(3264406268166225.L);
-      _C4x[88] = (real(16812224.L)-real(31178752.L)*_n)/real(1729945028175.L);
-      _C4x[89] = real(70576.L)/real(29211079275.L);
-      _C4x[90] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(real(1806732800.L)*_n+real(3354817536.L))+
-        real(6474635776.L))+real(13058088960.L))+real(27705484800.L))+
-        real(62364503040.L))+real(150565728768.L))+real(395569133568.L))+
-        real(1153743306240.L))+real(3845811020800.L))+real(15328303925760.L))+
-        real(79025922461696.L))+real(622329139385856.L))+
-        real(13335624415411200.L))-real(255599467962048000.L))+
-        real(1431357020587468800.L))-real(4079367508674286080.L))+
-        real(6604690252139320320.L))-real(5503908543449433600.L))+
-        real(1788770276621065920.L))/real(871606266819186573675.L);
-      _C4x[91] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(real(31160807424.L)*_n+real(61322082304.L))+
-        real(126640553984.L))+real(276675840000.L))+real(646157094912.L))+
-        real(1635731822592.L))+real(4575772680192.L))+real(14548153690112.L))+
-        real(54940157440000.L))+real(266218026891264.L))+
-        real(1951122775261184.L))+real(38446111277615104.L))-
-        real(667848070723792896.L))+real(3333906103852800000.L))-
-        real(8342766634281246720.L))+real(11900711228312954880.L))-
-        real(9842283512991928320.L))+real(4403126834759546880.L))-
-        real(825586281517415040.L))/real(871606266819186573675.L);
-      _C4x[92] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(real(341540329472.L)*_n+real(727668064256.L))+
-        real(1652933732352.L))+real(4057463574528.L))+real(10966330669056.L))+
-        real(33541411577856.L))+real(121216399689728.L))+
-        real(558455712346112.L))+real(3859568036222976.L))+
-        real(70941192605581312.L))-real(1132276604451657728.L))+
-        real(5075123766412578816.L))-real(10946236136820590592.L))+
-        real(12254549796135198720.L))-real(5602740337728092160.L))-
-        real(1990267857197813760.L))+real(3367096991286712320.L))-
-        real(1100781708689886720.L))/real(871606266819186573675.L);
-      _C4x[93] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(469241266176.L)*_n+real(1122157381632.L))+real(2946084098048.L))+
-        real(8722115483648.L))+real(30380136603648.L))+real(134171246389248.L))+
-        real(882676460449792.L))+real(15296036786436096.L))-
-        real(226926232758206464.L))+real(923361337578817536.L))-
-        real(1723285590740496384.L))+real(1446044552747849728.L))-
-        real(24723824313016320.L))-real(929937542568007680.L))+
-        real(689388279303352320.L))-real(177215631120353280.L))+
-        real(6937699844684160.L))/real(124515180974169510525.L);
-      _C4x[94] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(4792552670208.L)*_n+real(13797968873472.L))+
-        real(46567221906432.L))+real(198358745567232.L))+
-        real(1251006461596672.L))+real(20607164849461248.L))-
-        real(286876098739086336.L))+real(1070950837277220864.L))-
-        real(1744206736765459456.L))+real(1046601014161680384.L))+
-        real(529534896386501632.L))-real(1054375146901442560.L))+
-        real(422040761261061120.L))+real(13801312887060480.L))-
-        real(2921136776709120.L))-real(16674822433714560.L))/
-        real(124515180974169510525.L);
-      _C4x[95] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(457253050314752.L)*_n+real(1887492834805760.L))+
-        real(11474960739164160.L))+real(180846368857290752.L))-
-        real(2380842436087263232.L))+real(8230732165125679104.L))-
-        real(11800798848150781952.L))+real(4673866832177256448.L))+
-        real(5933823659285458944.L))-real(6529078157228505088.L))+
-        real(1217244458772930560.L))+real(131933777549801472.L))+
-        real(767894888560300032.L))-real(498456005927147520.L))+
-        real(58787877631271040.L))/real(871606266819186573675.L);
-      _C4x[96] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(2034847651719168.L)*_n+real(30843702130925568.L))-
-        real(386471325623330816.L))+real(1247190874458378240.L))-
-        real(1586744442263844864.L))+real(347403149298647040.L))+
-        real(998125552961239040.L))-real(744993018003247104.L))+
-        real(40773037287516160.L))-real(53852832074948608.L))+
-        real(150636060145391616.L))-real(37627628509261824.L))-
-        real(4724621221459968.L))-real(3069310381324800.L))/
-        real(124515180974169510525.L);
-      _C4x[97] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(9052129090954414080.L)-real(2984381197523116032.L)*_n)*_n-
-        real(10290707408154349568.L))+real(635622021192259584.L))+
-        real(7314257541586731008.L))-real(3970718183852808192.L))-
-        real(40914328438910976.L))-real(850755590059182080.L))+
-        real(940894939424219136.L))-real(83120546467510272.L))+
-        real(186629253504626688.L))-real(219415473714898944.L))+
-        real(40429168019388288.L))/real(871606266819186573675.L);
-      _C4x[98] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(9443940305919116800.L)*_n-real(762942869175079936.L))*_n+
-        real(7228014979728711168.L))-real(2959689807403814912.L))-
-        real(36572693608381952.L))-real(1133362591992056832.L))+
-        real(701394424243054080.L))-real(78029044292978688.L))+
-        real(368220571488225792.L))-real(196902513544332288.L))-
-        real(6240663471641088.L))-real(3026445874275264.L))/
-        real(871606266819186573675.L);
-      _C4x[99] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(6923992234055540736.L)*_n-real(2194738354062471168.L))+
-        real(112113459619725312.L))-real(1242876977080782848.L))+
-        real(481676035337183232.L))-real(169171412057518080.L))+
-        real(437503652620812288.L))-real(128676265734868992.L))+
-        real(70483563070169088.L))-real(110377237616013312.L))+
-        real(27114236814276864.L))/real(871606266819186573675.L);
-      _C4x[100] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(43194640264409088.L)*_n-
-        real(176681272721178624.L))+real(46742589687320576.L))-
-        real(40223654794616832.L))+real(60694833131581440.L))-
-        real(13244118889218048.L))+real(22297358447087616.L))-
-        real(18017382895755264.L))+real(577794647764992.L))+
-        real(180445453095936.L))/real(124515180974169510525.L);
-      _C4x[101] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(33922707161907200.L)*_n-
-        real(53833689181081600.L))+real(53389011405594624.L))-
-        real(13631522973020160.L))+real(30408258580267008.L))-
-        real(15285124271149056.L))+real(5425597726531584.L))-
-        real(8837278156664832.L))+real(2666877652373760.L))/
-        real(124515180974169510525.L);
-      _C4x[102] = (_n*(_n*(_n*(_n*(_n*(_n*(real(313833724893591552.L)*_n-
-        real(121949742953385984.L))+real(236693559212730368.L))-
-        real(87728361723125760.L))+real(80399991459207168.L))-
-        real(81231846402158592.L))+real(6873156243179520.L))+
-        real(2132364860640000.L))/real(871606266819186573675.L);
-      _C4x[103] = (_n*(_n*(_n*(_n*(_n*(real(33782729382322176.L)*_n-
-        real(11390490463793152.L))+real(16501329095311360.L))-
-        real(11364797211217920.L))+real(3604696586526720.L))-
-        real(5386139578183680.L))+real(1896701494728960.L))/
-        real(124515180974169510525.L);
-      _C4x[104] = (_n*(_n*(_n*(_n*(real(137907822072991744.L)*_n-
-        real(72278885831720960.L))+real(48390416246108160.L))-
-        real(54127280904560640.L))+real(7031949305794560.L))+
-        real(2090449232686080.L))/real(871606266819186573675.L);
-      _C4x[105] = (_n*(_n*(_n*(real(1268559669477376.L)*_n-
-        real(1055625510481920.L))+real(337844092723200.L))-
-        real(446064994013184.L))+real(176958549427968.L))/
-        real(15847386669439755885.L);
-      _C4x[106] = (_n*(_n*(real(11327093819904.L)*_n-real(13040475800576.L))+
-        real(2209574022656.L))+real(635330794560.L))/real(303589782939458925.L);
-      _C4x[107] = (_n*(real(23101878272.L)*_n-real(26986989568.L))+
-        real(11760203136.L))/real(1399031257785525.L);
-      _C4x[108] = (real(2135226368.L)*_n+real(598833664.L))/
-        real(340304900542425.L);
-      _C4x[109] = real(567424.L)/real(87633237825.L);
-      _C4x[110] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*((-real(392933376.L)*_n-real(865908736.L))*_n-real(2015985664.L))-
-        real(5002905600.L))-real(13385551872.L))-real(39200544768.L))-
-        real(128292691968.L))-real(483473385472.L))-real(2197606297600.L))-
-        real(13053781407744.L))-real(119901399597056.L))-
-        real(3042498014775296.L))+real(70412096913371136.L))-
-        real(488972895231744000.L))+real(1799420254452817920.L))-
-        real(4048695572518840320.L))+real(5698164139100590080.L))-
-        real(4403126834759546880.L))+real(1375977135862358400.L))/
-        real(1065296548334561367825.L);
-      _C4x[111] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((-real(10859667456.L)*_n-real(26129596416.L))*_n-real(67565166592.L))-
-        real(190510645248.L))-real(597656199168.L))-real(2147714695168.L))-
-        real(9251328565248.L))-real(51687700119552.L))-real(442510004084736.L))-
-        real(10350198236184576.L))+real(217800892368052224.L))-
-        real(1352607688854388736.L))+real(4365550008629010432.L))-
-        real(8449451629604536320.L))+real(10196714775232634880.L))-
-        real(7524848336802693120.L))+real(3108089530418503680.L))-
-        real(550390854344943360.L))/real(1065296548334561367825.L);
-      _C4x[112] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(28322922496.L)*_n-real(77318326272.L))*_n-real(233990443008.L))-
-        real(807704598528.L))-real(3324931350528.L))-real(17642111838208.L))-
-        real(142325808197632.L))-real(3105726287394816.L))+
-        real(60163327626133504.L))-real(337509386084304896.L))+
-        real(955387198567870464.L))-real(1536585681053964288.L))+
-        real(1352359321669509120.L))-real(401084780036843520.L))-
-        real(377800356454379520.L))+real(410906573257082880.L))-
-        real(122566030589420160.L))/real(152185221190651623975.L);
-      _C4x[113] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(3451898904576.L)*_n-real(11509470429184.L))*_n-
-        real(45566660952064.L))-real(231289205489664.L))-
-        real(1772892123971584.L))-real(36430772070547456.L))+
-        real(656327536659873792.L))-real(3359914290911510528.L))+
-        real(8398146137172262912.L))-real(11093579178112155648.L))+
-        real(6125882406813188096.L))+real(2648948920916049920.L))-
-        real(6159280396664586240.L))+real(3575132732167127040.L))-
-        real(763390410979983360.L))+real(10223978718481920.L))/
-        real(1065296548334561367825.L);
-      _C4x[114] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(76683653804032.L)*_n-real(374463390386176.L))*_n-
-        real(2745016498610176.L))-real(53512872384018432.L))+
-        real(904156832243331072.L))-real(4262573203092793344.L))+
-        real(9482935732681162752.L))-real(10205760518322690048.L))+
-        real(2403880569128636416.L))+real(5958539126415669248.L))-
-        real(5957055786116915200.L))+real(1498212950990063616.L))+
-        real(298006753603055616.L))+real(48008247895480320.L))-
-        real(111611767676760960.L))/real(1065296548334561367825.L);
-      _C4x[115] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(554014149025792.L)*_n-real(10308000440942592.L))*_n+
-        real(164484462983684096.L))-real(719825874104074240.L))+
-        real(1436205938503901184.L))-real(1246004554450534400.L))-
-        real(105163267509248000.L))+real(1032509428877082624.L))-
-        real(613525591346421760.L))+real(1918121007546368.L))-
-        real(1044076473114624.L))+real(111223341156089856.L))-
-        real(54798832518438912.L))+real(4984983412427520.L))/
-        real(152185221190651623975.L);
-      _C4x[116] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(198527119152488448.L)*_n-real(812046458690959360.L))+
-        real(1463063303185608704.L))-real(1006189438757087232.L))-
-        real(437331274659282944.L))+real(1030813109133715456.L))-
-        real(368173541652836352.L))-real(60736720782428160.L))-
-        real(99244829673136128.L))+real(128697004859443200.L))-
-        real(15795452235878400.L))-real(3877914909370368.L))-
-        real(3732916453425024.L))/real(152185221190651623975.L);
-      _C4x[117] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(10161768486526976000.L)*_n-real(5391658475412127744.L))-
-        real(4639245548691324928.L))+real(6560265942775365632.L))-
-        real(1288318466069168128.L))-real(246271563805360128.L))-
-        real(1138793026234286080.L))+real(625782633730408448.L))+
-        real(17323466731225088.L))+real(212323226814906368.L))-
-        real(187612989987684352.L))+real(27777611745286144.L))/
-        real(1065296548334561367825.L);
-      _C4x[118] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(5661337451056508928.L)-
-        real(5624892992935469056.L)*_n)*_n-real(473813810441388032.L))+
-        real(151095731556732928.L))-real(1260342903828406272.L))+
-        real(311162912578990080.L))-real(75331672625922048.L))+
-        real(376502965042778112.L))-real(132150153865863168.L))-
-        real(12217548259381248.L))-real(6620294465535744.L))/
-        real(1065296548334561367825.L);
-      _C4x[119] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(78263723078057984.L)-
-        real(5034390572679168.L)*_n)*_n-real(166737284054204416.L))+
-        real(15583915068260352.L))-real(35331513829539840.L))+
-        real(55980919345840128.L))-real(7948506096353280.L))+
-        real(10959902127390720.L))-real(14302725018796032.L))+
-        real(2871205591908864.L))/real(152185221190651623975.L);
-      _C4x[120] = (_n*(_n*(_n*(_n*(_n*(_n*((real(33212974310010880.L)-
-        real(975767634379243520.L)*_n)*_n-real(395544530406187008.L))+
-        real(319933879478456320.L))-real(41679209874046976.L))+
-        real(168633590086463488.L))-real(98771750032105472.L))-
-        real(2270478922428416.L))-real(1039330428371200.L))/
-        real(1065296548334561367825.L);
-      _C4x[121] = (_n*(_n*(_n*(_n*(_n*((real(227465211760410624.L)-
-        real(483044026864402432.L)*_n)*_n-real(80632288666288128.L))+
-        real(214632992863027200.L))-real(67273596127051776.L))+
-        real(36701859280257024.L))-real(58103190002565120.L))+
-        real(14534198890122240.L))/real(1065296548334561367825.L);
-      _C4x[122] = (_n*(_n*(_n*(_n*((real(30832813228552192.L)-
-        real(20115348541956096.L)*_n)*_n-real(6893529524879360.L))+
-        real(12232673379717120.L))-real(9848731208785920.L))+
-        real(289254201569280.L))+real(95586646544640.L))/
-        real(152185221190651623975.L);
-      _C4x[123] = (_n*(_n*(_n*((real(1572942643527680.L)-
-        real(666117418074112.L)*_n)*_n-real(760917298298880.L))+
-        real(286428586475520.L))-real(469663005818880.L))+
-        real(139020022863360.L))/real(13835020108241056725.L);
-      _C4x[124] = (_n*(_n*((real(4481427708850176.L)-real(4302902592716800.L)*
-        _n)*_n-real(4381314699976704.L))+real(322683226951680.L))+
-        real(103467567151872.L))/real(96845140757687397075.L);
-      _C4x[125] = (_n*((real(5356912246784.L)-real(16274729926656.L)*_n)*_n-
-        real(8300880265216.L))+real(2806096398336.L))/
-        real(371054179148227575.L);
-      _C4x[126] = ((real(5079242752.L)-real(45133008896.L)*_n)*_n+
-        real(1557031040.L))/real(1399031257785525.L);
-      _C4x[127] = (real(39440128.L)-real(104833024.L)*_n)/real(6786707418225.L);
-      _C4x[128] = real(14777984.L)/real(14401062082575.L);
-      _C4x[129] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(real(169275392.L)*_n+real(459210752.L))+real(1348931584.L))+
-        real(4358086656.L))+real(15819288576.L))+real(66522136576.L))+
-        real(339738054656.L))+real(2285510549504.L))+real(23997860769792.L))+
-        real(703937249247232.L))-real(19094297885831168.L))+
-        real(158209896768315392.L))-real(711944535457419264.L))+
-        real(2034127244164055040.L))-real(3898743884647772160.L))+
-        real(4962037671369891840.L))-real(3626104452154920960.L))+
-        real(1100781708689886720.L))/real(1258986829849936161975.L);
-      _C4x[130] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(2586574848.L)*_n+real(8045019136.L))+real(27997405184.L))+
-        real(112329211904.L))+real(544229883904.L))+real(3449647939584.L))+
-        real(33850264354816.L))+real(918775240900608.L))-
-        real(22781969157455872.L))+real(170000845693206528.L))-
-        real(676483696526589952.L))+real(1672504622979334144.L))-
-        real(2712169658885406720.L))+real(2897090317445775360.L))-
-        real(1963003913948528640.L))+real(763390410979983360.L))-
-        real(129503730434104320.L))/real(419662276616645387325.L);
-      _C4x[131] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(257397153792.L)*_n+real(991547604992.L))+real(4590186438656.L))+
-        real(27638225534976.L))+real(255782598500352.L))+
-        real(6489129888202752.L))-real(148657574541385728.L))+
-        real(1008897492888649728.L))-real(3569681789506560000.L))+
-        real(7568884147602505728.L))-real(9830056295264837632.L))+
-        real(7043422417166041088.L))-real(1014218688873406464.L))-
-        real(2830708542577950720.L))+real(2453754892435660800.L))-
-        real(688414567044449280.L))/real(1258986829849936161975.L);
-      _C4x[132] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(9881440452608.L)*_n+real(56879822225408.L))+
-        real(500059034288128.L))+real(11953729657683968.L))-
-        real(255233639750139904.L))+real(1589618325900509184.L))-
-        real(5037608201230352384.L))+real(9151828754188976128.L))-
-        real(9141447965273128960.L))+real(2873266155477745664.L))+
-        real(4081748845846396928.L))-real(5442357228092080128.L))+
-        real(2653374372573904896.L))-real(478897090117877760.L))-
-        real(6815985812321280.L))/real(1258986829849936161975.L);
-      _C4x[133] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(119846784831488.L)*_n+real(2717226071605248.L))-
-        real(54472512256217088.L))+real(313795243407974400.L))-
-        real(897176437303652352.L))+real(1397445741687767040.L))-
-        real(1015935087271563264.L))-real(174507545995321344.L))+
-        real(929743493931929600.L))-real(632793424783261696.L))+
-        real(85099239783493632.L))+real(46941397942247424.L))+
-        real(13716642255851520.L))-real(14711522172556800.L))/
-        real(179855261407133737425.L);
-      _C4x[134] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(398673786674020352.L)-real(74312835739680768.L)*_n)*_n-
-        real(1035243455580602368.L))+real(1382705355455004672.L))-
-        real(659652413541056512.L))-real(600562940514205696.L))+
-        real(954064446949294080.L))-real(336068503539220480.L))-
-        real(70785526733209600.L))-real(29585858716827648.L))+
-        real(105774834699075584.L))-real(42086948419600384.L))+
-        real(2946537966071808.L))/real(179855261407133737425.L);
-      _C4x[135] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(1297878816003129344.L)-real(1134727193625591808.L)*_n)*_n-
-        real(312050739452739584.L))-real(852430315341479936.L))+
-        real(809425076323778560.L))-real(96223542886465536.L))-
-        real(61961501075865600.L))-real(131412737654390784.L))+
-        real(101236061902766080.L))-real(2207953883824128.L))-
-        real(2251654854770688.L))-real(3985164375568384.L))/
-        real(179855261407133737425.L);
-      _C4x[136] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-real(61664578920644608.L)*
-        _n-real(6753982490852524032.L))*_n+real(4273998523688026112.L))+
-        real(260984894785126400.L))+real(126415132245491712.L))-
-        real(1200871864213504000.L))+real(332075616826032128.L))+
-        real(41286869034270720.L))+real(229470885042323456.L))-
-        real(158524418181627904.L))+real(19285050112462848.L))/
-        real(1258986829849936161975.L);
-      _C4x[137] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(2937968846665752576.L)*
-        _n+real(580225142869786624.L))+real(704289592006991872.L))-
-        real(1090927053558988800.L))+real(29599362495324160.L))-
-        real(137634015480872960.L))+real(358358593764089856.L))-
-        real(80588156826533888.L))-real(12856700074975232.L))-
-        real(8778140571196416.L))/real(1258986829849936161975.L);
-      _C4x[138] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(1101287614239211520.L)*_n-
-        real(799007335375470592.L))-real(73108334853292032.L))-
-        real(349601572574822400.L))+real(313582557425958912.L))-
-        real(10680775242317824.L))+real(85512153885376512.L))-
-        real(89525206309109760.L))+real(15037121091328000.L))/
-        real(1258986829849936161975.L);
-      _C4x[139] = (_n*(_n*(_n*(_n*(_n*((-real(18013691360657408.L)*_n-
-        real(478168461578895360.L))*_n+real(195166094969552896.L))-
-        real(29821159111589888.L))+real(175097180747317248.L))-
-        real(73698183549648896.L))-real(5325049517096960.L))-
-        real(2624601201223680.L))/real(1258986829849936161975.L);
-      _C4x[140] = (_n*(_n*(_n*(_n*(_n*(real(12874658156445696.L)*_n-
-        real(15040116181336064.L))+real(28678326775054336.L))-
-        real(5145330094276608.L))+real(5563981038551040.L))-
-        real(7692796360949760.L))+real(1628377902213120.L))/
-        real(179855261407133737425.L);
-      _C4x[141] = (_n*(_n*(_n*(_n*(real(24927020799975424.L)*_n-
-        real(3592207192850432.L))+real(13059067482710016.L))-
-        real(8079662562951168.L))-real(136102453714944.L))-
-        real(59727120933888.L))/real(179855261407133737425.L);
-      _C4x[142] = (_n*(_n*(_n*(real(1584279953604608.L)*_n-
-        real(515572530610176.L))+real(279647089459200.L))-
-        real(445527616978944.L))+real(112723010408448.L))/
-        real(16350478309739430675.L);
-      _C4x[143] = (_n*(_n*(real(163424955432960.L)*_n-real(131077278072832.L))+
-        real(3599008759808.L))+real(1233827696640.L))/
-        real(3946667178212966025.L);
-      _C4x[144] = (_n*(real(108562612224.L)*_n-real(178562334720.L))+
-        real(52104335360.L))/real(9793218804498675.L);
-      _C4x[145] = (real(12387831808.L)*_n+real(4069857792.L))/
-        real(7675766090012475.L);
-      _C4x[146] = real(20016128.L)/real(4800354027525.L);
-      _C4x[147] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(149946368.L)*_n-real(529858560.L))*_n-real(2113011712.L))-
-        real(9810411520.L))-real(55628267520.L))-real(418139144192.L))-
-        real(4941644431360.L))-real(164556759564288.L))+
-        real(5119543630888960.L))-real(49275607447306240.L))+
-        real(261864656719970304.L))-real(904056552961802240.L))+
-        real(2169735727108325376.L))-real(3698413171207372800.L))+
-        real(4362230919885619200.L))-real(3053561643919933440.L))+
-        real(906526113038730240.L))/real(1452677111365310956125.L);
-      _C4x[148] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(12531793920.L)*_n-real(55567712256.L))*_n-real(299357700096.L))-
-        real(2124741083136.L))-real(23538174263296.L))-real(728322363883520.L))+
-        real(20831996264841216.L))-real(181963207909310464.L))+
-        real(863667010530967552.L))-real(2611406069778874368.L))+
-        real(5361990589980344320.L))-real(7626949828623204352.L))+
-        real(7419585808083714048.L))-real(4703622904920145920.L))+
-        real(1744892367954247680.L))-real(286271404117493760.L))/
-        real(1452677111365310956125.L);
-      _C4x[149] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(927214993408.L)*_n-real(6257462149120.L))*_n-
-        real(65484820316160.L))-real(1898837211414528.L))+
-        real(50385219863838720.L))-real(402944765957701632.L))+
-        real(1719846441419538432.L))-real(4554766547979927552.L))+
-        real(7846395409544380416.L))-real(8602387447067115520.L))+
-        real(5080156900163846144.L))+real(125177061179326464.L))-
-        real(2799414277283119104.L))+real(2105250574379581440.L))-
-        real(565726822422666240.L))/real(1452677111365310956125.L);
-      _C4x[150] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(19910873841664.L)*_n-real(544816899293184.L))*_n+
-        real(13512995641491456.L))-real(99717350728663040.L))+
-        real(385414844182953984.L))-real(896609185272168448.L))+
-        real(1279117834987765760.L))-real(987215180807012352.L))+
-        real(67172913134960640.L))+real(666861948268183552.L))-
-        real(665817143445553152.L))+real(283228906102718464.L))-
-        real(43351363178987520.L))-real(2032095149015040.L))/
-        real(207525301623615850875.L);
-      _C4x[151] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(21786850633973760.L)*_n-real(149363323062452224.L))+
-        real(526184551103856640.L))-real(1078816846619344896.L))+
-        real(1256009240219222016.L))-real(562837422305181696.L))-
-        real(501940701699244032.L))+real(878451802467205120.L))-
-        real(444054908754198528.L))+real(9362254906785792.L))+
-        real(41507684515053568.L))+real(18063067991244800.L))-
-        real(13377959731015680.L))/real(207525301623615850875.L);
-      _C4x[152] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(656886378301227008.L)*_n-real(1190392899378872320.L))+
-        real(1107092246979674112.L))-real(116574070874570752.L))-
-        real(837731635679985664.L))+real(764530737517953024.L))-
-        real(135302007315496960.L))-real(87352112740040704.L))-
-        real(54114460244115456.L))+real(96797148336619520.L))-
-        real(32388949501542400.L))+real(1693412624179200.L))/
-        real(207525301623615850875.L);
-      _C4x[153] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(6220637223153827840.L)*_n+real(1855146056207302656.L))-
-        real(6694680161110982656.L))+real(3652579978774315008.L))+
-        real(399894681956646912.L))-real(151881061471354880.L))-
-        real(1015637781855076352.L))+real(521501468079685632.L))+
-        real(39324846131773440.L))-real(3853722403471360.L))-
-        real(28081452791992320.L))/real(1452677111365310956125.L);
-      _C4x[154] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(1958671363707240448.L)-
-        real(6479713082658521088.L)*_n)*_n+real(799422552669683712.L))+
-        real(596762606859976704.L))-real(1082398437607997440.L))+
-        real(106014542466646016.L))+real(23867686451675136.L))+
-        real(236421650048876544.L))-real(133108134403112960.L))+
-        real(13465173306654720.L))/real(1452677111365310956125.L);
-      _C4x[155] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(584562717890707456.L)*_n+
-        real(1133625790197268480.L))-real(764347409406099456.L))-
-        real(119825618372526080.L))-real(214732003115270144.L))+
-        real(322021955268378624.L))-real(41862722661122048.L))-
-        real(10871997875486720.L))-real(10004602669824000.L))/
-        real(1452677111365310956125.L);
-      _C4x[156] = (_n*(_n*(_n*(_n*(_n*((-real(360984858245726208.L)*_n-
-        real(87667595082203136.L))*_n-real(422169720932270080.L))+
-        real(224180053135589376.L))+real(11620233304866816.L))+
-        real(93320750352564224.L))-real(79286784268697600.L))+
-        real(11333055676723200.L))/real(1452677111365310956125.L);
-      _C4x[157] = (_n*(_n*(_n*(_n*((real(11853630101913600.L)-
-        real(69785117676797952.L)*_n)*_n-real(6119178497425408.L))+
-        real(24807372915081216.L))-real(7446974715658240.L))-
-        real(909143107043328.L))-real(528353597048832.L))/
-        real(207525301623615850875.L);
-      _C4x[158] = (_n*(_n*(_n*((real(24909053679370240.L)-
-        real(20706317340508160.L)*_n)*_n-real(1991732527890432.L))+
-        real(6073259315429376.L))-real(7057052877717504.L))+
-        real(1285162878025728.L))/real(207525301623615850875.L);
-      _C4x[159] = (_n*(_n*((real(13601006154940416.L)-real(2358313674080256.L)*
-        _n)*_n-real(6413660820340736.L))-real(375056979197952.L))-
-        real(174118985576448.L))/real(207525301623615850875.L);
-      _C4x[160] = (_n*((real(70517228830720.L)-real(75577194184704.L)*_n)*_n-
-        real(101051637170176.L))+real(22175812657152.L))/
-        real(4553846744091883875.L);
-      _C4x[161] = ((-real(103808499187712.L)*_n-real(1278584029184.L))*_n-
-        real(541336621056.L))/real(4260050179956923625.L);
-      _C4x[162] = (real(34096398336.L)-real(133717557248.L)*_n)/
-        real(8856653180783625.L);
-      _C4x[163] = real(383798272.L)/real(2232164622799125.L);
-      _C4x[164] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(300810240.L)*_n+real(1528561664.L))+real(9530114048.L))+
-        real(79173255168.L))+real(1040248602624.L))+real(38772902461440.L))-
-        real(1360928876396544.L))+real(14919812867162112.L))-
-        real(91383853811367936.L))+real(369265368462262272.L))-
-        real(1059928372437975040.L))+real(2235485294596456448.L))-
-        real(3482198247352172544.L))+real(3869109163724636160.L))-
-        real(2617338551931371520.L))+real(763390410979983360.L))/
-        real(1646367392880685750275.L);
-      _C4x[165] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(56632541184.L)*_n+real(445279371264.L))+real(5501075062784.L))+
-        real(191308975570944.L))-real(6207447116021760.L))+
-        real(62207244709134336.L))-real(343558934130327552.L))+
-        real(1230884561540874240.L))-real(3068508179679674368.L))+
-        real(5483031228682076160.L))-real(7044447029126234112.L))+
-        real(6362535069236068352.L))-real(3823590232386699264.L))+
-        real(1365567940138106880.L))-real(218111545994280960.L))/
-        real(1646367392880685750275.L);
-      _C4x[166] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(2391044784128.L)*_n+real(78145847820288.L))-
-        real(2362062434992128.L))+real(21806224685137920.L))-
-        real(109329533708009472.L))+real(348468691379159040.L))-
-        real(749907814303924224.L))+real(1099803348493664256.L))-
-        real(1045479927285022720.L))+real(505852702924734464.L))+
-        real(120187917227261952.L))-real(381491995975090176.L))+
-        real(260108179073925120.L))-real(67736504967168000.L))/
-        real(235195341840097964325.L);
-      _C4x[167] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(41240607786008576.L)-real(4816557198802944.L)*_n)*_n-
-        real(188906347105878016.L))+real(537899510193979392.L))-
-        real(995896220956229632.L))+real(1162322253485441024.L))-
-        real(683754595921428480.L))-real(170867380692975616.L))+
-        real(680936272925032448.L))-real(561807627048714240.L))+
-        real(213368433485545472.L))-real(27455863346692096.L))-
-        real(2438514178818048.L))/real(235195341840097964325.L);
-      _C4x[168] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(5015157907517341696.L)-real(1963496830352752640.L)*_n)*_n-
-        real(7959455151219539968.L))+real(7066414745468796928.L))-
-        real(1205923638707486720.L))-real(4741698503339671552.L))+
-        real(5382302573200408576.L))-real(2064785082675101696.L))-
-        real(228174121518235648.L))+real(229963148852985856.L))+
-        real(144056081552244736.L))-real(84715788878938112.L))/
-        real(1646367392880685750275.L);
-      _C4x[169] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(5101546684427010048.L)-
-        real(8209118419716407296.L)*_n)*_n+real(2084680626216108032.L))-
-        real(6225070833373020160.L))+real(3866278385824038912.L))-
-        real(42589676569624576.L))-real(532652706878193664.L))-
-        real(500488835704553472.L))+real(605816413569941504.L))-
-        real(175110895664889856.L))+real(6343874051407872.L))/
-        real(1646367392880685750275.L);
-      _C4x[170] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(638926083481141248.L)*
-        _n-real(865003604119912448.L))+real(264318996107493376.L))+
-        real(119786763567759360.L))+real(27135460419567616.L))-
-        real(144009119639011328.L))+real(51310560333004800.L))+
-        real(9657211345174528.L))+real(958005652750336.L))-
-        real(3916209768824832.L))/real(235195341840097964325.L);
-      _C4x[171] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(257519614605393920.L)*_n+
-        real(707084672843644928.L))+real(951638781007495168.L))-
-        real(867584213670952960.L))-real(45673240443486208.L))-
-        real(11628525625278464.L))+real(234906617891520512.L))-
-        real(111448526733967360.L))+real(9405754953728000.L))/
-        real(1646367392880685750275.L);
-      _C4x[172] = (_n*(_n*(_n*(_n*(_n*(_n*(real(1297245565824532480.L)*_n-
-        real(412672078605975552.L))-real(161685655913234432.L))-
-        real(280630559576686592.L))+real(276405190496354304.L))-
-        real(14057077774745600.L))-real(7771762209849344.L))-
-        real(10626569204170752.L))/real(1646367392880685750275.L);
-      _C4x[173] = (_n*(_n*(_n*(_n*((-real(110445053607936.L)*_n-
-        real(64128886153674752.L))*_n+real(19890493406052352.L))+
-        real(2558162612256768.L))+real(14116845844955136.L))-
-        real(9969001956900864.L))+real(1226698065543168.L))/
-        real(235195341840097964325.L);
-      _C4x[174] = (_n*(_n*(_n*((-real(28684297699328.L)*_n-
-        real(9693923228254208.L))*_n+real(23620418839511040.L))-
-        real(4911054773551104.L))-real(886809947013120.L))-
-        real(629766424559616.L))/real(235195341840097964325.L);
-      _C4x[175] = (_n*(_n*(_n*(real(140945199254732800.L)*_n-
-        real(105404375236608.L))+real(46148979941965824.L))-
-        real(44976731928920064.L))+real(7137650489131008.L))/
-        real(1646367392880685750275.L);
-      _C4x[176] = (_n*(_n*(real(96129231059681280.L)*_n-
-        real(34421773029081088.L))-real(3412639660638208.L))-
-        real(1802629157683200.L))/real(1646367392880685750275.L);
-      _C4x[177] = (_n*(real(10114609184768.L)*_n-real(12593113071616.L))+
-        real(2426416627712.L))/real(689722410088263825.L);
-      _C4x[178] = (-real(3482423656448.L)*_n-real(1549836288000.L))/
-        real(4045128729436574325.L);
-      _C4x[179] = real(248348672.L)/real(87234019741575.L);
-      _C4x[180] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(1693450240.L)*_n-real(15410397184.L))*_n-real(222858051584.L))-
-        real(9192894627840.L))+real(359358608179200.L))-
-        real(4420110880604160.L))+real(30646102105522176.L))-
-        real(141738222238040064.L))+real(472460740793466880.L))-
-        real(1181151851983667200.L))+real(2253274302245765120.L))-
-        real(3267247738256359424.L))+real(3459438781683204096.L))-
-        real(2275946566896844800.L))+real(654334637982842880.L))/
-        real(1840057674396060544425.L);
-      _C4x[181] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(61641588736.L)*_n-real(2381668417536.L))*_n+
-        real(86500760879104.L))-real(978983583744000.L))+
-        real(6172754149638144.L))-real(25594546813403136.L))+
-        real(75155917068304384.L))-real(161986539700617216.L))+
-        real(259593813622784000.L))-real(307359075329376256.L))+
-        real(261304078747828224.L))-real(150284725687156736.L))+
-        real(52021635814785024.L))-real(8128380596060160.L))/
-        real(87621794018860025925.L);
-      _C4x[182] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(5285432285724672.L)*_n-real(55412982395961344.L))+
-        real(319743695216705536.L))-real(1193876712442036224.L))+
-        real(3086708369231183872.L))-real(5661769139308986368.L))+
-        real(7282574686883414016.L))-real(6102012183017160704.L))+
-        real(2354179944623374336.L))+real(1282935130412285952.L))-
-        real(2502320409336086528.L))+real(1588104937790242816.L))-
-        real(403980515624189952.L))/real(1840057674396060544425.L);
-      _C4x[183] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(603798871570644992.L)*_n-real(2039337822724292608.L))+
-        real(4644753579465244672.L))-real(7165143090901024768.L))+
-        real(6988672051322028032.L))-real(2940454207150358528.L))-
-        real(2288935641272025088.L))+real(4598992935197868032.L))-
-        real(3296581035499716608.L))+real(1134355847674068992.L))-
-        real(119988600614944768.L))-real(17701806631419904.L))/
-        real(1840057674396060544425.L);
-      _C4x[184] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(5968264113194795008.L)*_n-real(7626405621199798272.L))+
-        real(5068461112891015168.L))+real(912357630233018368.L))-
-        real(5219403061313667072.L))+real(4490483850622271488.L))-
-        real(1279758793422405632.L))-real(376269579253972992.L))+
-        real(166908374111223808.L))+real(152899952527802368.L))-
-        real(76584293960810496.L))/real(1840057674396060544425.L);
-      _C4x[185] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(341776000018808832.L)*
-        _n+real(567344213465759744.L))-real(827921502658625536.L))+
-        real(360134481241178112.L))+real(68079636942159872.L))-
-        real(53432144046850048.L))-real(82107844175855616.L))+
-        real(76293255540506624.L))-real(19398007076159488.L))+
-        real(404460020760576.L))/real(262865382056580077775.L);
-      _C4x[186] = (_n*(_n*(_n*(_n*(_n*(_n*((real(71849889235468288.L)-
-        real(680728882055217152.L)*_n)*_n+real(124968317697916928.L))+
-        real(69475315626803200.L))-real(133450238712086528.L))+
-        real(32481179049918464.L))+real(11309002154573824.L))+
-        real(2197304911593472.L))-real(3757781191393280.L))/
-        real(262865382056580077775.L);
-      _C4x[187] = (_n*(_n*(_n*(_n*(_n*(_n*(real(323066502771113984.L)*_n+
-        real(1137036911978741760.L))-real(624204446930305024.L))-
-        real(133699938788835328.L))-real(51609859484811264.L))+
-        real(227350919581270016.L))-real(93239859434487808.L))+
-        real(6531637533474816.L))/real(1840057674396060544425.L);
-      _C4x[188] = (_n*(_n*(_n*(_n*((-real(16269578710548480.L)*_n-
-        real(18971230665703424.L))*_n-real(46510233582829568.L))+
-        real(32607942700695552.L))+real(726848479690752.L))-
-        real(623885324648448.L))-real(1550951395917824.L))/
-        real(262865382056580077775.L);
-      _C4x[189] = (_n*(_n*(_n*((real(67157483088510976.L)-
-        real(433933481381199872.L)*_n)*_n+real(14001368954044416.L))+
-        real(101779908304306176.L))-real(61181036681232384.L))+
-        real(6527114028187648.L))/real(1840057674396060544425.L);
-      _C4x[190] = (_n*(_n*((real(152140918225895424.L)-
-        real(95773494987456512.L)*_n)*_n-real(20248671783223296.L))-
-        real(5382884572004352.L))-real(4859128704303104.L))/
-        real(1840057674396060544425.L);
-      _C4x[191] = (_n*(_n*(real(7095719106183168.L)*_n+
-        real(49228189624434688.L))-real(40728868243374080.L))+
-        real(5687198492000256.L))/real(1840057674396060544425.L);
-      _C4x[192] = ((-real(329029822447616.L)*_n-real(46948345708544.L))*_n-
-        real(28862909874176.L))/real(23896852914234552525.L);
-      _C4x[193] = (real(1671067926528.L)-real(9780355661824.L)*_n)/
-        real(645860889573906825.L);
-      _C4x[194] = -real(1494646784.L)/real(2827408522212225.L);
-      _C4x[195] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(48432676864.L)*_n+real(2190647230464.L))-real(94380384845824.L))+
-        real(1287005247897600.L))-real(9961420618727424.L))+
-        real(51862634332422144.L))-real(196645821843767296.L))+
-        real(566952888952160256.L))-real(1272009686751641600.L))+
-        real(2238737048682889216.L))-real(3061802140110422016.L))+
-        real(3115517967129903104.L))-real(2002832978869223424.L))+
-        real(568986641724211200.L))/real(2033747955911435338575.L);
-      _C4x[196] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(6610643125796864.L)-real(523788223512576.L)*_n)*_n-
-        real(46881311163416576.L))+real(220938352327655424.L))-
-        real(747159252333756416.L))+real(1886699773214326784.L))-
-        real(3625669618330238976.L))+real(5320634804012580864.L))-
-        real(5890153090652307456.L))+real(4761648149984968704.L))-
-        real(2639749213528784896.L))+real(890147990608543744.L))-
-        real(136556794013810688.L))/real(2033747955911435338575.L);
-      _C4x[197] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(544038581413347328.L)-real(126941576636137472.L)*_n)*_n-
-        real(1643991086401585152.L))+real(3618678115535945728.L))-
-        real(5834843432180252672.L))+real(6716211146048667648.L))-
-        real(5007540727675092992.L))+real(1447244351603212288.L))+
-        real(1545584596293255168.L))-real(2323890249119301632.L))+
-        real(1396611502506508288.L))-real(348978473590849536.L))/
-        real(2033747955911435338575.L);
-      _C4x[198] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(5266727356965322752.L)-
-        real(2756463006190665728.L)*_n)*_n-real(6963465468539568128.L))+
-        real(5719909963527094272.L))-real(1423154789952258048.L))-
-        real(2959880191536529408.L))+real(4297713798518669312.L))-
-        real(2757397451341037568.L))+real(867914543982968832.L))-
-        real(72281205021605888.L))-real(17265801541976064.L))/
-        real(2033747955911435338575.L);
-      _C4x[199] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(444126663286980608.L)-
-        real(966912165446418432.L)*_n)*_n+real(345651087915614208.L))-
-        real(744445050127122432.L))+real(517074840215093248.L))-
-        real(101080804666376192.L))-real(62394006286368768.L))+
-        real(15643139282829312.L))+real(22275238818480128.L))-
-        real(9905955262562304.L))/real(290535422273062191225.L);
-      _C4x[200] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(710218084304027648.L)*_n-
-        real(709090024339013632.L))+real(203844154306854912.L))+
-        real(103854010636697600.L))-real(28133857492467712.L))-
-        real(87328827277049856.L))+real(66685395475103744.L))-
-        real(15096625990991872.L))+real(81976993775616.L))/
-        real(290535422273062191225.L);
-      _C4x[201] = (_n*(_n*(_n*(_n*(_n*((real(99169604814766080.L)-
-        real(53149231795404800.L)*_n)*_n+real(100260298685939712.L))-
-        real(117838563713744896.L))+real(17846031391653888.L))+
-        real(11511359778848768.L))+real(3169950864769024.L))-
-        real(3570017709326336.L))/real(290535422273062191225.L);
-      _C4x[202] = (_n*(_n*(_n*(_n*(_n*(real(1171712691992002560.L)*_n-
-        real(394057564356083712.L))-real(173652682823696384.L))-
-        real(88988577844690944.L))+real(215927395247456256.L))-
-        real(78039665264820224.L))+real(4471199881494528.L))/
-        real(2033747955911435338575.L);
-      _C4x[203] = (_n*(_n*(_n*((-real(65920966719438848.L)*_n-
-        real(348661929545302016.L))*_n+real(181886268409380864.L))+
-        real(17649366208610304.L))-real(1074337604960256.L))-
-        real(10834137276612608.L))/real(2033747955911435338575.L);
-      _C4x[204] = (_n*(_n*(_n*(real(11011782881574912.L)*_n+
-        real(4327721945530368.L))+real(102469660183625728.L))-
-        real(53519316930265088.L))+real(4966146828926976.L))/
-        real(2033747955911435338575.L);
-      _C4x[205] = (_n*(_n*(real(136016599216816128.L)*_n-
-        real(9313406913871872.L))-real(4221217831649280.L))-
-        real(5125342338744320.L))/real(2033747955911435338575.L);
-      _C4x[206] = (_n*(real(668758276308992.L)*_n-real(477170401017856.L))+
-        real(59038150950912.L))/real(26412311115732926475.L);
-      _C4x[207] = (-real(1208684118016.L)*_n-real(883938951168.L))/
-        real(713846246371160175.L);
-      _C4x[208] = real(287309824.L)/real(148810974853275.L);
-      _C4x[209] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(24678311657472.L)*_n-real(369489166204928.L))+
-        real(3157452874842112.L))-real(18268120204443648.L))+
-        real(77583127781834752.L))-real(253026791743029248.L))+
-        real(650640321624932352.L))-real(1337427327784583168.L))+
-        real(2202821481056960512.L))-real(2869464824008409088.L))+
-        real(2823917763309862912.L))-real(1780295981217087488.L))+
-        real(500708244717305856.L))/real(2227438237426810132725.L);
-      _C4x[210] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(16378172836675584.L)*_n-real(86489256255553536.L))+
-        real(331081487162015744.L))-real(958553485744275456.L))+
-        real(2147642037233516544.L))-real(3759255191610720256.L))+
-        real(5128576652808290304.L))-real(5366271878665076736.L))+
-        real(4157204449212760064.L))-real(2233786281215655936.L))+
-        real(736674199124312064.L))-real(111268498826067968.L))/
-        real(2227438237426810132725.L);
-      _C4x[211] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(809529512386625536.L)*_n-real(2078719438869233664.L))+
-        real(4020052597896380416.L))-real(5821051415941873664.L))+
-        real(6081044383317098496.L))-real(4051450217369698304.L))+
-        real(757849373588586496.L))+real(1691002138898989056.L))-
-        real(2149173164502941696.L))+real(1237691866808320000.L))-
-        real(305029160574910464.L))/real(2227438237426810132725.L);
-      _C4x[212] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(802909617603477504.L)*
-        _n-real(926237361266753536.L))+real(637684875184308224.L))-
-        real(31906892208930816.L))-real(475861484333694976.L))+
-        real(562832578407563264.L))-real(329572016845750272.L))+
-        real(95466227731791872.L))-real(5760893052780544.L))-
-        real(2333933234552832.L))/real(318205462489544304675.L);
-      _C4x[213] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(194647213882736640.L)*_n+
-        real(485794295631052800.L))-real(701841324407521280.L))+
-        real(405140857159680000.L))-real(42948328433909760.L))-
-        real(63702075858485248.L))+real(8627437810221056.L))+
-        real(22169150944182272.L))-real(8993358434795520.L))/
-        real(318205462489544304675.L);
-      _C4x[214] = (_n*(_n*(_n*(_n*(_n*((real(598890563890053120.L)-
-        real(3987743082702438400.L)*_n)*_n+real(802552761320210432.L))-
-        real(31290010082738176.L))-real(620350774462906368.L))+
-        real(405987260408791040.L))-real(82481975532716032.L))-
-        real(877636051009536.L))/real(2227438237426810132725.L);
-      _C4x[215] = (_n*(_n*(_n*(_n*(_n*(real(60307593536471040.L)*_n+
-        real(119290583037509632.L))-real(100276895844663296.L))+
-        real(6844801282473984.L))+real(10874506180558848.L))+
-        real(3907787251777536.L))-real(3372178159960064.L))/
-        real(318205462489544304675.L);
-      _C4x[216] = (_n*(_n*(_n*((-real(197900536584863744.L)*_n-
-        real(180300611814686720.L))*_n-real(120607123473170432.L))+
-        real(202315081944399872.L))-real(65390123583275008.L))+
-        real(2978975313821696.L))/real(2227438237426810132725.L);
-      _C4x[217] = (_n*(_n*((real(139684621842382848.L)-
-        real(353014314325508096.L)*_n)*_n+real(25349864640479232.L))+
-        real(1911343804317696.L))-real(10650881074921472.L))/
-        real(2227438237426810132725.L);
-      _C4x[218] = (_n*((real(101318852092100608.L)-real(8027178214096896.L)*_n)*
-        _n-real(46764643938467840.L))+real(3772359809433600.L))/
-        real(2227438237426810132725.L);
-      _C4x[219] = ((-real(152769050705920.L)*_n-real(418140072706048.L))*_n-
-        real(751457599750144.L))/real(318205462489544304675.L);
-      _C4x[220] = (real(14058862411776.L)-real(127643206811648.L)*_n)/
-        real(8600147634852548775.L);
-      _C4x[221] = -real(15328083968.L)/real(12549725545959525.L);
-      _C4x[222] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(6238128780083200.L)-real(980277379727360.L)*_n)*_n-
-        real(29319205266391040.L))+real(106615291877785600.L))-
-        real(308569258223206400.L))+real(722933690694369280.L))-
-        real(1382079114562764800.L))+real(2153133778476728320.L))-
-        real(2691417223095910400.L))+real(2574399082961305600.L))-
-        real(1596127431436009472.L))+real(445073995304271872.L))/
-        real(2421128518942184926875.L);
-      _C4x[223] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(151302978047836160.L)-
-        real(46340385223475200.L)*_n)*_n-real(387095521279344640.L))+
-        real(786492807006126080.L))-real(1273690921338142720.L))+
-        real(1633874904665292800.L))-real(1629398535063470080.L))+
-        real(1216988657399889920.L))-real(636578682332250112.L))+
-        real(205951926636904448.L))-real(30694758296846336.L))/
-        real(807042839647394975625.L);
-      _C4x[224] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(613398131937116160.L)-
-        real(353176552923463680.L)*_n)*_n-real(810035007203573760.L))+
-        real(775741322412687360.L))-real(461596370613043200.L))+
-        real(33697887934218240.L))+real(251349543319240704.L))-
-        real(283518236668985344.L))+real(157807320410095616.L))-
-        real(38474535745355776.L))/real(345875502706026418125.L);
-      _C4x[225] = (_n*(_n*(_n*(_n*(_n*(_n*((real(3297227422469980160.L)-
-        real(5830281188815667200.L)*_n)*_n+real(696358578704875520.L))-
-        real(3494674226898534400.L))+real(3569076415464734720.L))-
-        real(1933285643597643776.L))+real(517156926346231808.L))-
-        real(18722902421536768.L))-real(15212358217498624.L))/
-        real(2421128518942184926875.L);
-      _C4x[226] = (_n*(_n*(_n*(_n*(_n*(_n*(real(3963714898734612480.L)*_n-
-        real(4459891610489978880.L))+real(2163224956643573760.L))-
-        real(17999754952704000.L))-real(426158455900864512.L))+
-        real(19812801107197952.L))+real(152060329126264832.L))-
-        real(57338888665956352.L))/real(2421128518942184926875.L);
-      _C4x[227] = (_n*(_n*(_n*(_n*(_n*(real(1225959357284352.L)*_n+
-        real(110230452085719040.L))+real(15775238516113408.L))-
-        real(87216323486023680.L))+real(50306500832264192.L))-
-        real(9214092459900928.L))-real(257530269794304.L))/
-        real(345875502706026418125.L);
-      _C4x[228] = (_n*(_n*(_n*(_n*(real(128353505483161600.L)*_n-
-        real(82721016702304256.L))-real(1180765631021056.L))+
-        real(9787003046461440.L))+real(4450057961078784.L))-
-        real(3175164028125184.L))/real(345875502706026418125.L);
-      _C4x[229] = (_n*(_n*((-real(165619962893828096.L)*_n-
-        real(145512823517085696.L))*_n+real(187715111434059776.L))-
-        real(54870384553492480.L))+real(1889580991119360.L))/
-        real(2421128518942184926875.L);
-      _C4x[230] = (_n*(_n*(real(102718373275631616.L)*_n+
-        real(29542937545146368.L))+real(4515145522872320.L))-
-        real(10367884381388800.L))/real(2421128518942184926875.L);
-      _C4x[231] = (_n*(real(14110835341262848.L)*_n-real(5835412345978880.L))+
-        real(407436955484160.L))/real(345875502706026418125.L);
-      _C4x[232] = (-real(43854032011264.L)*_n-real(143292457025536.L))/
-        real(65435905917356349375.L);
-      _C4x[233] = real(2902458368.L)/real(2407236357920625.L);
-      _C4x[234] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(10693935051571200.L)*_n-real(42872957797662720.L))+
-        real(137779761811292160.L))-real(361671874754641920.L))+
-        real(784128938543677440.L))-real(1410056424574156800.L))+
-        real(2094940973653032960.L))-real(2527591826907463680.L))+
-        real(2359085705113632768.L))-real(1441663486458331136.L))+
-        real(399031857859002368.L))/real(2614818800457559721025.L);
-      _C4x[235] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(583395287582638080.L)*
-        _n-real(1348482775174348800.L))+real(2524611517895147520.L))-
-        real(3827547376881500160.L))+real(4657607980823347200.L))-
-        real(4456128626231869440.L))+real(3224387411622494208.L))-
-        real(1647615413095235584.L))+real(524241267803029504.L))-
-        real(77231972488839168.L))/real(2614818800457559721025.L);
-      _C4x[236] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(4452734606172487680.L)*_n-
-        real(5424760468222771200.L))+real(4796408446310154240.L))-
-        real(2535397130030284800.L))-real(157731504909189120.L))+
-        real(1777430131548094464.L))-real(1832820339751518208.L))+
-        real(992313828341448704.L))-real(239887187275939840.L))/
-        real(2614818800457559721025.L);
-      _C4x[237] = (_n*(_n*(_n*(_n*(_n*(_n*(real(2258184011450941440.L)*_n+
-        real(1381255217110056960.L))-real(3518150036095500288.L))+
-        real(3209311024414982144.L))-real(1623888280732827648.L))+
-        real(401705515572264960.L))-real(4048195118170112.L))-
-        real(14042176816152576.L))/real(2614818800457559721025.L);
-      _C4x[238] = (_n*(_n*(_n*(_n*((real(228921349727322112.L)-
-        real(562937157774213120.L)*_n)*_n+real(24711961115623424.L))-
-        real(55887751173636096.L))-real(1855106299461632.L))+
-        real(21069521020256256.L))-real(7486450123669504.L))/
-        real(373545542922508531575.L);
-      _C4x[239] = (_n*(_n*(_n*(_n*(real(97291441461526528.L)*_n+
-        real(32123246891499520.L))-real(84057876275920896.L))+
-        real(43581287092453376.L))-real(7209389563838464.L))-
-        real(339898250821632.L))/real(373545542922508531575.L);
-      _C4x[240] = (_n*(_n*((-real(66288410624524288.L)*_n-
-        real(6852777288400896.L))*_n+real(8491519040290816.L))+
-        real(4834380761530368.L))-real(2984972570853376.L))/
-        real(373545542922508531575.L);
-      _C4x[241] = (_n*((real(172942003544260608.L)-real(163896815303786496.L)*
-        _n)*_n-real(46114698784931840.L))+real(1089589582233600.L))/
-        real(2614818800457559721025.L);
-      _C4x[242] = (_n*(real(31258382748876800.L)*_n+real(6726498337685504.L))-
-        real(10025808311615488.L))/real(2614818800457559721025.L);
-      _C4x[243] = (real(3398493536256.L)-real(56733296754688.L)*_n)/
-        real(4157104611220285725.L);
-      _C4x[244] = -real(582454607872.L)/real(288579494587524525.L);
-      _C4x[245] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(170026089043722240.L)-
-        real(58554903114547200.L)*_n)*_n-real(411313112466063360.L))+
-        real(834996544104038400.L))-real(1424795690336256000.L))+
-        real(2031882549696921600.L))-real(2377302583145398272.L))+
-        real(2171856680898265088.L))-real(1310603169507573760.L))+
-        real(360415871614582784.L))/real(2808509081972934515175.L);
-      _C4x[246] = (_n*(_n*(_n*(_n*(_n*(_n*((real(2647511501069352960.L)-
-        real(1516151007703203840.L)*_n)*_n-real(3792386420417495040.L))+
-        real(4408366847754240000.L))-real(4067729748271300608.L))+
-        real(2862696747795218432.L))-real(1433061071832219648.L))+
-        real(449349658116882432.L))-real(65530158475378688.L))/
-        real(2808509081972934515175.L);
-      _C4x[247] = (_n*(_n*(_n*(_n*(_n*((real(4198570027269488640.L)-
-        real(5118317585309368320.L)*_n)*_n-real(1949569984921337856.L))-
-        real(453045651958136832.L))+real(1762571242759520256.L))-
-        real(1694325356766429184.L))+real(896675218674679808.L))-
-        real(215313377847672832.L))/real(2808509081972934515175.L);
-      _C4x[248] = (_n*(_n*(_n*(_n*(_n*(real(267933980987228160.L)*_n-
-        real(492793387607392256.L))+real(410379639039459328.L))-
-        real(195380945828708352.L))+real(44674453442920448.L))+
-        real(845227552145408.L))-real(1843374562738176.L))/
-        real(401215583138990645025.L);
-      _C4x[249] = (_n*(_n*(_n*(_n*(real(163502924524158976.L)*_n+
-        real(42469753851215872.L))-real(49912274105663488.L))-
-        real(5582142956371968.L))+real(20297667682762752.L))-
-        real(6866083684286464.L))/real(401215583138990645025.L);
-      _C4x[250] = (_n*(_n*(_n*(real(44734128792272896.L)*_n-
-        real(79835715386474496.L))+real(37744834022211584.L))-
-        real(5635422294114304.L))-real(388978276564992.L))/
-        real(401215583138990645025.L);
-      _C4x[251] = (_n*((real(49953188366778368.L)-real(74946983894188032.L)*_n)*
-        _n+real(35654638795489280.L))-real(19632924991160320.L))/
-        real(2808509081972934515175.L);
-      _C4x[252] = (_n*(real(9324812086280192.L)*_n-real(2283208909520896.L))+
-        real(29408983252992.L))/real(165206416586643206775.L);
-      _C4x[253] = (real(503944082096128.L)*_n-real(567753001926656.L))/
-        real(165206416586643206775.L);
-      _C4x[254] = real(58116276224.L)/real(103318584481953225.L);
-      _C4x[255] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(202480048417013760.L)*_n-
-        real(456912214519971840.L))+real(876525472752599040.L))-
-        real(1429117618618368000.L))+real(1966465843218874368.L))-
-        real(2239586099221495808.L))+real(2007904778612375552.L))-
-        real(1198265754978353152.L))+real(327650792376893440.L))/
-        real(3002199363488309309325.L);
-      _C4x[256] = (_n*(_n*(_n*(_n*(_n*(_n*(real(911160217876561920.L)*_n-
-        real(1242217413743738880.L))+real(1387196835138895872.L))-
-        real(1239838929574690816.L))+real(851381763539206144.L))-
-        real(418521095293894656.L))+real(129542243781443584.L))-
-        real(18722902421536768.L))/real(1000733121162769769775.L);
-      _C4x[257] = (_n*(_n*(_n*(_n*(_n*(real(520911200075120640.L)*_n-
-        real(208391508259241984.L))-real(96144337569579008.L))+
-        real(246667260368781312.L))-real(224103568074866688.L))+
-        real(116374488232230912.L))-real(27795196838150144.L))/
-        real(428885623355472758475.L);
-      _C4x[258] = (_n*(_n*(_n*((real(366345454624964608.L)-
-        real(474676418299559936.L)*_n)*_n-real(165014498938191872.L))+
-        real(34798031190622208.L))+real(1805466812284928.L))-
-        real(1690455104290816.L))/real(428885623355472758475.L);
-      _C4x[259] = (_n*(_n*(_n*(real(373610477705494528.L)*_n-
-        real(305608638465048576.L))-real(59551336466743296.L))+
-        real(136262682188709888.L))-real(44230139344584704.L))/
-        real(3002199363488309309325.L);
-      _C4x[260] = (_n*((real(13465169149558784.L)-real(30897376252133376.L)*_n)*
-        _n-real(1808696627691520.L))-real(171154983616512.L))/
-        real(176599962558135841725.L);
-      _C4x[261] = (_n*(real(341673238331392.L)*_n+real(309100206358528.L))-
-        real(155043755982848.L))/real(25228566079733691675.L);
-      _C4x[262] = (real(3810709733376.L)-real(1924351507038208.L)*_n)/
-        real(176599962558135841725.L);
-      _C4x[263] = -real(1476797661184.L)/real(478590684439392525.L);
-      _C4x[264] = (_n*(_n*(_n*(_n*(_n*((real(909770194660884480.L)-
-        real(498207487552389120.L)*_n)*_n-real(1425306638302052352.L))+
-        real(1900408851069403136.L))-real(2113385705068560384.L))+
-        real(1863415352856150016.L))-real(1101109072142270464.L))+
-        real(299566438744588288.L))/real(3195889645003684103475.L);
-      _C4x[265] = (_n*(_n*(_n*(_n*((real(560302913537179648.L)-
-        real(519868682663362560.L)*_n)*_n-real(486804237712359424.L))+
-        real(327052722979209216.L))-real(158186669168656384.L))+
-        real(48400398775484416.L))-real(6939763059720192.L))/
-        real(456555663571954871925.L);
-      _C4x[266] = (_n*(_n*(_n*((-real(1048899801879412736.L)*_n-
-        real(835131033220284416.L))*_n+real(1677679165723115520.L))-
-        real(1455141654393520128.L))+real(743713444598906880.L))-
-        real(176874986701586432.L))/real(3195889645003684103475.L);
-      _C4x[267] = (_n*(_n*(_n*(real(134470959271772160.L)*_n-
-        real(57546136495325184.L))+real(11146092968148992.L))+
-        real(1006087499153408.L))-real(637989474533376.L))/
-        real(187993508529628476675.L);
-      _C4x[268] = (_n*((-real(15454666720542720.L)*_n-real(4436117101215744.L))*
-        _n+real(7664351959842816.L))-real(2402175208652800.L))/
-        real(187993508529628476675.L);
-      _C4x[269] = (_n*(real(1667752980905984.L)*_n-real(200351634423808.L))-
-        real(25132001132544.L))/real(26856215504232639525.L);
-      _C4x[270] = (real(314116728160256.L)*_n-real(145792664862720.L))/
-        real(26856215504232639525.L);
-      _C4x[271] = -real(2147483648.L)/real(26814079094227425.L);
-      _C4x[272] = (_n*(_n*(_n*(_n*(_n*(real(55044919340826624.L)*_n-
-        real(83246945916682240.L))+real(107933971257491456.L))-
-        real(117508759030333440.L))+real(102078315925340160.L))-
-        real(59788727899127808.L))+real(16192780472680448.L))/
-        real(199387054501121111625.L);
-      _C4x[273] = (_n*(_n*(_n*(_n*(real(217227076325867520.L)*_n-
-        real(184013716268777472.L))+real(121227891471024128.L))-
-        real(57787857254744064.L))+real(17499139872915456.L))-
-        real(2491196995796992.L))/real(199387054501121111625.L);
-      _C4x[274] = (_n*(_n*((real(95351263268438016.L)-real(56045268763672576.L)*
-        _n)*_n-real(79560042910580736.L))+real(40119152072982528.L))-
-        real(9509081215664128.L))/real(199387054501121111625.L);
-      _C4x[275] = (_n*((real(8639412615249920.L)-real(48866969662783488.L)*_n)*
-        _n+real(1175652807999488.L))-real(585000315518976.L))/
-        real(199387054501121111625.L);
-      _C4x[276] = ((real(1044982722985984.L)-real(735504559505408.L)*_n)*_n-
-        real(317834022354944.L))/real(28483864928731587375.L);
-      _C4x[277] = (-real(8108898254848.L)*_n-real(1327144894464.L))/
-        real(1499150785722715125.L);
-      _C4x[278] = -real(2407329169408.L)/real(499716928574238375.L);
-      _C4x[279] = (_n*(_n*(_n*((real(104155911865499648.L)-
-        real(82368195607920640.L)*_n)*_n-real(111257451310874624.L))+
-        real(95363529695035392.L))-real(55413942930898944.L))+
-        real(14947181974781952.L))/real(210780600472613746575.L);
-      _C4x[280] = (_n*(_n*((real(36522202861928448.L)-real(56425837225836544.L)*
-        _n)*_n-real(17182617963069440.L))+real(5154785388920832.L))-
-        real(729130828038144.L))/real(70260200157537915525.L);
-      _C4x[281] = (_n*(_n*(real(91775548375695360.L)*_n-
-        real(74104609810939904.L))+real(36942628620599296.L))-
-        real(8732613405573120.L))/real(210780600472613746575.L);
-      _C4x[282] = (_n*(real(50027779063808.L)*_n+real(9620726743040.L))-
-        real(4037269258240.L))/real(1584816544906870275.L);
-      _C4x[283] = (real(52432960749568.L)*_n-real(15539191676928.L))/
-        real(1584816544906870275.L);
-      _C4x[284] = -real(3058016714752.L)/real(3697905271449363975.L);
-      _C4x[285] = (_n*(_n*(_n*(real(5288650929602560.L)*_n-
-        real(5553083476082688.L))+real(4702611231997952.L))-
-        real(2713044941537280.L))+real(729130828038144.L))/
-        real(11693376128637177975.L);
-      _C4x[286] = (_n*(_n*(real(5231476324958208.L)*_n-
-        real(2432119720640512.L))+real(723478651076608.L))-
-        real(101739185307648.L))/real(11693376128637177975.L);
-      _C4x[287] = ((real(256735965085696.L)-real(520068999938048.L)*_n)*_n-
-        real(60559038873600.L))/real(1670482304091025425.L);
-      _C4x[288] = (real(70368744177664.L)*_n-real(25975962206208.L))/
-        real(11693376128637177975.L);
-      _C4x[289] = -real(33775622815744.L)/real(3897792042879059325.L);
-      _C4x[290] = (_n*((real(4417837720403968.L)-real(5274357278441472.L)*_n)*
-        _n-real(2532175278768128.L))+real(678261235384320.L))/
-        real(12293036442926264025.L);
-      _C4x[291] = ((real(646512837132288.L)-real(2190227162529792.L)*_n)*_n-
-        real(90434831384576.L))/real(12293036442926264025.L);
-      _C4x[292] = (real(1666859627708416.L)*_n-real(392525651116032.L))/
-        real(12293036442926264025.L);
-      _C4x[293] = -real(274877906944.L)/real(141299269458922575.L);
-      _C4x[294] = (_n*(real(4160551999504384.L)*_n-real(2370547069485056.L))+
-        real(633043819692032.L))/real(12892696757215350075.L);
-      _C4x[295] = (real(193514046488576.L)*_n-real(26938034880512.L))/
-        real(4297565585738450025.L);
-      _C4x[296] = -real(364762982514688.L)/real(12892696757215350075.L);
-      _C4x[297] = (real(53876069761024.L)-real(202310139510784.L)*_n)/
-        real(1226577915591312375.L);
-      _C4x[298] = -real(2199023255552.L)/real(408859305197104125.L);
-      _C4x[299] = real(2199023255552.L)/real(55699673461634475.L);
-      break;
-    case 27:
-      _C4x[0] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(73279454609476440.L)*_n+
-        real(82454378140777500.L))+real(93228416884505760.L))+
-        real(105966020354191140.L))+real(121136129312638440.L))+
-        real(139348903999503660.L))+real(161407996910622000.L))+
-        real(188386190679968820.L))+real(221736856015657080.L))+
-        real(263461533222904380.L))+real(316367601760566720.L))+
-        real(384474516028466500.L))+real(473672603747070728.L))+
-        real(592826271149284172.L))+real(755690631355131472.L))+
-        real(984386480317868628.L))+real(1316024706307311000.L))+
-        real(1816114094704089180.L))+real(2607753571882794720.L))+
-        real(3941263921141042020.L))+real(6381093967561687080.L))+
-        real(11394810656360155500.L))+real(23701206165229123440.L))+
-        real(65178316954380089460.L))+real(391069901726280536760.L))-
-        real(1368744656041981878660.L))+real(3421861640104954696650.L))/
-        real(5132792460157432044975.L);
-      _C4x[1] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(399778803106800.L)*_n+
-        real(490891181489280.L))+real(608126372190480.L))+
-        real(760666432104480.L))+real(961579556063280.L))+
-        real(1229775214557120.L))+real(1593117891585360.L))+
-        real(2093502967889760.L))+real(2795347832603760.L))+
-        real(3800211432559360.L))+real(5272793362676112.L))+
-        real(7488894920902304.L))+real(10927673200908464.L))+
-        real(16457872189222464.L))+real(25735594256676304.L))+
-        real(42112790601833952.L))+real(72887522195481840.L))+
-        real(135467718019885440.L))+real(276579924290599440.L))+
-        real(643471660594455840.L))+real(1823169705017624880.L))+
-        real(7292678820070499520.L))+real(71103618495687370320.L))-
-        real(521426535635040715680.L))+real(782139803452561073520.L))-
-        real(342186164010495469665.L))/real(1710930820052477348325.L);
-      _C4x[2] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(3010654119732480.L)*_n+
-        real(3737020406174880.L))+real(4684931252738880.L))+
-        real(5937683672717280.L))+real(7616518833678720.L))+
-        real(9901313347702560.L))+real(13064667278362560.L))+
-        real(17529633833726560.L))+real(23970564420759040.L))+
-        real(33495559246330272.L))+real(47990061329863744.L))+
-        real(70794590976220384.L))+real(108116040833184384.L))+
-        real(172162251234317344.L))+real(288670581732229312.L))+
-        real(516838793749780320.L))+real(1009136334235088640.L))+
-        real(2223928370826452640.L))+real(5892845733865016640.L))+
-        real(21663545906680013280.L))+real(189609649321832987520.L))-
-        real(1214231023541738170080.L))+real(1611682019235580393920.L))-
-        real(521426535635040715680.L))-real(97767475431570134190.L))/
-        real(5132792460157432044975.L);
-      _C4x[3] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(real(5834686968581520.L)*_n+
-        real(7342506319890720.L))+real(9346630441971120.L))+
-        real(12050139702982080.L))+real(15757751910386640.L))+
-        real(20937371752569440.L))+real(28326438013541360.L))+
-        real(39122121170021120.L))+real(55335177348321808.L))+
-        real(80479042834045856.L))+real(120985612356919856.L))+
-        real(189305749805064256.L))+real(311247206213861456.L))+
-        real(545105804176518368.L))+real(1038176817264713840.L))+
-        real(2224419195891742080.L))+real(5709031746914121360.L))+
-        real(20241134867471216160.L))+real(169938607767695455920.L))-
-        real(1032557524700570137920.L))+real(1223346872066826294480.L))-
-        real(25524375870246748320.L))-real(545127741800269839120.L))+
-        real(179240371624545246015.L))/real(5132792460157432044975.L);
-      _C4x[4] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(real(10416271523395200.L)*_n+
-        real(13342415562164160.L))+real(17326857288733440.L))+
-        real(22851141402707520.L))+real(30668416741216128.L))+
-        real(41991600996146368.L))+real(58840907215068160.L))+
-        real(84715573101198144.L))+real(125963455215380608.L))+
-        real(194757152849301952.L))+real(316082169787114752.L))+
-        real(545811376582201408.L))+real(1023666212081828224.L))+
-        real(2156956136917821120.L))+real(5435985763093605888.L))+
-        real(18891464102938314048.L))+real(155028078521800202880.L))-
-        real(913978115527163749440.L))+real(1015014455216994973440.L))+
-        real(83651315877279259200.L))-real(510487517404934966400.L))+
-        real(123975539941198491840.L))+real(17775904623921842580.L))/
-        real(5132792460157432044975.L);
-      _C4x[5] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(real(18231267003264720.L)*_n+
-        real(23904587445748800.L))+real(31884596097096624.L))+
-        real(43370573384292000.L))+real(60348781355665040.L))+
-        real(86239801248898304.L))+real(127212177678080880.L))+
-        real(195023427626713952.L))+real(313659097240880720.L))+
-        real(536421552566531520.L))+real(995757957106037552.L))+
-        real(2075259879007592480.L))+real(5168944224104058384.L))+
-        real(17734085058984013440.L))+real(143385953385667330800.L))-
-        real(828617452277507486496.L))+real(882953799387816181200.L))+
-        real(120950094238754383680.L))-real(466940290549792626000.L))+
-        real(140491312563122858400.L))-real(52871921445511121520.L))+
-        real(33158899010008052505.L))/real(5132792460157432044975.L);
-      _C4x[6] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(real(32446016535854208.L)*_n+real(43908972002315616.L))+
-        real(60769437236647744.L))+real(86349105620317984.L))+
-        real(126613785896045056.L))+real(192887647248436448.L))+
-        real(308175587050421440.L))+real(523383415441503904.L))+
-        real(964453238323320704.L))+real(1994494053544582240.L))+
-        real(4926805623857201728.L))+real(16750437377763075616.L))+
-        real(134002994693435368704.L))-real(763382129799919535136.L))+
-        real(790483780479975024576.L))+real(135380449323276977568.L))-
-        real(430349527344997518720.L))+real(140288110986093030240.L))-
-        real(66356603876740551360.L))+real(28098262512624571680.L))+
-        real(5697405328180077750.L))/real(5132792460157432044975.L);
-      _C4x[7] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(real(60581247490791312.L)*_n+real(85700968320660192.L))+
-        real(125083452282385712.L))+real(189638943298080512.L))+
-        real(301463882573078736.L))+real(509301528552377120.L))+
-        real(933356274906807920.L))+real(1919028740233792320.L))+
-        real(4711082637503394320.L))+real(15907741259899155296.L))+
-        real(126241350431225126832.L))-real(711437311768779888768.L))+
-        real(721398349809359448912.L))+real(140642473143230204832.L))-
-        real(400405811669391181584.L))+real(136057689748363346880.L))-
-        real(69956560318105949040.L))+real(37739048445039752160.L))-
-        real(16871375381726565840.L))+real(11642815358880935355.L))/
-        real(5132792460157432044975.L);
-      _C4x[8] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(real(123091137335271168.L)*_n+real(185909365170469248.L))+
-        real(294370065853298688.L))+real(495278753117779584.L))+
-        real(903772023704408320.L))+real(1849814223385125760.L))+
-        real(4519165127766428160.L))+real(15177708078766907520.L))+
-        real(119685421163108500224.L))-real(668811824524762837632.L))+
-        real(667389543532136291328.L))+real(141738442710144862848.L))-
-        real(375631505655450815232.L))+real(130898865565471045504.L))-
-        real(70189293203230691840.L))+real(41400112607033685120.L))-
-        real(23806978966798997760.L))+real(10972885159610720640.L))+
-        real(2452530144985009320.L))/real(5132792460157432044975.L);
-      _C4x[9] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(287296256497127376.L)*_n+real(481781561695060224.L))+
-        real(876111306741185072.L))+real(1786666873114538720.L))+
-        real(4347768240400601744.L))+real(14538304614829924544.L))+
-        real(114053530976537441520.L))-real(633018560435612359008.L))+
-        real(623733388826288176464.L))+real(140807256201692766336.L))-
-        real(354799216875392825424.L))+real(125744307902662404704.L))-
-        real(69120074002750705648.L))+real(42643073489038729280.L))-
-        real(26939637224337829264.L))+real(16082079594234617376.L))-
-        real(7556006467598284080.L))+real(5397894670370487285.L))/
-        real(5132792460157432044975.L);
-      _C4x[10] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(850423688931780096.L)*_n+real(1729050899529515040.L))+
-        real(4193853449435620672.L))+real(13972680203386384480.L))+
-        real(109147763661946289280.L))-real(602409851375980837728.L))+
-        real(587531520700696904640.L))+real(138863100422159045856.L))-
-        real(337007520476615896320.L))+real(120888666411293817120.L))-
-        real(67537727934498569664.L))+real(42785332136725383520.L))-
-        real(28348158278177478272.L))+real(18661084357293252000.L))-
-        real(11413646068240637760.L))+real(5432549987636579808.L))+
-        real(1266175285613852250.L))/real(5132792460157432044975.L);
-      _C4x[11] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(4054829827005054864.L)*_n+real(13467892269760445088.L))+
-        real(104824666763974068912.L))-real(575845191515422116288.L))+
-        real(556899166135656231888.L))+real(136422062004077328864.L))-
-        real(321602871754492408080.L))+real(116410487637199935872.L))-
-        real(65778105968316207088.L))+real(42394659574572214560.L))-
-        real(28891460150097908944.L))+real(19991458071409802432.L))-
-        real(13522827127755041712.L))+real(8411102150509586528.L))-
-        real(4040488298298179728.L))+real(2934854733674967831.L))/
-        real(5132792460157432044975.L);
-      _C4x[12] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(100977470540922059136.L)*_n-real(552506769358398638784.L))+
-        real(530553108888378191616.L))+real(133759686428515283136.L))-
-        real(308105931614194826112.L))+real(112310532951172494400.L))-
-        real(63993042734748055040.L))+real(41741405076008505280.L))-
-        real(28972263810146742400.L))+real(20649906489917707072.L))-
-        real(14709809329168653056.L))+real(10142445037425331904.L))-
-        real(6385925063862920576.L))+real(3088594014177415744.L))+
-        real(735873569344070332.L))/real(5132792460157432044975.L);
-      _C4x[13] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(507586637531726245584.L)*_n+real(131027601388705205184.L))-
-        real(296158881021639629136.L))+real(108562194936860519712.L))-
-        real(62252486370236089200.L))+real(40963285772357325440.L))-
-        real(28796650772719649680.L))+real(20925058591681759200.L))-
-        real(15372862066900618672.L))+real(11179428716794485056.L))-
-        real(7817555297389450704.L))+real(4967437895337366176.L))-
-        real(2415015777400770544.L))+real(1770586155991722993.L))/
-        real(5132792460157432044975.L);
-      _C4x[14] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(105131003030739340512.L)-real(285489665610381827712.L)*_n)*_n-
-        real(60587621581596867264.L))+real(40133678134241534880.L))-
-        real(28476947980257066752.L))+real(20972854850184320608.L))-
-        real(15722184934696215360.L))+real(11804137255998893344.L))-
-        real(8717007707473960832.L))+real(6161277795330289632.L))-
-        real(3942826758559951808.L))+real(1924645994671892128.L))+
-        real(464563515213473214.L))/real(5132792460157432044975.L);
-      _C4x[15] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(39292728267222564960.L)-real(59010550425783810672.L)*_n)*_n-
-        real(28077285046087750096.L))+real(20882512873244904320.L))-
-        real(15876440296195324720.L))+real(12172235956142360224.L))-
-        real(9288596283532735120.L))+real(6940644195154884032.L))-
-        real(4946927615409878000.L))+real(3183482554365582560.L))-
-        real(1558989237564570448.L))+real(1149578802925114835.L))/
-        real(5132792460157432044975.L);
-      _C4x[16] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(20707365067708766976.L)-
-        real(27635532225080719872.L)*_n)*_n-real(15906168596965246976.L))+
-        real(12374900376216573184.L))-real(9649457376919524864.L))+
-        real(7456478702283321088.L))-real(5623540589178659840.L))+
-        real(4034991464601479424.L))-real(2608348197726204416.L))+
-        real(1280671252772504320.L))+real(311715137028793680.L))/
-        real(5132792460157432044975.L);
-      _C4x[17] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(12468085246860903552.L)-
-        real(15855041516975600688.L)*_n)*_n-real(9870408910275714768.L))+
-        real(7798239389874038112.L))-real(6086151303845690224.L))+
-        real(4624371155161862720.L))-real(3336083532426612240.L))+
-        real(2164508278641035040.L))-real(1065027524222032560.L))+
-        real(788333428562306445.L))/real(5132792460157432044975.L);
-      _C4x[18] = (_n*(_n*(_n*(_n*(_n*(_n*((real(8021530412008264608.L)-
-        real(9996115166702637312.L)*_n)*_n-real(6404012293728389312.L))+
-        real(5038291127544443104.L))-real(3851544485581842560.L))+
-        real(2790977419500528160.L))-real(1816369286848280640.L))+
-        real(895321435934187360.L))+real(219162511712069730.L))/
-        real(5132792460157432044975.L);
-      _C4x[19] = (_n*(_n*(_n*(_n*(_n*((real(5331029878955287584.L)-
-        real(6621237790858860144.L)*_n)*_n-real(4221855364828848208.L))+
-        real(3243725203726642880.L))-real(2359292599459802160.L))+
-        real(1539363010469286240.L))-real(759917234286216720.L))+
-        real(563984419881928815.L))/real(5132792460157432044975.L);
-      _C4x[20] = (_n*(_n*(_n*(_n*((real(51817378494884800.L)-
-        real(65073071800845696.L)*_n)*_n-real(39980888638081280.L))+
-        real(29171170832616000.L))-real(19074564067126400.L))+
-        real(9428276644937920.L))+real(2317260934180500.L))/
-        real(74388296524020754275.L);
-      _C4x[21] = (_n*(_n*(_n*((real(361041904727488.L)-real(466255241229968.L)*
-        _n)*_n-real(264131842052080.L))+real(173031986380000.L))-
-        real(85620432375632.L))+real(63666780808939.L))/
-        real(783034700252850045.L);
-      _C4x[22] = (_n*(_n*((real(5855833375392.L)-real(7985963133568.L)*_n)*_n-
-        real(3842271070528.L))+real(1903039177952.L))+real(469120197546.L))/
-        real(20033145835167465.L);
-      _C4x[23] = (_n*((real(3356542766368.L)-real(5108468470032.L)*_n)*_n-
-        real(1663823690672.L))+real(1238988173709.L))/real(20033145835167465.L);
-      _C4x[24] = ((real(15209307520.L)-real(30660788480.L)*_n)*_n+
-        real(3757742824.L))/real(208244759201325.L);
-      _C4x[25] = (real(247203.L)-real(331600.L)*_n)/real(5135632425.L);
-      _C4x[26] = real(4654.L)/real(327806325.L);
-      _C4x[27] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-real(399778803106800.L)*_n-
-        real(490891181489280.L))*_n-real(608126372190480.L))-
-        real(760666432104480.L))-real(961579556063280.L))-
-        real(1229775214557120.L))-real(1593117891585360.L))-
-        real(2093502967889760.L))-real(2795347832603760.L))-
-        real(3800211432559360.L))-real(5272793362676112.L))-
-        real(7488894920902304.L))-real(10927673200908464.L))-
-        real(16457872189222464.L))-real(25735594256676304.L))-
-        real(42112790601833952.L))-real(72887522195481840.L))-
-        real(135467718019885440.L))-real(276579924290599440.L))-
-        real(643471660594455840.L))-real(1823169705017624880.L))-
-        real(7292678820070499520.L))-real(71103618495687370320.L))+
-        real(521426535635040715680.L))-real(782139803452561073520.L))+
-        real(342186164010495469665.L))/real(15398377380472296134925.L);
-      _C4x[28] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*((-real(1014435878376960.L)*_n-
-        real(1260383830896960.L))*_n-real(1581799194264960.L))-
-        real(2007262280295360.L))-real(2578484202282240.L))-
-        real(3357538782265920.L))-real(4438830671291520.L))-
-        real(5969469084259520.L))-real(8185070777820160.L))-
-        real(11474986260489024.L))-real(16506135744029568.L))-
-        real(24469622287201728.L))-real(37600148227369728.L))-
-        real(60345531360482368.L))-real(102222500264280704.L))-
-        real(185531874679408320.L))-real(369100449097658880.L))-
-        real(835384261122626880.L))-real(2302951206338052480.L))-
-        real(9008603248322381760.L))-real(87512145840845994240.L))+
-        real(678219130266556455360.L))-real(1327267545252830912640.L))+
-        real(1042853071270081431360.L))-real(293302426294710402570.L))/
-        real(15398377380472296134925.L);
-      _C4x[29] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*((-real(2006004018678960.L)*_n-
-        real(2531531290838880.L))*_n-real(3232904796095760.L))-
-        real(4183476288317760.L))-real(5494125807150960.L))-
-        real(7336556140196640.L))-real(9984009274634192.L))-
-        real(13885046933709056.L))-real(19802882710460976.L))-
-        real(29091401168482016.L))-real(44273531023663760.L))-
-        real(70337033549764800.L))-real(117883423234589936.L))-
-        real(211595249813019296.L))-real(416170572858916176.L))-
-        real(930996983841009792.L))-real(2535847699817891760.L))-
-        real(9787542626936723040.L))-real(93297746297945268240.L))+
-        real(695378374549075277760.L))-real(1219700532656791044720.L))+
-        real(659987433216380206560.L))+real(118506030826145617200.L))-
-        real(146651213147355201285.L))/real(15398377380472296134925.L);
-      _C4x[30] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*((-real(3694849737457920.L)*_n-
-        real(4760445953139840.L))*_n-real(6223414389050880.L))-
-        real(8270905947803520.L))-real(11199684641225472.L))-
-        real(15495183203099264.L))-real(21980385380653056.L))-
-        real(32109940511714688.L))-real(48584682254644480.L))-
-        real(76724217558352000.L))-real(127791410547171840.L))-
-        real(227897885153635200.L))-real(445157114268462848.L))-
-        real(988244111456009856.L))-real(2666947074756701184.L))-
-        real(10162434811804797312.L))-real(94862742018620647680.L))+
-        real(678738423185632682880.L))-real(1077058670070102504960.L))+
-        real(352622470005761800320.L))+real(437560729204229971200.L))-
-        real(335463225723242977920.L))+real(53327713871765527740.L))/
-        real(15398377380472296134925.L);
-      _C4x[31] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*((-real(6758223524849520.L)*_n-
-        real(8951762407416000.L))*_n-real(12080032395751440.L))-
-        real(16654081319863776.L))-real(23538267028562608.L))-
-        real(34256592592217856.L))-real(51631211001291600.L))-
-        real(81204668825905184.L))-real(134673615703414256.L))-
-        real(239051700682648896.L))-real(464477149929807504.L))-
-        real(1024564110749653600.L))-real(2741912113680146736.L))-
-        real(10322910913151292288.L))-real(94526968591456141776.L))+
-        real(653353441633928135520.L))-real(959029230382352934000.L))+
-        real(185884287076286137920.L))+real(482078808038514823920.L))-
-        real(267040739146699173600.L))+real(12762187935123374160.L))+
-        real(1709221598454023325.L))/real(15398377380472296134925.L);
-      _C4x[32] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*((-real(12751056151078656.L)*_n-real(17533868589458112.L))*
-        _n-real(24715750057252224.L))-real(35870691003658816.L))-
-        real(53906685863554048.L))-real(84519828513011136.L))-
-        real(139693798830834304.L))-real(247003231694357824.L))-
-        real(477720846144401664.L))-real(1047700748190841024.L))-
-        real(2782278335044276096.L))-real(10360454935887325248.L))-
-        real(93289534450643252736.L))+real(626705204994185679936.L))-
-        real(865741202420700396672.L))+real(90674826231545029824.L))+
-        real(468062562061576930560.L))-real(216274211818747104960.L))+
-        real(37434246079495009920.L))-real(49332827312241614400.L))+
-        real(17092215984540233250.L))/real(15398377380472296134925.L);
-      _C4x[33] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*((-real(25638930531053104.L)*_n-real(37128128339304864.L))*_n-
-        real(55663588474380816.L))-real(87046292351612160.L))-
-        real(143444512063664112.L))-real(252759152543049824.L))-
-        real(486800706497340368.L))-real(1061929459586025408.L))-
-        real(2800157459335514544.L))-real(10324718712925331232.L))-
-        real(91625405388394081680.L))+real(601213445859944269184.L))-
-        real(791473378609810070384.L))+real(32826729021604125216.L))+
-        real(441980298061286695088.L))-real(184694527118024535360.L))+
-        real(51814193429812378320.L))-real(56952886450860170400.L))+
-        real(9928654833207437040.L))+real(2339287599452761335.L))/
-        real(15398377380472296134925.L);
-      _C4x[34] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*((-real(57046296213407232.L)*_n-real(89000869775895808.L))*_n-
-        real(146271938549788672.L))-real(256920540724900608.L))-
-        real(492886125248387584.L))-real(1069902339522005248.L))-
-        real(2802976713842500608.L))-real(10244487346428907264.L))-
-        real(89775277405020057088.L))+real(577605702227470818048.L))-
-        real(731311030133882820608.L))-real(4148598606469311232.L))+
-        real(415368300235423858176.L))-real(164013011590307315968.L))+
-        real(59044553827426628608.L))-real(56182585593394923264.L))+
-        real(16986473859536939520.L))-real(15623943478293454080.L))+
-        real(7357590434955027960.L))/real(15398377380472296134925.L);
-      _C4x[35] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(148399691433251568.L)*_n-real(259882287247989504.L))*_n-
-        real(496754089097984784.L))-real(1073376583625991584.L))-
-        real(2795528583059676464.L))-real(10137207344944809024.L))-
-        real(87866094385206832464.L))+real(555999886254114444576.L))-
-        real(681678262024533761904.L))-real(28728648941949226368.L))+
-        real(391109900174625314928.L))-real(149503728632275001376.L))+
-        real(62290320091516438096.L))-real(53730425823875847872.L))+
-        real(21505647483176400432.L))-real(21206882265934718304.L))+
-        real(5640316237773599760.L))+real(1380430157843259705.L))/
-        real(15398377380472296134925.L);
-      _C4x[36] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(498948237066515456.L)*_n-real(1073565488192531520.L))*_n-
-        real(2781014060142274944.L))-real(10013798995973013696.L))-
-        real(85966112208383936256.L))+real(536293135987683126976.L))-
-        real(640040253929056597120.L))-real(45564861579727766976.L))+
-        real(369686663998979106304.L))-real(138692526230758032960.L))+
-        real(63379162503585194112.L))-real(51158478895949593280.L))+
-        real(24263021951332700928.L))-real(23210670517478181696.L))+
-        real(9202250097414575488.L))-real(6903945368361263040.L))+
-        real(3798525856841556750.L))/real(15398377380472296134925.L);
-      _C4x[37] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(2761626385176977328.L)*_n-real(9881260996472837600.L))*_n-
-        real(84111917256741155600.L))+real(518311218894002667840.L))-
-        real(604588019488504762480.L))-real(57357654343871872928.L))+
-        real(350903361606398831664.L))-real(130238250521809646720.L))+
-        real(63300432301411706576.L))-real(48821941125892192608.L))+
-        real(25876273219287237488.L))-real(23791034304355461696.L))+
-        real(11513582910647117328.L))-real(10233891042976555808.L))+
-        real(3349177554673513136.L))+real(828196741572794643.L))/
-        real(15398377380472296134925.L);
-      _C4x[38] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(501867522242416287360.L)-real(82322441463711096576.L)*_n)*_n-
-        real(574009531663154112000.L))-real(65751256074750550656.L))+
-        real(334406783737167262464.L))-real(123373409303992638336.L))+
-        real(62591973009277795328.L))-real(46768009703633927296.L))+
-        real(26757925064930395392.L))-real(23765605754036024704.L))+
-        real(13021745856880893440.L))-real(11917013761327527552.L))+
-        real(5503443216797964032.L))-real(3668992961381953408.L))+
-        real(2207620708032210996.L))/real(15398377380472296134925.L);
-      _C4x[39] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(547335486519270798960.L)*_n-real(71787788534944699200.L))*_n+
-        real(319844608645066204656.L))-real(117634125078523469664.L))+
-        real(61551641679147513936.L))-real(44967966517656262528.L))+
-        real(27171548261407882416.L))-real(23474245117621321632.L))+
-        real(13999335147224018704.L))-real(12775521779969547200.L))+
-        real(6944494780126104432.L))-real(5744890749184077792.L))+
-        real(2117893577501298128.L))+real(525937992303903669.L))/
-        real(15398377380472296134925.L);
-      _C4x[40] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(306909278919632597760.L)*_n-real(112725550038496105920.L))+
-        real(60347491278611545728.L))-real(43380359888864249664.L))+
-        real(27284522191876579840.L))-real(23068087317028076736.L))+
-        real(14619978405235959168.L))-real(13194527614639271488.L))+
-        real(7927496352706171136.L))-real(6968541588706235328.L))+
-        real(3536404313637514368.L))-real(2190213729943889216.L))+
-        real(1393690545640419642.L))/real(15398377380472296134925.L);
-      _C4x[41] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(59075629315009097424.L)*_n-real(41967513576903298080.L))+
-        real(27203908876725102576.L))-real(22617688148220796544.L))+
-        real(14997030855363143440.L))-real(13367905150885347552.L))+
-        real(8603090262429663280.L))-real(7706930270557921088.L))+
-        real(4519959076546905936.L))-real(3559703598333699488.L))+
-        real(1414548101738139760.L))+real(352029042164525775.L))/
-        real(15398377380472296134925.L);
-      _C4x[42] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(26998986839438173184.L)*_n-real(22157016743179454976.L))+
-        real(15205913595735953408.L))-real(13399089407926343168.L))+
-        real(9066227245074349056.L))-real(8155135004329918976.L))+
-        real(5216456602051602432.L))-real(4444683870536781312.L))+
-        real(2400536816709161984.L))-real(1415914071401822720.L))+
-        real(935145411086381040.L))/real(15398377380472296134925.L);
-      _C4x[43] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(15297648024600690192.L)*
-        _n-real(13345966126725050752.L))+real(9379373988588606192.L))-
-        real(8422852959343692576.L))+real(5715596912699526608.L))-
-        real(5029503507151988928.L))+real(3107774173545323184.L))-
-        real(2364352445609926240.L))+real(988074260868900240.L))+
-        real(246200508532148625.L))/real(15398377380472296134925.L);
-      _C4x[44] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(9584901514820353536.L)*_n-
-        real(8574694453100341056.L))+real(6074974826240713344.L))-
-        real(5420992938534190528.L))+real(3624977888547249920.L))-
-        real(3016720049954103360.L))+real(1701300060800887680.L))-
-        real(970006992277821120.L))+real(657487535136209190.L))/
-        real(15398377380472296134925.L);
-      _C4x[45] = (_n*(_n*(_n*(_n*(_n*(_n*(real(6333140675850554704.L)*_n-
-        real(5683913893686193248.L))+real(4008028819571478256.L))-
-        real(3474234923548732480.L))+real(2228411054356194960.L))-
-        real(1653416351874823200.L))+real(715909591514683440.L))+
-        real(178524847392378795.L))/real(15398377380472296134925.L);
-      _C4x[46] = (_n*(_n*(_n*(_n*(_n*(real(37337498257965312.L)*_n-
-        real(33038238862440320.L))+real(22823087545861632.L))-
-        real(18656042377348224.L))+real(10854829102639872.L))-
-        real(6039124966680960.L))+real(4171069681524900.L))/
-        real(133898933743237357695.L);
-      _C4x[47] = (_n*(_n*(_n*(_n*(real(195075922055654512.L)*_n-
-        real(167040749263423040.L))+real(110137034045154576.L))-
-        real(80209044218286368.L))+real(35640909297543088.L))+
-        real(8892416283104739.L))/real(1026558492031486408995.L);
-      _C4x[48] = (_n*(_n*(_n*(real(696434041088.L)*_n-real(561462728640.L))+
-        real(334369174656.L))-real(182661157184.L))+real(127941872058.L))/
-        real(5463585227772945.L);
-      _C4x[49] = (_n*(_n*(real(24560261753712.L)*_n-real(17633845750752.L))+
-        real(7989870443984.L))+real(1994225640693.L))/
-        real(300497187527511975.L);
-      _C4x[50] = (_n*(real(29556996608.L)*_n-real(15922652416.L))+
-        real(11273228472.L))/real(624734277603975.L);
-      _C4x[51] = (real(22113584.L)*_n+real(5520955.L))/real(1063075911975.L);
-      _C4x[52] = real(4654.L)/real(327806325.L);
-      _C4x[53] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(6530703079680.L)*_n+
-        real(8826217303200.L))+real(12093266011200.L))+real(16820633633760.L))+
-        real(23786754633600.L))+real(34260599819040.L))+real(50364947102400.L))+
-        real(75754683810400.L))+real(116929582540288.L))+
-        real(185879907027360.L))+real(305669180444992.L))+
-        real(522855177076960.L))+real(936880769784960.L))+
-        real(1774868569425952.L))+real(3599383812122560.L))+
-        real(7951366057688928.L))+real(19633002611577600.L))+
-        real(56444882508285600.L))+real(203201577029828160.L))+
-        real(1072452767657426400.L))+real(14585357640140999040.L))-
-        real(164085273451586239200.L))+real(474024123304582468800.L))-
-        real(521426535635040715680.L))+real(195534950863140268380.L))/
-        real(25663962300787160224875.L);
-      _C4x[54] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(37005054560640.L)*_n+
-        real(50928622145280.L))+real(71200352945280.L))+
-        real(101285535859200.L))+real(146895777947520.L))+
-        real(217709219902720.L))+real(330642768779904.L))+
-        real(516325325236224.L))+real(832487788737920.L))+
-        real(1393120987405056.L))+real(2435890001440896.L))+
-        real(4489456941272576.L))+real(8825897303051136.L))+
-        real(18820602503512320.L))+real(44632359270319744.L))+
-        real(122509936296244224.L))+real(418182955626602880.L))+
-        real(2077171676304910080.L))+real(26416205013877660800.L))-
-        real(277979757376804922880.L))+real(773023954927472949120.L))-
-        real(962633604249305936640.L))+real(568828947965498962560.L))-
-        real(130356633908760178920.L))/real(25663962300787160224875.L);
-      _C4x[55] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(real(136917721288320.L)*_n+
-        real(192816953576640.L))+real(276619716268800.L))+
-        real(405173516400960.L))+real(607547051841408.L))+
-        real(935644644394432.L))+real(1485852629588992.L))+
-        real(2445470099042880.L))+real(4198348870000768.L))+
-        real(7582646940057280.L))+real(14575156777493760.L))+
-        real(30308566074649408.L))+real(69870049079044480.L))+
-        real(185721434704623552.L))+real(610979041272294912.L))+
-        real(2906273376591832128.L))+real(35062579364016435840.L))-
-        real(344200893535525588800.L))+real(858955644058086946560.L))-
-        real(848095648663492797120.L))+real(189609649321832987520.L))+
-        real(211487685782044486080.L))-real(106655427743531055480.L))/
-        real(25663962300787160224875.L);
-      _C4x[56] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(real(427935160909440.L)*_n+
-        real(620824675084800.L))+real(921346670048640.L))+
-        real(1403181140646144.L))+real(2201599592893568.L))+
-        real(3576287011899392.L))+real(6052576443204480.L))+
-        real(10761701612549888.L))+real(20332002745244288.L))+
-        real(41478113346528768.L))+real(93590967503212928.L))+
-        real(242792615091918080.L))+real(776518666518145152.L))+
-        real(3570985915011744768.L))+real(41275246710424051584.L))-
-        real(381583112158099918080.L))+real(860701017990256195200.L))-
-        real(658734356824696266240.L))-real(126662316348592886400.L))+
-        real(430697031491222442240.L))-real(189609649321832987520.L))+
-        real(19143281902685061240.L))/real(25663962300787160224875.L);
-      _C4x[57] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(real(1254039517896320.L)*_n+real(1892426879208800.L))+
-        real(2940069405374528.L))+real(4725228003633952.L))+
-        real(7905160865362432.L))+real(13879669938190560.L))+
-        real(25862709380426688.L))+real(51959829971310240.L))+
-        real(115250028146574720.L))+real(293202530709087328.L))+
-        real(916621360100810560.L))+real(4100426592265781792.L))+
-        real(45739130956036888832.L))-real(402015260344313016352.L))+
-        real(831740048621207884480.L))-real(498460830830147818080.L))-
-        real(282497311277728928640.L))+real(413391030514182077280.L))-
-        real(103113511366136134080.L))-real(6220226052413073120.L))-
-        real(4102131836289655980.L))/real(25663962300787160224875.L);
-      _C4x[58] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(real(3677378369773824.L)*_n+real(5857872785118720.L))+
-        real(9706237783157504.L))+real(16864643566088192.L))+
-        real(31066728260547840.L))+real(61628645158373888.L))+
-        real(134766110703746816.L))+real(337328091894506496.L))+
-        real(1034664711080446208.L))+real(4522222801254448640.L))+
-        real(48953052755595055872.L))-real(412309002344605771776.L))+
-        real(792973092558522113280.L))-real(376192864521090387456.L))-
-        real(351254049723734841600.L))+real(353711316330599894016.L))-
-        real(58463155176755777280.L))+real(29441650716321768960.L))-
-        real(42356239834217514240.L))+real(9330339078619609680.L))/
-        real(25663962300787160224875.L);
-      _C4x[59] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(real(11430048901807872.L)*_n+real(19683848342623104.L))+
-        real(35908345936361472.L))+real(70468600146107520.L))+
-        real(152240385184346368.L))+real(375815924317300096.L))+
-        real(1134064880707938816.L))+real(4858982781330910848.L))+
-        real(51265280303341413120.L))-real(416402813425188014208.L))+
-        real(752695342585300982784.L))-real(284623133490827902848.L))-
-        real(377248702505408686848.L))+real(298083387884318673280.L))-
-        real(43274802583071191552.L))+real(52176275080476398208.L))-
-        real(41523800523486624000.L))+real(1761080334258510720.L))+
-        real(412047642310484880.L))/real(25663962300787160224875.L);
-      _C4x[60] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(real(40384078766338816.L)*_n+real(78512715059802112.L))+
-        real(167840903915859200.L))+real(409353288974514688.L))+
-        real(1217848935863822080.L))+real(5128432728209638400.L))+
-        real(52918606905870754048.L))-real(416637515430115750400.L))+
-        real(714155279093130615552.L))-real(215707780561903888384.L))-
-        real(382444354692447152896.L))+real(254008418220830941696.L))-
-        real(40335227135275331840.L))+real(62072531510207540224.L))-
-        real(34733922900298626816.L))+real(9576193353823090176.L))-
-        real(14744384961294777600.L))+real(4769592571950133200.L))/
-        real(25663962300787160224875.L);
-      _C4x[61] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(181752888575196672.L)*_n+real(438584148172930080.L))+
-        real(1288575418374434368.L))+real(5344307596026407008.L))+
-        real(54084117907328089728.L))-real(414445194331230149472.L))+
-        real(678502773486304562880.L))-real(163212860882231078688.L))-
-        real(377593319137055965440.L))+real(220358893051414809888.L))-
-        real(41646095348463931584.L))+real(64716780628235286880.L))-
-        real(29479712826115965056.L))+real(16580690160559682976.L))-
-        real(18263993339472293952.L))+real(2313258532709130720.L))+
-        real(633471099889183500.L))/real(25663962300787160224875.L);
-      _C4x[62] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(1348366608490174080.L)*_n+real(5517248802270313728.L))+
-        real(54884109770278089600.L))-real(410725042705782382080.L))+
-        real(645999166459353641088.L))-real(122667631098340849920.L))-
-        real(368052651401186521728.L))+real(194698755374819634176.L))-
-        real(44007847156610839936.L))+real(63847680811365110016.L))-
-        real(26320609689333635200.L))+real(21317542480385897984.L))-
-        real(18170598119629527936.L))+real(5408264866072845056.L))-
-        real(6660168919267507840.L))+real(2709722479196675880.L))/
-        real(25663962300787160224875.L);
-      _C4x[63] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(55407314304087368064.L)*_n-real(406054191572349887424.L))+
-        real(616535942225097879296.L))-real(90919939024331464256.L))-
-        real(356540501468135277440.L))+real(174901775360747521856.L))-
-        real(46252044424347629056.L))+real(61466034473601797312.L))-
-        real(24627934848934652032.L))+real(24091470960744936000.L))-
-        real(17212751748991212288.L))+real(8259024089688799168.L))-
-        real(9338563264794234240.L))+real(1817846791809572160.L))+
-        real(488820862939508120.L))/real(25663962300787160224875.L);
-      _C4x[64] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(589863493951969521024.L)*_n-real(65740435573486634496.L))-
-        real(344448817745720924544.L))+real(159377073519514909440.L))-
-        real(48022377678434173056.L))+real(58565177969584864256.L))-
-        real(23803024688857466752.L))+real(25493284600946195712.L))-
-        real(16257603620153257600.L))+real(10479636984885329408.L))-
-        real(10245243715723244928.L))+real(3527273839089647360.L))-
-        real(3546938143855926400.L))+real(1674200066451717000.L))/
-        real(25663962300787160224875.L);
-      _C4x[65] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(146986382004362764512.L)-real(332485530657606817920.L)*_n)*_n-
-        real(49272023678007622080.L))+real(55614346192879924128.L))-
-        real(23446972943866739456.L))+real(26015091993676510816.L))-
-        real(15515664994429647936.L))+real(12055500873524365600.L))-
-        real(10418728685641211264.L))+real(5021266495159651296.L))-
-        real(5360528716174606016.L))+real(1332582772689968800.L))+
-        real(352185615496845060.L))/real(25663962300787160224875.L);
-      _C4x[66] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(52820294377651973120.L)-real(50060658829976585728.L)*_n)*_n-
-        real(23322350804746445312.L))+real(25999931365039206400.L))-
-        real(14989651655559085568.L))+real(13098779625122673664.L))-
-        real(10319481571379796480.L))+real(6233525196463896576.L))-
-        real(6254089969749669376.L))+real(2439783289072991232.L))-
-        real(2111026048550146560.L))+real(1102832964709346080.L))/
-        real(25663962300787160224875.L);
-      _C4x[67] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(25671030711491374848.L)-
-        real(23295867752115878400.L)*_n)*_n-real(14630133575110608896.L))+
-        real(13740158680947179776.L))-real(10141817662568879616.L))+
-        real(7165404758277149440.L))-real(6671338473796527104.L))+
-        real(3365290718200325376.L))-real(3351890018689511936.L))+
-        real(975745690328200960.L))+real(254698899202571040.L))/
-        real(25663962300787160224875.L);
-      _C4x[68] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(14092212633933705216.L)-
-        real(14385412688913695232.L)*_n)*_n-real(9961622044992609792.L))+
-        real(7852394045118379008.L))-real(6846829190959905280.L))+
-        real(4121220909497710592.L))-real(4076761661962311168.L))+
-        real(1753209738542545920.L))-real(1359751670673338880.L))+
-        real(763467477079376160.L))/real(25663962300787160224875.L);
-      _C4x[69] = (_n*(_n*(_n*(_n*(_n*(_n*((real(8339801374638293920.L)-
-        real(9803797102758335744.L)*_n)*_n-real(6902495651553394624.L))+
-        real(4722953129058764000.L))-real(4498028309574814336.L))+
-        real(2388072033598248480.L))-real(2235024224523720000.L))+
-        real(725663436901734240.L))+real(187755511208304060.L))/
-        real(25663962300787160224875.L);
-      _C4x[70] = (_n*(_n*(_n*(_n*(_n*((real(5190797136892005120.L)-
-        real(6900850279756457088.L)*_n)*_n-real(4740867620388853120.L))+
-        real(2906381084666032640.L))-real(2800363610162079360.L))+
-        real(1298219641868540160.L))-real(928706997591676800.L))+
-        real(549779481029532600.L))/real(25663962300787160224875.L);
-      _C4x[71] = (_n*(_n*(_n*(_n*((real(221725351825043520.L)-
-        real(325240456165524608.L)*_n)*_n-real(211162456243553024.L))+
-        real(117466249040685504.L))-real(104390186541646208.L))+
-        real(36679327307318080.L))+real(9429511275907800.L))/
-        real(1710930820052477348325.L);
-      _C4x[72] = (_n*(_n*(_n*((real(142732096833824256.L)-
-        real(227139329872510080.L)*_n)*_n-real(133726552915187584.L))+
-        real(65715633278448384.L))-real(44232030890087040.L))+
-        real(27249816031410280.L))/real(1710930820052477348325.L);
-      _C4x[73] = (_n*(_n*((real(45127039356960.L)-real(77938036150912.L)*_n)*_n-
-        real(38447602473280.L))+real(14332118226272.L))+real(3666866110908.L))/
-        real(865067661064049625.L);
-      _C4x[74] = (_n*((real(1356636312064.L)-real(2636988382464.L)*_n)*_n-
-        real(871294451456.L))+real(553528081392.L))/real(45529876898107875.L);
-      _C4x[75] = ((real(40707880576.L)-real(104352359168.L)*_n)*_n+
-        real(10376961584.L))/real(3123671388019875.L);
-      _C4x[76] = (real(5603312.L)-real(8609536.L)*_n)/real(590597728875.L);
-      _C4x[77] = real(2894476.L)/real(1093234093875.L);
-      _C4x[78] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*((-real(242883621120.L)*_n-
-        real(365079728640.L))*_n-real(559688344320.L))-real(876931046400.L))-
-        real(1407625524480.L))-real(2321347356160.L))-real(3946290505472.L))-
-        real(6943856439296.L))-real(12709737232640.L))-real(24349180803584.L))-
-        real(49209899019008.L))-real(105990551733248.L))-
-        real(246631860763904.L))-real(631866750717440.L))-
-        real(1832413577080576.L))-real(6282560835704832.L))-
-        real(27486203656208640.L))-real(180623624026513920.L))-
-        real(3160913420463993600.L))+real(48045883991052702720.L))-
-        real(204195006961973986560.L))+real(408390013923947973120.L))-
-        real(379219298643665975040.L))+real(130356633908760178920.L))/
-        real(35929547221102024314825.L);
-      _C4x[79] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*((-real(784468838400.L)*_n-real(1211352253440.L))*
-        _n-real(1913950924800.L))-real(3102521564160.L))-real(5176110700544.L))-
-        real(8922048099328.L))-real(15963949023232.L))-real(29824646548480.L))-
-        real(58614317590528.L))-real(122359748912128.L))-
-        real(274876595703808.L))-real(676708907219968.L))-
-        real(1875217453742080.L))-real(6102027478356992.L))-
-        real(25130243342819328.L))-real(153922740474768384.L))-
-        real(2481611530103408640.L))+real(34318488565037644800.L))-
-        real(131493998291302133760.L))+real(240229419955263513600.L))-
-        real(233365722242255984640.L))+real(116682861121127992320.L))-
-        real(23701206165229123440.L))/real(11976515740367341438275.L);
-      _C4x[80] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*((-real(14100417918720.L)*_n-real(22528414182400.L))*_n-
-        real(36999879082240.L))-real(62695678987776.L))-
-        real(110103434701568.L))-real(201527250907136.L))-
-        real(387212081706240.L))-real(788334624182784.L))-
-        real(1722236288376576.L))-real(4109266597180416.L))-
-        real(10991278451304704.L))-real(34350838977943040.L))-
-        real(135025265702966016.L))-real(783009277489051648.L))-
-        real(11820899985746795776.L))+real(150569423628710929920.L))-
-        real(516367601687102457600.L))+real(792215214980290053120.L))-
-        real(523176326992797569280.L))-real(17159244282518822400.L))+
-        real(204195006961973986560.L))-real(77484712463249057400.L))/
-        real(35929547221102024314825.L);
-      _C4x[81] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*((-real(69291376017408.L)*_n-real(115728070557696.L))*_n-
-        real(200070531596288.L))-real(359981829898240.L))-
-        real(678816162906112.L))-real(1353785673203712.L))-
-        real(2890726085804032.L))-real(6723753695690752.L))-
-        real(17476258575777792.L))-real(52866462876516352.L))-
-        real(200128797373775872.L))-real(1110110096913907712.L))-
-        real(15874263169655439360.L))+real(188516686836447363072.L))-
-        real(584747255596282003456.L))+real(750238284756528218112.L))-
-        real(268893603768166809600.L))-real(306337666348967608320.L))+
-        real(341017402162058280960.L))-real(109819163408120463360.L))+
-        real(7292678820070499520.L))/real(35929547221102024314825.L);
-      _C4x[82] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*((-real(316266632392192.L)*_n-real(560813613253632.L))*_n-
-        real(1040848049682944.L))-real(2039960293941248.L))-
-        real(4273077558511104.L))-real(9729363901824000.L))-
-        real(24690856467239424.L))-real(72690250131953664.L))-
-        real(266676021407505920.L))-real(1425309156383028224.L))-
-        real(19471097384879712768.L))+real(217791775730183008256.L))-
-        real(618541288352201815552.L))+real(669580927307504636928.L))-
-        real(66449075319041081856.L))-real(415120207219196774400.L))+
-        real(271524426118118208000.L))-real(26371049107871032320.L))-
-        real(5238085096768903680.L))-real(5898490222115845200.L))/
-        real(35929547221102024314825.L);
-      _C4x[83] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*((-real(1461823265378304.L)*_n-real(2822457846364160.L))*_n-
-        real(5815680367099904.L))-real(13002523267270656.L))-
-        real(32331049698848768.L))-real(93006093247649792.L))-
-        real(332208933966077952.L))-real(1720161862706997248.L))-
-        real(22597300339825627136.L))+real(240048421933070370816.L))-
-        real(631131479118559068160.L))+real(582406064076255082496.L))+
-        real(73874934688762712064.L))-real(429094500064720738304.L))+
-        real(183140836734686322688.L))-real(2054397393275480064.L))+
-        real(36250376022016880640.L))-real(33957241316984616960.L))+
-        real(5317107932280503520.L))/real(35929547221102024314825.L);
-      _C4x[84] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(1067471421138432.L)*_n-real(2349101840916480.L))*_n-
-        real(5738576033176064.L))-real(16180146920588288.L))-
-        real(56470414075432448.L))-real(284474901387388928.L))-
-        real(3612319428336419328.L))+real(36689299007526614016.L))-
-        real(90141993408478164480.L))+real(71564637069363744768.L))+
-        real(23741795651031553536.L))-real(57747760591701677056.L))+
-        real(16997829324519023104.L))-real(1480136257839773696.L))+
-        real(8315193643228048896.L))-real(3706262138720443392.L))-
-        real(164917221937251840.L))-real(87892745620044720.L))/
-        real(5132792460157432044975.L);
-      _C4x[85] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(48042986241130496.L)*_n-real(133090957390725120.L))*_n-
-        real(455144450749743104.L))-real(2238184783310667776.L))-
-        real(27586914628348379136.L))+real(269373932187331772416.L))-
-        real(623350670882734161920.L))+real(429031513413253545984.L))+
-        real(225194518881659715584.L))-real(367056871303009484800.L))+
-        real(79006410179092365312.L))-real(26178408368267509760.L))+
-        real(61916484299772755968.L))-real(15977635405341474816.L))+
-        real(8695064196615487488.L))-real(13319028971694243840.L))+
-        real(3165821671116888000.L))/real(35929547221102024314825.L);
-      _C4x[86] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(511389029512050432.L)*_n-real(2461546726962537984.L))*_n-
-        real(29550293698669995264.L))+real(278667554097992549376.L))-
-        real(611406082465663595264.L))+real(367062529094954495488.L))+
-        real(261873907500228468480.L))-real(328816100981872666624.L))+
-        real(55869074213894557952.L))-real(40022920693953265152.L))+
-        real(57094426968881406720.L))-real(11607702029215208448.L))+
-        real(17775856838088873216.L))-real(14378127912575347200.L))+
-        real(519096589050111744.L))+real(147272060840096472.L))/
-        real(35929547221102024314825.L);
-      _C4x[87] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(285448955427901504512.L)-real(31223733481256085504.L)*_n)*_n-
-        real(597132006171262619648.L))+real(314209123559704175616.L))+
-        real(283760219629225199616.L))-real(293786554332581295104.L))+
-        real(43243222327688929280.L))-real(49729927392168561664.L))+
-        real(49758672136213755904.L))-real(11463852924163548160.L))+
-        real(23000103470651396096.L))-real(12148563661590608896.L))+
-        real(3940386282428868608.L))-real(6320436734076408832.L))+
-        real(1960568001627648784.L))/real(35929547221102024314825.L);
-      _C4x[88] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(269270113711154254848.L)-real(581745027768314771712.L)*_n)*_n+
-        real(295866519843524886784.L))-real(263213710131456252416.L))+
-        real(36857563226622991104.L))-real(55635282410869934080.L))+
-        real(42618725592382870784.L))-real(13361637729751954944.L))+
-        real(24964906463459208960.L))-real(10132570797317907456.L))+
-        real(7713853460933765376.L))-real(8118635745745555968.L))+
-        real(817804752655172352.L))+real(241872668423848056.L))/
-        real(35929547221102024314825.L);
-      _C4x[89] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(301508380982742810624.L)*_n-real(237098342869246836736.L))+
-        real(34055388652539379712.L))-real(58666097247303598080.L))+
-        real(36617989065130246144.L))-real(15869885773640794112.L))+
-        real(24907361632198950912.L))-real(9102550367414353920.L))+
-        real(10612564545839628288.L))-real(8028287362742255616.L))+
-        real(2453762803818332160.L))-real(3435267925345665024.L))+
-        real(1281312645923791488.L))/real(35929547221102024314825.L);
-      _C4x[90] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(33241434114054288384.L)*_n-real(59708543117484410880.L))+
-        real(31913638267091926016.L))-real(18261620220846055424.L))+
-        real(23810951878141281280.L))-real(8919008353446295552.L))+
-        real(12421882670009666560.L))-real(7453149529783881728.L))+
-        real(4282134731677766656.L))-real(4892000746239961088.L))+
-        real(758525460038671360.L))+real(216382513998207200.L))/
-        real(35929547221102024314825.L);
-      _C4x[91] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(4052094133266980864.L)*_n-real(2891602662168268800.L))+
-        real(3185306291627917312.L))-real(1323327350130077696.L))+
-        real(1903968635822432256.L))-real(993615313994502144.L))+
-        real(838457301038678016.L))-real(759500839229239296.L))+
-        real(247076914051817472.L))-real(294315017353728000.L))+
-        real(125447024751451200.L))/real(5132792460157432044975.L);
-      _C4x[92] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(20712624738972171264.L)*
-        _n-real(9864755493535784960.L))+real(13599413786714850304.L))-
-        real(6685964913996724224.L))+real(7057906530373766144.L))-
-        real(5308190137312104448.L))+real(2758504160084972544.L))-
-        real(3137033601628416000.L))+real(630344572775930880.L))+
-        real(174767528979882720.L))/real(35929547221102024314825.L);
-      _C4x[93] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(13471407830586753024.L)*_n-
-        real(6632511891899056128.L))+real(7850812427279368192.L))-
-        real(5177464536287248384.L))+real(3693871747663462400.L))-
-        real(3627594092443238400.L))+real(1285906172887203840.L))-
-        real(1329609876687912960.L))+real(626080534632443520.L))/
-        real(35929547221102024314825.L);
-      _C4x[94] = (_n*(_n*(_n*(_n*(_n*(_n*(real(8315448511392994048.L)*_n-
-        real(5060090885926992384.L))+real(4459535157381056768.L))-
-        real(3811080007110016000.L))+real(1938317597848477440.L))-
-        real(2120327477470379520.L))+real(508119540150539520.L))+
-        real(137999414413836360.L))/real(35929547221102024314825.L);
-      _C4x[95] = (_n*(_n*(_n*(_n*(_n*(real(335889721529219072.L)*_n-
-        real(257030660167255040.L))+real(169115738491932672.L))-
-        real(170690997462948864.L))+real(65675140787300352.L))-
-        real(60512422833730560.L))+real(30748311870368400.L))/
-        real(2395303148073468287655.L);
-      _C4x[96] = (_n*(_n*(_n*(_n*(real(1016222889010513664.L)*_n-
-        real(930326412265980928.L))+real(478801204975292672.L))-
-        real(498875776721986048.L))+real(135831004466592512.L))+
-        real(36335146679814136.L))/real(11976515740367341438275.L);
-      _C4x[97] = (_n*(_n*(_n*(real(20760216502272.L)*_n-real(20955891089408.L))+
-        real(8660978450432.L))-real(7275842387968.L))+real(3923283780416.L))/
-        real(403698241829889825.L);
-      _C4x[98] = (_n*(_n*(real(15929987148288.L)*_n-real(15815039865856.L))+
-        real(4741616422400.L))+real(1254038195696.L))/
-        real(519040596638429775.L);
-      _C4x[99] = (_n*(real(969805824.L)*_n-real(756467712.L))+
-        real(427576864.L))/real(56794025236725.L);
-      _C4x[100] = (real(76231168.L)*_n+real(19985680.L))/real(10276400482425.L);
-      _C4x[101] = real(433472.L)/real(72882272925.L);
-      _C4x[102] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(real(18103127040.L)*_n+real(30658521600.L))+
-        real(53362944000.L))+real(95756838400.L))+real(177805329408.L))+
-        real(343155696128.L))+real(692078714880.L))+real(1468390694400.L))+
-        real(3305318661120.L))+real(7979983624704.L))+real(20965164079104.L))+
-        real(61148395230720.L))+real(203827984102400.L))+
-        real(812400108065280.L))+real(4188373890469888.L))+
-        real(32983444387450368.L))+real(706788094016793600.L))-
-        real(13546771801988544000.L))+real(75861922091135846400.L))-
-        real(216206477959737162240.L))+real(350048583363383976960.L))-
-        real(291707152802819980800.L))+real(94804824660916493760.L))/
-        real(46195132141416888404775.L);
-      _C4x[103] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(real(273177999360.L)*_n+real(481049600000.L))+
-        real(875104847872.L))+real(1651522793472.L))+real(3250070362112.L))+
-        real(6711949361152.L))+real(14663819520000.L))+real(34246326030336.L))+
-        real(86693786597376.L))+real(242515952050176.L))+
-        real(771052145575936.L))+real(2911828344320000.L))+
-        real(14109555425236992.L))+real(103409507088842752.L))+
-        real(2037643897713600512.L))-real(35395947748361023488.L))+
-        real(176697023504198400000.L))-real(442166631616906076160.L))+
-        real(630737695100586608640.L))-real(521641026188572200960.L))+
-        real(233365722242255984640.L))-real(43756072920422997120.L))/
-        real(46195132141416888404775.L);
-      _C4x[104] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(real(2513346781184.L)*_n+real(4653198092288.L))+
-        real(8967832989696.L))+real(18101637462016.L))+real(38566407405568.L))+
-        real(87605487814656.L))+real(215045569449984.L))+
-        real(581215525459968.L))+real(1777694813626368.L))+
-        real(6424469183555584.L))+real(29598152754343936.L))+
-        real(204557105919817728.L))+real(3759883208095809536.L))-
-        real(60010660035937859584.L))+real(268981559619866677248.L))-
-        real(580150515251491301376.L))+real(649491139195165532160.L))-
-        real(296945237899588884480.L))-real(105484196431484129280.L))+
-        real(178456140538195752960.L))-real(58341430560563996160.L))/
-        real(46195132141416888404775.L);
-      _C4x[105] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(real(19013924386816.L)*_n+real(37632291803136.L))+
-        real(78471447259136.L))+real(174088509751296.L))+
-        real(416320388585472.L))+real(1092997200375808.L))+
-        real(3235904844433408.L))+real(11271030679953408.L))+
-        real(49777532410411008.L))+real(327472966826872832.L))+
-        real(5674829647767791616.L))-real(84189632353294598144.L))+
-        real(342567056241741305856.L))-real(639338954164724158464.L))+
-        real(536482529069452249088.L))-real(9172538820129054720.L))-
-        real(345006828292730849280.L))+real(255763051621543710720.L))-
-        real(65746999145651066880.L))+real(2573886642377823360.L))/
-        real(46195132141416888404775.L);
-      _C4x[106] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(real(136634213689344.L)*_n+real(296980894577664.L))+
-        real(694382762737664.L))+real(1778037040647168.L))+
-        real(5119046452058112.L))+real(17276439327286272.L))+
-        real(73591094605443072.L))+real(464123397252365312.L))+
-        real(7645258159150123008.L))-real(106431032632201030656.L))+
-        real(397322760629848940544.L))-real(647100699339985458176.L))+
-        real(388288976253983422464.L))+real(196457446559392105472.L))-
-        real(391173179500435189760.L))+real(156577122427853675520.L))+
-        real(5120287081099438080.L))-real(1083741744159083520.L))-
-        real(6186359122908101760.L))/real(46195132141416888404775.L);
-      _C4x[107] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(real(1048407575824384.L)*_n+real(2626638683471872.L))+
-        real(7380467755382784.L))+real(24234411666681856.L))+
-        real(100037120244705280.L))+real(608172919175700480.L))+
-        real(9584857549436409856.L))-real(126184649112624951296.L))+
-        real(436228804751660992512.L))-real(625442338951991443456.L))+
-        real(247714942105394591744.L))+real(314492653942129324032.L))-
-        real(346041142333110769664.L))+real(64513956314965319680.L))+
-        real(6992490210139478016.L))+real(40698429093695901696.L))-
-        real(26418168314138818560.L))+real(3115757514457365120.L))/
-        real(46195132141416888404775.L);
-      _C4x[108] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(9965526918987776.L)*_n+real(31941212397987840.L))+
-        real(128254430705700864.L))+real(754928478787811328.L))+
-        real(11443013490573385728.L))-real(143380861806255732736.L))+
-        real(462707814424058327040.L))-real(588682188079886444544.L))+
-        real(128886568389798051840.L))+real(370304580148619683840.L))-
-        real(276392409679204675584.L))+real(15126796833668495360.L))-
-        real(19979400699805933568.L))+real(55885978313940289536.L))-
-        real(13959850176936136704.L))-real(1752834473161648128.L))-
-        real(1138714151471500800.L))/real(46195132141416888404775.L);
-      _C4x[109] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(157539740750432256.L)*_n+real(901048006842634240.L))+
-        real(13192536862516271104.L))-real(158172203468725149696.L))+
-        real(479762841820583946240.L))-real(545407492632180527104.L))+
-        real(33687967123189757952.L))+real(387655649704096743424.L))-
-        real(210448063744198834176.L))-real(2168459407262281728.L))-
-        real(45090046273136650240.L))+real(49867431789483614208.L))-
-        real(4405388962778044416.L))+real(9891350435745214464.L))-
-        real(11629020106889644032.L))+real(2142745905027579264.L))/
-        real(46195132141416888404775.L);
-      _C4x[110] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(14821072658522649600.L)*_n-real(170799381732787991040.L))+
-        real(489794152476524021760.L))-real(500528836213713190400.L))-
-        real(40435972066279236608.L))+real(383084793925621691904.L))-
-        real(156863559792402190336.L))-real(1938352761244243456.L))-
-        real(60068217375579012096.L))+real(37173904484881866240.L))-
-        real(4135539347527870464.L))+real(19515690288875966976.L))-
-        real(10435833217849611264.L))-real(330755163996977664.L))-
-        real(160401631336588992.L))/real(46195132141416888404775.L);
-      _C4x[111] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(494643829831786352640.L)*_n-real(456729009019156316160.L))-
-        real(97179455474204364800.L))+real(366971588404943659008.L))-
-        real(116321132765310971904.L))+real(5942013359845441536.L))-
-        real(65872479785281490944.L))+real(25528829872870711296.L))-
-        real(8966084839048458240.L))+real(23187693588903051264.L))-
-        real(6819842083948056576.L))+real(3735628842718961664.L))-
-        real(5849993593648705536.L))+real(1437054551156673792.L))/
-        real(46195132141416888404775.L);
-      _C4x[112] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(345500549750762024960.L)-real(140110654925523861504.L)*_n)*_n-
-        real(86855575265351786496.L))+real(16025211538095771648.L))-
-        real(65548752179557269504.L))+real(17341500773995933696.L))-
-        real(14922975928802844672.L))+real(22517783091816714240.L))-
-        real(4913568107899895808.L))+real(8272319983869505536.L))-
-        real(6684449054325202944.L))+real(214361814320812032.L))+
-        real(66945263098592256.L))/real(46195132141416888404775.L);
-      _C4x[113] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(25687197355740815360.L)-real(66003204519449473024.L)*_n)*_n-
-        real(61803020428320116736.L))+real(12585324357067571200.L))-
-        real(19972298686181273600.L))+real(19807323231475605504.L))-
-        real(5057295022990479360.L))+real(11281463933279059968.L))-
-        real(5670781104596299776.L))+real(2012896756543217664.L))-
-        real(3278630196122652672.L))+real(989411609030664960.L))/
-        real(46195132141416888404775.L);
-      _C4x[114] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(10454815561036474368.L)-real(56505827080219357184.L)*_n)*_n-
-        real(23462799663937798144.L))+real(16633187419360352256.L))-
-        real(6463336376529457152.L))+real(12544758638274709504.L))-
-        real(4649603171325665280.L))+real(4261199547337979904.L))-
-        real(4305287859314405376.L))+real(364277280888514560.L))+
-        real(113015337613920000.L))/real(46195132141416888404775.L);
-      _C4x[115] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(13802796245122646016.L)-
-        real(25434405874663133184.L)*_n)*_n-real(8337694044015652864.L))+
-        real(12533392600841527296.L))-real(4225871962067259392.L))+
-        real(6121993094360514560.L))-real(4216339765361848320.L))+
-        real(1337342433601413120.L))-real(1998257783506145280.L))+
-        real(703676254544444160.L))/real(46195132141416888404775.L);
-      _C4x[116] = (_n*(_n*(_n*(_n*(_n*(_n*((real(11801027199330217984.L)-
-        real(10162290103828054016.L)*_n)*_n-real(4394816238218551296.L))+
-        real(7309114569868562432.L))-real(3830780949081210880.L))+
-        real(2564692061043732480.L))-real(2868745887941713920.L))+
-        real(372693313207111680.L))+real(110793809332362240.L))/
-        real(46195132141416888404775.L);
-      _C4x[117] = (_n*(_n*(_n*(_n*(_n*((real(7862329335452393472.L)-
-        real(4954857180036468736.L)*_n)*_n-real(3544201182159908864.L))+
-        real(3697851436526551040.L))-real(3077148363054796800.L))+
-        real(984815530288128000.L))-real(1300279457548431360.L))+
-        real(515834171582526720.L))/real(46195132141416888404775.L);
-      _C4x[118] = (_n*(_n*(_n*(_n*((real(4561351010191782400.L)-
-        real(3476050711360447488.L)*_n)*_n-real(3007934134419658752.L))+
-        real(1723564576918052352.L))-real(1984277919243045888.L))+
-        real(336215412009404928.L))+real(96673839692633280.L))/
-        real(46195132141416888404775.L);
-      _C4x[119] = (_n*(_n*(_n*((real(271211726605918208.L)-
-        real(321074139364931584.L)*_n)*_n-real(251667480938514432.L))+
-        real(84756609940000768.L))-real(99010380079880192.L))+
-        real(43146056709216384.L))/real(5132792460157432044975.L);
-      _C4x[120] = (_n*(_n*((real(126104873342976.L)-real(236083241017344.L)*_n)*
-        _n-real(143668734849024.L))+real(29310252353536.L))+
-        real(8220189705728.L))/real(4671365369745867975.L);
-      _C4x[121] = (_n*((real(4726530879488.L)-real(13190908925952.L)*_n)*_n-
-        real(4952243259392.L))+real(2326694308224.L))/
-        real(359335797672759075.L);
-      _C4x[122] = ((real(1497740028928.L)-real(6393343404032.L)*_n)*_n+
-        real(412184096896.L))/real(281641571148919275.L);
-      _C4x[123] = (real(42776448.L)-real(85649408.L)*_n)/real(8407964031075.L);
-      _C4x[124] = real(74207744.L)/real(61002462438225.L);
-      _C4x[125] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*((-real(2537256960.L)*_n-real(4922368000.L))*_n-
-        real(9913649152.L))-real(20825468928.L))-real(45893163008.L))-
-        real(106847240192.L))-real(265153996800.L))-real(709434249216.L))-
-        real(2077628872704.L))-real(6799512674304.L))-real(25624089430016.L))-
-        real(116473133772800.L))-real(691850414610432.L))-
-        real(6354774178643968.L))-real(161252394783090688.L))+
-        real(3731841136408670208.L))-real(25915563447282432000.L))+
-        real(95369273485999349760.L))-real(214580865343498536960.L))+
-        real(302002699372331274240.L))-real(233365722242255984640.L))+
-        real(72926788200704995200.L))/real(56460717061731752494725.L);
-      _C4x[126] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*((-real(57693732864.L)*_n-real(118378242048.L))*_n-
-        real(254261280768.L))-real(575562375168.L))-real(1384868610048.L))-
-        real(3580953829376.L))-real(10097064198144.L))-real(31675778555904.L))-
-        real(113828878843904.L))-real(490320413958144.L))-
-        real(2739448106336256.L))-real(23453030216491008.L))-
-        real(548560506517782528.L))+real(11543447295506767872.L))-
-        real(71688207509282603008.L))+real(231374150457337552896.L))-
-        real(447820936369040424960.L))+real(540425883087329648640.L))-
-        real(398816961850542735360.L))+real(164728745112180695040.L))-
-        real(29170715280281998080.L))/real(56460717061731752494725.L);
-      _C4x[127] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*((-real(808445556736.L)*_n-real(1786041962496.L))*_n-
-        real(4184459012096.L))-real(10507804246016.L))-real(28685099046912.L))-
-        real(86810454355968.L))-real(299658406053888.L))-
-        real(1233549531045888.L))-real(6545223491975168.L))-
-        real(52802874841321472.L))-real(1152224452623476736.L))+
-        real(22320594549295529984.L))-real(125215982237277116416.L))+
-        real(354448650668679942144.L))-real(570073287671020750848.L))+
-        real(501725308339387883520.L))-real(148802453393668945920.L))-
-        real(140163932244574801920.L))+real(152446338678377748480.L))-
-        real(45471997348674879360.L))/real(56460717061731752494725.L);
-      _C4x[128] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*((-real(9597691920384.L)*_n-real(23494436962304.L))*_n-
-        real(62361803423744.L))-real(182950641942528.L))-
-        real(610001932746752.L))-real(2415033030459392.L))-
-        real(12258327890952192.L))-real(93963282570493952.L))-
-        real(1930830919739015168.L))+real(34785359442973310976.L))-
-        real(178075457418310057984.L))+real(445101745270129934336.L))-
-        real(587959696439944249344.L))+real(324671767561098969088.L))+
-        real(140394292808550645760.L))-real(326441861023223070720.L))+
-        real(189482034804857733120.L))-real(40459691781939118080.L))+
-        real(541870872079541760.L))/real(56460717061731752494725.L);
-      _C4x[129] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((-real(115017067874304.L)*_n-real(328354924756992.L))*_n-
-        real(1062119704868864.L))-real(4064233651613696.L))-
-        real(19846559690467328.L))-real(145485874426339328.L))-
-        real(2836182236352976896.L))+real(47920312108896546816.L))-
-        real(225916379763918047232.L))+real(502595593832101625856.L))-
-        real(540905307471102572544.L))+real(127405670163817730048.L))+
-        real(315802573700030470144.L))-real(315723956664196505600.L))+
-        real(79405286402473371648.L))+real(15794357940961947648.L))+
-        real(2544437138460456960.L))-real(5915423686868330880.L))/
-        real(56460717061731752494725.L);
-      _C4x[130] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(1664495212691456.L)*_n-real(6180472042659840.L))*_n-
-        real(29166995845136384.L))-real(205539249288568832.L))-
-        real(3824268163589701632.L))+real(61023735766946799616.L))-
-        real(267055399292611543040.L))+real(532832403184947339264.L))-
-        real(462267689701148262400.L))-real(39015572245931008000.L))+
-        real(383060998113397653504.L))-real(227617994389522472960.L))+
-        real(711622893799702528.L))-real(387352371525525504.L))+
-        real(41263859568909336576.L))-real(20330366864340836352.L))+
-        real(1849428846010609920.L))/real(56460717061731752494725.L);
-      _C4x[131] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(40019005873637376.L)*_n-real(272261294199951360.L))*_n-
-        real(4858877431278753792.L))+real(73653561205573214208.L))-
-        real(301269236174345922560.L))+real(542796485481860829184.L))-
-        real(373296281778879363072.L))-real(162249902898593972224.L))+
-        real(382431663488608434176.L))-real(136592383953202286592.L))-
-        real(22533323410280847360.L))-real(36819831808733503488.L))+
-        real(47746588802853427200.L))-real(5860112779510886400.L))-
-        real(1438706431376406528.L))-real(1384912004220683904.L))/
-        real(56460717061731752494725.L);
-      _C4x[132] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(85554928869091901440.L)-real(5911898202030080000.L)*_n)*_n-
-        real(329037136989733519360.L))+real(538573729785929728000.L))-
-        real(285757899196842770432.L))-real(245880014080640221184.L))+
-        real(347694094967094378496.L))-real(68280878701665910784.L))-
-        real(13052392881684086784.L))-real(60356030390417162240.L))+
-        real(33166479587711647744.L))+real(918143736754929664.L))+
-        real(11253131021190037504.L))-real(9943488469347270656.L))+
-        real(1472213422500165632.L))/real(56460717061731752494725.L);
-      _C4x[133] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(524897089413599477760.L)-real(351118684368217559040.L)*_n)*_n-
-        real(205389679022947020800.L))-real(298119328625579859968.L))+
-        real(300050884905994973184.L))-real(25112131953393565696.L))+
-        real(8008073772506845184.L))-real(66798173902905532416.L))+
-        real(16491634366686474240.L))-real(3992578649173868544.L))+
-        real(19954657147267239936.L))-real(7003958154890747904.L))-
-        real(647530057747206144.L))-real(350875606673394432.L))/
-        real(56460717061731752494725.L);
-      _C4x[134] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(134450348908761120768.L)*_n-real(327239199686486179840.L))*_n+
-        real(251011872757925052416.L))-real(1867758902463971328.L))+
-        real(29035841261959512064.L))-real(61859532384109838336.L))+
-        real(5781632490324590592.L))-real(13107991630759280640.L))+
-        real(20768921077306687488.L))-real(2948895761747066880.L))+
-        real(4066123689261957120.L))-real(5306310981973327872.L))+
-        real(1065217274598188544.L))/real(56460717061731752494725.L);
-      _C4x[135] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(206053883225512914944.L)*_n+real(7720736017805680640.L))+
-        real(45397379103692066816.L))-real(51715684622099906560.L))+
-        real(1760287638430576640.L))-real(20963860111527911424.L))+
-        real(16956495612358184960.L))-real(2208998123324489728.L))+
-        real(8937580274582564864.L))-real(5234902751701590016.L))-
-        real(120335382888706048.L))-real(55084512703673600.L))/
-        real(56460717061731752494725.L);
-      _C4x[136] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(56164240858270859264.L)*_n-real(40506307406240514048.L))+
-        real(2510618052392648704.L))-real(25601333423813328896.L))+
-        real(12055656223301763072.L))-real(4273511299313270784.L))+
-        real(11375548621740441600.L))-real(3565500594733744128.L))+
-        real(1945198541853622272.L))-real(3079469070135951360.L))+
-        real(770312541176478720.L))/real(56460717061731752494725.L);
-      _C4x[137] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(5855674501258481664.L)*
-        _n-real(27112441910496690176.L))+real(8045236379185967104.L))-
-        real(7462794309065711616.L))+real(11438973707792863232.L))-
-        real(2557499453730242560.L))+real(4538321823875051520.L))-
-        real(3653879278459576320.L))+real(107313308782202880.L))+
-        real(35462645868061440.L))/real(56460717061731752494725.L);
-      _C4x[138] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(5578913399404363776.L)*_n-
-        real(10492014814329421824.L))+real(10109913939708706816.L))-
-        real(2718425183160451072.L))+real(6419178928236462080.L))-
-        real(3105303494357729280.L))+real(1168915061406597120.L))-
-        real(1916694726746849280.L))+real(567340713305372160.L))/
-        real(56460717061731752494725.L);
-      _C4x[139] = (_n*(_n*(_n*(_n*(_n*(_n*(real(8321651132554350592.L)*_n-
-        real(3732077199843581952.L))+real(7253697442863263744.L))-
-        real(2508592211553894400.L))+real(2612672354259652608.L))-
-        real(2554306470086418432.L))+real(188124321312829440.L))+
-        real(60321591649541376.L))/real(56460717061731752494725.L);
-      _C4x[140] = (_n*(_n*(_n*(_n*(_n*(real(2409402339733405696.L)*_n-
-        real(771797135840051200.L))+real(1289305518469545984.L))-
-        real(825470576609918976.L))+real(271707946069131264.L))-
-        real(421028947932020736.L))+real(142328015420000256.L))/
-        real(18820239020577250831575.L);
-      _C4x[141] = (_n*(_n*(_n*(_n*(real(4673381031931672576.L)*_n-
-        real(2204999319298383872.L))+real(1674107785629976576.L))-
-        real(1821433246212952064.L))+real(204983045455648768.L))+
-        real(62837115694559360.L))/real(56460717061731752494725.L);
-      _C4x[142] = (_n*(_n*(_n*(real(6479517679616.L)*_n-real(4996902068224.L))+
-        real(1604074520576.L))-real(2261353160704.L))+real(850763001088.L))/
-        real(146396065718531475.L);
-      _C4x[143] = (_n*(_n*(real(262985717004288.L)*_n-real(300145979420672.L))+
-        real(44168174921728.L))+real(13069811607424.L))/
-        real(12736457717512238325.L);
-      _C4x[144] = (_n*(real(2999519051776.L)*_n-real(3815382990848.L))+
-        real(1566641629696.L))/real(344228586959790225.L);
-      _C4x[145] = (real(19006687232.L)*_n+real(5473719680.L))/
-        real(6052799884148325.L);
-      _C4x[146] = real(356096.L)/real(98232628725.L);
-      _C4x[147] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(real(651542528.L)*_n+real(1480134656.L))+
-        real(3538968576.L))+real(8971595776.L))+real(24338169856.L))+
-        real(71493373952.L))+real(230978592768.L))+real(838422294528.L))+
-        real(3525673238528.L))+real(18006116896768.L))+real(121132059123712.L))+
-        real(1271886620798976.L))+real(37308674210103296.L))-
-        real(1011997787949051904.L))+real(8385124528720715776.L))-
-        real(37733060379243220992.L))+real(107808743940694917120.L))-
-        real(206633425886331924480.L))+real(262987996582604267520.L))-
-        real(192183535964210810880.L))+real(58341430560563996160.L))/
-        real(66726301982046616584675.L);
-      _C4x[148] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(real(7458340864.L)*_n+real(18373115904.L))+
-        real(48303816704.L))+real(137088466944.L))+real(426386014208.L))+
-        real(1483862474752.L))+real(5953448230912.L))+real(28844183846912.L))+
-        real(182831340797952.L))+real(1794064010805248.L))+
-        real(48695087767732224.L))-real(1207444365345161216.L))+
-        real(9010044821739945984.L))-real(35853635915909267456.L))+
-        real(88642745017904709632.L))-real(143744991920926556160.L))+
-        real(153545786824626094080.L))-real(104039207439272017920.L))+
-        real(40459691781939118080.L))-real(6863697713007528960.L))/
-        real(22242100660682205528225.L);
-      _C4x[149] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(real(490704814080.L)*_n+real(1351320182784.L))+
-        real(4066117287936.L))+real(13642049150976.L))+real(52552023064576.L))+
-        real(243279881248768.L))+real(1464825953353728.L))+
-        real(13556477720518656.L))+real(343923884074745856.L))-
-        real(7878851450693443584.L))+real(53471567123098435584.L))-
-        real(189193134843847680000.L))+real(401150859822932803584.L))-
-        real(520992983649036394496.L))+real(373301388109800177664.L))-
-        real(53753590510290542592.L))-real(150027552756631388160.L))+
-        real(130049009299090022400.L))-real(36485972053355811840.L))/
-        real(66726301982046616584675.L);
-      _C4x[150] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(real(9749494448128.L)*_n+real(31673898237952.L))+
-        real(117735157710848.L))+real(523716343988224.L))+
-        real(3014630577946624.L))+real(26503128817270784.L))+
-        real(633547671857250304.L))-real(13527382906757414912.L))+
-        real(84249771272726986752.L))-real(266993234665208676352.L))+
-        real(485046923972015734784.L))-real(484496742159475834880.L))+
-        real(152283106240320520192.L))+real(216332688829859037184.L))-
-        real(288444933088880246784.L))+real(140628841746416959488.L))-
-        real(25381545776247521280.L))-real(361247248053027840.L))/
-        real(66726301982046616584675.L);
-      _C4x[151] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(222873818431488.L)*_n+real(956950274150400.L))+
-        real(5293125928886272.L))+real(44463157172482048.L))+
-        real(1008090872565547008.L))-real(20209302047056539648.L))+
-        real(116418035304358502400.L))-real(332852458239655022592.L))+
-        real(518452370166161571840.L))-real(376911917377749970944.L))-
-        real(64742299564264218624.L))+real(344934836248745881600.L))-
-        real(234766360594590089216.L))+real(31571817959676137472.L))+
-        real(17415258636573794304.L))+real(5088874276920913920.L))-
-        real(5457974726018572800.L))/real(66726301982046616584675.L);
-      _C4x[152] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(8348766968020992.L)*_n+real(67330122517184512.L))+
-        real(1455753628881190912.L))-real(27570062059421564928.L))+
-        real(147907974856061550592.L))-real(384075322020403478528.L))+
-        real(512983686873806733312.L))-real(244731045423731965952.L))-
-        real(222808850930770313216.L))+real(353957909818188103680.L))-
-        real(124681414813050798080.L))-real(26261430418020761600.L))-
-        real(10976353583943057408.L))+real(39242463673357041664.L))-
-        real(15614257863671742464.L))+real(1093165585412640768.L))/
-        real(66726301982046616584675.L);
-      _C4x[153] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(1962969852477898752.L)*_n-real(35305448761504137216.L))+
-        real(177444036314716831744.L))-real(420983788835094560768.L))+
-        real(481513040737160986624.L))-real(115770824336966385664.L))-
-        real(316251646991689056256.L))+real(300296703316121845760.L))-
-        real(35698934410878713856.L))-real(22987716899146137600.L))-
-        real(48754125669778980864.L))+real(37558578965926215680.L))-
-        real(819150890898751488.L))-real(835363951119925248.L))-
-        real(1478495983335870464.L))/real(66726301982046616584675.L);
-      _C4x[154] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(204342801095639105536.L)*_n-real(445279393128034074624.L))+
-        real(434697594718445436928.L))-real(3268222682794164224.L))-
-        real(357961072015183773696.L))+real(226521921755465383936.L))+
-        real(13832199423611699200.L))+real(6700002009011060736.L))-
-        real(63646208803315712000.L))+real(17600007691779702784.L))+
-        real(2188204058816348160.L))+real(12161956907243143168.L))-
-        real(8401794163626278912.L))+real(1022107655960530944.L))/
-        real(66726301982046616584675.L);
-      _C4x[155] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(380310685278830297088.L)*_n+real(88396387765523898368.L))-
-        real(364041147913263235072.L))+real(155712348873284886528.L))+
-        real(30751932572098691072.L))+real(37327348376370569216.L))-
-        real(57819133838626406400.L))+real(1568766212252180480.L))-
-        real(7294602820486266880.L))+real(18993005469496762368.L))-
-        real(4271172311806296064.L))-real(681405103973687296.L))-
-        real(465241450273410048.L))/real(66726301982046616584675.L);
-      _C4x[156] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(97442281219530752000.L)-real(348150405088168148992.L)*_n)*_n+
-        real(27296601451329912832.L))+real(58368243554678210560.L))-
-        real(42347388774899941376.L))-real(3874741747224477696.L))-
-        real(18528883346465587200.L))+real(16619875543575822336.L))-
-        real(566081087842844672.L))+real(4532144155924955136.L))-
-        real(4744835934382817280.L))+real(796967417840384000.L))/
-        real(66726301982046616584675.L);
-      _C4x[157] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(13745492203103485952.L)*_n+real(68343033702309838848.L))-
-        real(25868893155690938368.L))-real(954725642114842624.L))-
-        real(25342928463681454080.L))+real(10343803033386303488.L))-
-        real(1580521432914264064.L))+real(9280150579607814144.L))-
-        real(3906003728131391488.L))-real(282227624406138880.L))-
-        real(139103863664855040.L))/real(66726301982046616584675.L);
-      _C4x[158] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(6052176817707810816.L)-
-        real(12742218592723501056.L)*_n)*_n-real(26781807051222712320.L))+
-        real(4776498176041353216.L))-real(5579883103275679744.L))+
-        real(10639659233545158656.L))-real(1908917464976621568.L))+
-        real(2064236965302435840.L))-real(2854027449912360960.L))+
-        real(604128201721067520.L))/real(66726301982046616584675.L);
-      _C4x[159] = (_n*(_n*(_n*(_n*(_n*(_n*((real(1822932896645865472.L)-
-        real(24339113121844232192.L)*_n)*_n-real(9913814970209812480.L))+
-        real(9247924716790882304.L))-real(1332708868547510272.L))+
-        real(4844914036085415936.L))-real(2997554810854883328.L))-
-        real(50494010328244224.L))-real(22158761866472448.L))/
-        real(66726301982046616584675.L);
-      _C4x[160] = (_n*(_n*(_n*(_n*(_n*((real(6758659105338556416.L)-
-        real(12991045950855118848.L)*_n)*_n-real(2398014289541398528.L))+
-        real(6465446490660405248.L))-real(2104051497420128256.L))+
-        real(1141239772082995200.L))-real(1818198204891070464.L))+
-        real(460022605476876288.L))/real(66726301982046616584675.L);
-      _C4x[161] = (_n*(_n*(_n*(_n*((real(6668275491371253760.L)-
-        real(4329224030377279488.L)*_n)*_n-real(1505170500759191552.L))+
-        real(2763025721505054720.L))-real(2216123540377370624.L))+
-        real(60848441102073856.L))+real(20860324867092480.L))/
-        real(66726301982046616584675.L);
-      _C4x[162] = (_n*(_n*(_n*((real(308820567264067584.L)-
-        real(126294781074407424.L)*_n)*_n-real(144990888561147904.L))+
-        real(56899510631006208.L))-real(93587555186442240.L))+
-        real(27308767935877120.L))/real(5132792460157432044975.L);
-      _C4x[163] = (_n*(_n*((real(388156105125888.L)-real(339203576086528.L)*_n)*
-        _n-real(369629960888320.L))+real(24292538175488.L))+
-        real(7980991130112.L))/real(15052177302514463475.L);
-      _C4x[164] = (_n*((real(120871642169344.L)-real(354970809581568.L)*_n)*_n-
-        real(191418588348416.L))+real(62763351585792.L))/
-        real(15052177302514463475.L);
-      _C4x[165] = ((real(1780095066112.L)-real(17835349360640.L)*_n)*_n+
-        real(558875851776.L))/real(970098745068499725.L);
-      _C4x[166] = (real(365122560.L)-real(1010843648.L)*_n)/
-        real(110050906984515.L);
-      _C4x[167] = real(71266816.L)/real(128782976258475.L);
-      _C4x[168] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*((-real(307560448.L)*_n-real(843448320.L))*_n-
-        real(2483486720.L))-real(7947157504.L))-real(28082503680.L))-
-        real(111989620736.L))-real(519951810560.L))-real(2948298178560.L))-
-        real(22161374642176.L))-real(261907154862080.L))-
-        real(8721508256907264.L))+real(271335812437114880.L))-
-        real(2611607194707230720.L))+real(13878826806158426112.L))-
-        real(47914997306975518720.L))+real(114995993536741244928.L))-
-        real(196015898073990758400.L))+real(231198238753937817600.L))-
-        real(161838767127756472320.L))+real(48045883991052702720.L))/
-        real(76991886902361480674625.L);
-      _C4x[169] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*((-real(16500916224.L)*_n-real(51019251712.L))*_n-
-        real(173614825472.L))-real(664185077760.L))-real(2945088749568.L))-
-        real(15865958105088.L))-real(112611277406208.L))-
-        real(1247523235954688.L))-real(38601085285826560.L))+
-        real(1104095802036584448.L))-real(9644050019193454592.L))+
-        real(45774351558141280256.L))-real(138404521698280341504.L))+
-        real(284185501268958248960.L))-real(404228340917029830656.L))+
-        real(393238047828436844544.L))-real(249292013960767733760.L))+
-        real(92479295501575127040.L))-real(15172384418227169280.L))/
-        real(76991886902361480674625.L);
-      _C4x[170] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((-real(607647105024.L)*_n-real(2240944275456.L))*_n-
-        real(9542163824640.L))-real(49142394650624.L))-real(331645493903360.L))-
-        real(3470695476756480.L))-real(100638372204969984.L))+
-        real(2670416652783452160.L))-real(21356072595758186496.L))+
-        real(91151861395235536896.L))-real(241402627042936160256.L))+
-        real(415858956705852162048.L))-real(455926534694557122560.L))+
-        real(269248315708683845632.L))+real(6634384242504302592.L))-
-        real(148368956696005312512.L))+real(111578280442117816320.L))-
-        real(29983521588401310720.L))/real(76991886902361480674625.L);
-      _C4x[171] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(23257096912896.L)*_n-real(115073105264640.L))*_n-
-        real(742550052798464.L))-real(7386934195257344.L))-
-        real(202127069637771264.L))+real(5013321382993330176.L))-
-        real(36995137120333987840.L))+real(142988907191875928064.L))-
-        real(332642007735974494208.L))+real(474552716780461096960.L))-
-        real(366256832079401582592.L))+real(24921150773070397440.L))+
-        real(247405782807496097792.L))-real(247018160218300219392.L))+
-        real(105077924164108550144.L))-real(16083355739404369920.L))-
-        real(753907300284579840.L))/real(76991886902361480674625.L);
-      _C4x[172] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(1403304034959360.L)*_n-real(13339247254175744.L))*_n-
-        real(346427973580881920.L))+real(8082921585204264960.L))-
-        real(55413792856169775104.L))+real(195214468459530813440.L))-
-        real(400241050095776956416.L))+real(465979428121331367936.L))-
-        real(208812683675222409216.L))-real(186220000330419535872.L))+
-        real(325905618715333099520.L))-real(164744371147807653888.L))+
-        real(3473396570417528832.L))+real(15399350955084873728.L))+
-        real(6701398224751820800.L))-real(4963223060206817280.L))/
-        real(76991886902361480674625.L);
-      _C4x[173] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(11777061016963121152.L)-real(533661238691889152.L)*_n)*_n-
-        real(75455325407142739968.L))+real(243704846349755219968.L))-
-        real(441635765669561630720.L))+real(410731223629459095552.L))-
-        real(43248980294465748992.L))-real(310798436837274681344.L))+
-        real(283640903619160571904.L))-real(50197044714049372160.L))-
-        real(32407633826555101184.L))-real(20076464750566834176.L))+
-        real(35911742032885841920.L))-real(12016300265072230400.L))+
-        real(628256083570483200.L))/real(76991886902361480674625.L);
-      _C4x[174] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(286148909711074787328.L)-real(96132830538509320192.L)*_n)*_n-
-        real(459322475079133298688.L))+real(329693772827152875520.L))+
-        real(98322740978987040768.L))-real(354818048538882080768.L))+
-        real(193586738875038695424.L))+real(21194418143702286336.L))-
-        real(8049696257981808640.L))-real(53828802438319046656.L))+
-        real(27639577808223338496.L))+real(2084216844983992320.L))-
-        real(204247287383982080.L))-real(1488316997975592960.L))/
-        real(76991886902361480674625.L);
-      _C4x[175] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(238885037369572982784.L)-real(457820427413996175360.L)*_n)*_n+
-        real(204486446203126415360.L))-real(343424793380901617664.L))+
-        real(103809582276483743744.L))+real(42369395291493236736.L))+
-        real(31628418163578765312.L))-real(57367117193223864320.L))+
-        real(5618770750732238848.L))+real(1264987381938782208.L))+
-        real(12530347452590456832.L))-real(7054731123364986880.L))+
-        real(713654185252700160.L))/real(76991886902361480674625.L);
-      _C4x[176] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(275417027187888226304.L)*_n-real(301342817914012303360.L))+
-        real(35131687135579078656.L))+real(30981824048207495168.L))+
-        real(60082166880455229440.L))-real(40510412698523271168.L))-
-        real(6350757773743882240.L))-real(11380796165109317632.L))+
-        real(17067163629224067072.L))-real(2218724301039468544.L))-
-        real(576215887400796160.L))-real(530243941500672000.L))/
-        real(76991886902361480674625.L);
-      _C4x[177] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(5655004308495138816.L)-
-        real(8356947575790632960.L)*_n)*_n+real(70887283939275177984.L))-
-        real(19132197487023489024.L))-real(4646382539356766208.L))-
-        real(22374995209410314240.L))+real(11881542816186236928.L))+
-        real(615872365157941248.L))+real(4945999768685903872.L))-
-        real(4202199566240972800.L))+real(600651950866329600.L))/
-        real(76991886902361480674625.L);
-      _C4x[178] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(67558047217549443072.L)*
-        _n-real(2743652916231405568.L))+real(4821533341629415424.L))-
-        real(25890278658092040192.L))+real(4397696767809945600.L))-
-        real(2270215222544826368.L))+real(9203535351495131136.L))-
-        real(2762827619509207040.L))-real(337292092713074688.L))-
-        real(196019184505116672.L))/real(76991886902361480674625.L);
-      _C4x[179] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(15637559539358760960.L)*_n-
-        real(22863959879354155008.L))-real(161048855052288000.L))-
-        real(7682043733328527360.L))+real(9241258915046359040.L))-
-        real(738932767847350272.L))+real(2253179206024298496.L))-
-        real(2618166617633193984.L))+real(476795427747545088.L))/
-        real(76991886902361480674625.L);
-      _C4x[180] = (_n*(_n*(_n*(_n*(_n*((-real(592800441219416064.L)*_n-
-        real(12126096896479985664.L))*_n+real(6529775616064225280.L))-
-        real(874934373083774976.L))+real(5045973283482894336.L))-
-        real(2379468164346413056.L))-real(139146139282440192.L))-
-        real(64598143648862208.L))/real(76991886902361480674625.L);
-      _C4x[181] = (_n*(_n*(_n*(_n*(_n*(real(3435305292766642176.L)*_n-
-        real(2909952940750929920.L))+real(6181581113329188864.L))-
-        real(1277783622080790528.L))+real(1192234787840983040.L))-
-        real(1708480029636165632.L))+real(374926464594468864.L))/
-        real(76991886902361480674625.L);
-      _C4x[182] = (_n*(_n*(_n*(_n*(real(5623558958487961600.L)*_n-
-        real(868119664699375616.L))+real(2923396157365026816.L))-
-        real(1876131005819518976.L))-real(23107849159442432.L))-
-        real(9783576752345088.L))/real(76991886902361480674625.L);
-      _C4x[183] = (_n*(_n*(_n*(real(911117337493504.L)*_n-
-        real(303923513524224.L))+real(163915625398272.L))-
-        real(262220129763328.L))+real(66863037136896.L))/
-        real(17367896887516688625.L);
-      _C4x[184] = (_n*(_n*(real(12647945517072384.L)*_n-
-        real(10109638066176000.L))+real(263225254150144.L))+
-        real(92573294601216.L))/real(538404803513017347375.L);
-      _C4x[185] = (_n*(real(94119501758464.L)*_n-real(155024489185280.L))+
-        real(44741643048960.L))/real(14551481176027495875.L);
-      _C4x[186] = (real(15683878912.L)*_n+real(5250319360.L))/
-        real(18158399652444975.L);
-      _C4x[187] = real(319913984.L)/real(128782976258475.L);
-      _C4x[188] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(real(276037632.L)*_n+real(955908096.L))+real(3667918848.L))+
-        real(15942942720.L))+real(81013768192.L))+real(505096044544.L))+
-        real(4196182523904.L))+real(55133175939072.L))+
-        real(2054963830456320.L))-real(72129230449016832.L))+
-        real(790750081959591936.L))-real(4843344252002500608.L))+
-        real(19571064528499900416.L))-real(56176203739212677120.L))+
-        real(118480720613612191744.L))-real(184556507109665144832.L))+
-        real(205062785677405716480.L))-real(138718943252362690560.L))+
-        real(40459691781939118080.L))/real(87257471822676344764575.L);
-      _C4x[189] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(real(24947195904.L)*_n+real(104111013888.L))+real(505867141120.L))+
-        real(3001524682752.L))+real(23599806676992.L))+real(291556978327552.L))+
-        real(10139375705260032.L))-real(328994697149153280.L))+
-        real(3296983969584119808.L))-real(18208623508907360256.L))+
-        real(65236881761666334720.L))-real(162630933523022741504.L))+
-        real(290600655120150036480.L))-real(373355692543690407936.L))+
-        real(337214358669511622656.L))-real(202650282316495060992.L))+
-        real(72375100827319664640.L))-real(11559911937696890880.L))/
-        real(87257471822676344764575.L);
-      _C4x[190] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(1785062227968.L)*_n+real(10133931294720.L))+
-        real(75861675999232.L))+real(887077614911488.L))+
-        real(28992109541326848.L))-real(876325163382079488.L))+
-        real(8090109358186168320.L))-real(40561257005671514112.L))+
-        real(129281884501668003840.L))-real(278215799106755887104.L))+
-        real(408027042291149438976.L))-real(387873053022743429120.L))+
-        real(187671352785076486144.L))+real(44589717291314184192.L))-
-        real(141533530506758455296.L))+real(96500134436426219520.L))-
-        real(25130243342819328000.L))/real(87257471822676344764575.L);
-      _C4x[191] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(183355364081664.L)*_n+real(2040474989756416.L))+
-        real(63051054530953216.L))-real(1786942720755892224.L))+
-        real(15300265488609181696.L))-real(70084254776280743936.L))+
-        real(199560718281966354432.L))-real(369477497974761193472.L))+
-        real(431221556043098619904.L))-real(253672955086849966080.L))-
-        real(63391798237093953536.L))+real(252627357255187038208.L))-
-        real(208430629635072983040.L))+real(79159688823137370112.L))-
-        real(10186125301622767616.L))-real(904688760341495808.L))/
-        real(87257471822676344764575.L);
-      _C4x[192] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(115822890136371200.L)*_n-real(3094995547629027328.L))+
-        real(24723587148946604032.L))-real(104065332008695889920.L))+
-        real(265803369098419109888.L))-real(421851123014635618304.L))+
-        real(374519981509846237184.L))-real(63913952851496796160.L))-
-        real(251310020677002592256.L))+real(285262036379621654528.L))-
-        real(109433609381780389888.L))-real(12093228440466489344.L))+
-        real(12188046889208250368.L))+real(7634972322268971008.L))-
-        real(4489936810583719936.L))/real(87257471822676344764575.L);
-      _C4x[193] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(35967097995930370048.L)*_n-real(139835176343423680512.L))+
-        real(321551406140639150080.L))-real(435083276244969586688.L))+
-        real(270381974274631532544.L))+real(110488073189453725696.L))-
-        real(329928754168770068480.L))+real(204912754448674062336.L))-
-        real(2257252858190102528.L))-real(28230593464544264192.L))-
-        real(26525908292341334016.L))+real(32108269919206899712.L))-
-        real(9280877470239162368.L))+real(336225324724617216.L))/
-        real(87257471822676344764575.L);
-      _C4x[194] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(363842629597642358784.L)*_n-real(416193006026396532736.L))+
-        real(148788575136578011136.L))+real(237041576971503403008.L))-
-        real(320916337128487518208.L))+real(98062347555880042496.L))+
-        real(44440889283638722560.L))+real(10067255815659585536.L))-
-        real(53427383386073202688.L))+real(19036217883544780800.L))+
-        real(3582825409059749888.L))+real(355420097170374656.L))-
-        real(1452913824234012672.L))/real(87257471822676344764575.L);
-      _C4x[195] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(30511855713581006848.L)*_n+real(310370866219193466880.L))-
-        real(262823594717752066048.L))+real(13648539574085877760.L))+
-        real(37475487660713181184.L))+real(50436855393397243904.L))-
-        real(45981963324560506880.L))-real(2420681743504769024.L))-
-        real(616311858139758592.L))+real(12450050748250587136.L))-
-        real(5906771916900270080.L))+real(498505012547584000.L))/
-        real(87257471822676344764575.L);
-      _C4x[196] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(187684170744439767040.L)*_n-real(34197579604009156608.L))*_n+
-        real(5020232442064142336.L))+real(68754014988700221440.L))-
-        real(21871620166116704256.L))-real(8569339763401424896.L))-
-        real(14873419657564389376.L))+real(14649475096306778112.L))-
-        real(745025122061516800.L))-real(411903397122015232.L))-
-        real(563208167821049856.L))/real(87257471822676344764575.L);
-      _C4x[197] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(65114834110003544064.L)-
-        real(30188401165698859008.L)*_n)*_n-real(268375796035878912.L))-
-        real(40975114888544256.L))-real(23791816763013332992.L))+
-        real(7379373053645422592.L))+real(949078329147260928.L))+
-        real(5237349808478355456.L))-real(3698499726010220544.L))+
-        real(455104982316515328.L))/real(87257471822676344764575.L);
-      _C4x[198] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(10483623998426972160.L)*_n+
-        real(13521235277915357184.L))-real(22960109307694153728.L))-
-        real(10641874446450688.L))-real(3596445517682311168.L))+
-        real(8763175389458595840.L))-real(1822001320987459584.L))-
-        real(329006490341867520.L))-real(233643343511617536.L))/
-        real(87257471822676344764575.L);
-      _C4x[199] = (_n*(_n*(_n*(_n*(_n*((-real(15814081220999380992.L)*_n-
-        real(2326930085278384128.L))*_n-real(9660863485571497984.L))+
-        real(7470095560500838400.L))-real(5586431887540224.L))+
-        real(2445895936924188672.L))-real(2383766792232763392.L))+
-        real(378295475923943424.L))/real(87257471822676344764575.L);
-      _C4x[200] = (_n*(_n*(_n*(_n*((real(3827411013507481600.L)-
-        real(13214027205766545408.L)*_n)*_n-real(979582502360317952.L))+
-        real(5094849246163107840.L))-real(1824353970541297664.L))-
-        real(180869902013825024.L))-real(95539345357209600.L))/
-        real(87257471822676344764575.L);
-      _C4x[201] = (_n*(_n*(_n*((real(5609365261323862016.L)-
-        real(3839901122350809088.L)*_n)*_n-real(646145409716584448.L))+
-        real(1279609322574184448.L))-real(1593167327803211776.L))+
-        real(306968393988472832.L))/real(87257471822676344764575.L);
-      _C4x[202] = (_n*(_n*((real(276571089505615872.L)-
-        real(51553415930576896.L)*_n)*_n-real(140985119656640512.L))-
-        real(6829032790294528.L))-real(3039228960768000.L))/
-        real(7932497438425122251325.L);
-      _C4x[203] = (_n*((real(5254038644850688.L)-real(6219477419556864.L)*_n)*
-        _n-real(7711766672310272.L))+real(1737170897240064.L))/
-        real(610192110648086327025.L);
-      _C4x[204] = ((-real(2603006914985984.L)*_n-real(23041190002688.L))*_n-
-        real(9413532237824.L))/real(181408465327809448575.L);
-      _C4x[205] = (real(47654830080.L)-real(185838075904.L)*_n)/
-        real(20579519606104305.L);
-      _C4x[206] = real(223215616.L)/real(2189310596394075.L);
-      _C4x[207] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((-real(508035072.L)*_n-real(2390753280.L))*_n-real(13198950400.L))-
-        real(89752862720.L))-real(816751050752.L))-real(11811476733952.L))-
-        real(487223415275520.L))+real(19046006233497600.L))-
-        real(234265876672020480.L))+real(1624243411592675328.L))-
-        real(7512125778616123392.L))+real(25040419262053744640.L))-
-        real(62601048155134361600.L))+real(119423538019025551360.L))-
-        real(173164130127587049472.L))+real(183350255429209817088.L))-
-        real(120625168045532774400.L))+real(34679735813090672640.L))/
-        real(97523056742991208854525.L);
-      _C4x[208] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(29964107776.L)*_n-real(194248704000.L))*_n-real(1676794658816.L))-
-        real(22869029421056.L))-real(883598982905856.L))+
-        real(32091782286147584.L))-real(363202909569024000.L))+
-        real(2290091789515751424.L))-real(9495576867772563456.L))+
-        real(27882845232340926464.L))-real(60097006228928987136.L))+
-        real(96309304854052864000.L))-real(114030216947198590976.L))+
-        real(96943813215444271104.L))-real(55755633229935149056.L))+
-        real(19300026887285243904.L))-real(3015629201138319360.L))/
-        real(32507685580997069618175.L);
-      _C4x[209] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(17507396616192.L)*_n-real(226472133394432.L))*_n-
-        real(8246941263069184.L))+real(280127911143407616.L))-
-        real(2936888066985951232.L))+real(16946415846485393408.L))-
-        real(63275465759427919872.L))+real(163595543569252745216.L))-
-        real(300073764383376277504.L))+real(385976458404820942848.L))-
-        real(323406645699909517312.L))+real(124771537065038839808.L))+
-        real(67995561911851155456.L))-real(132622981694812585984.L))+
-        real(84169561702882869248.L))-real(21410967328082067456.L))/
-        real(97523056742991208854525.L);
-      _C4x[210] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(616804785697325056.L)-real(19306773085159424.L)*_n)*_n-
-        real(6025733289954770944.L))+real(32001340193244184576.L))-
-        real(108084904604387508224.L))+real(246171939711657967616.L))-
-        real(379752583817754312704.L))+real(370399618720067485696.L))-
-        real(155844072978969001984.L))-real(121313588987417329664.L))+
-        real(243746625565487005696.L))-real(174718794881484980224.L))+
-        real(60120859926725656576.L))-real(6359395832592072704.L))-
-        real(938195751465254912.L))/real(97523056742991208854525.L);
-      _C4x[211] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(51373746005049606144.L)-real(10456599624384249856.L)*_n)*_n-
-        real(157611347412635877376.L))+real(316317997999324135424.L))-
-        real(404199497923589308416.L))+real(268628438983223803904.L))+
-        real(48354954402349973504.L))-real(276628362249624354816.L))+
-        real(237995644082980388864.L))-real(67827216051387498496.L))-
-        real(19942287700460568576.L))+real(8846143827894861824.L))+
-        real(8103697483973525504.L))-real(4058967579922956288.L))/
-        real(97523056742991208854525.L);
-      _C4x[212] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(365704313453078904832.L)-real(206894718449275109376.L)*_n)*_n-
-        real(378355260748577374208.L))+real(126798896006978076672.L))+
-        real(210484703195796865024.L))-real(307158877486350073856.L))+
-        real(133609892540477079552.L))+real(25257545305541312512.L))-
-        real(19823325441381367808.L))-real(30462010189242433536.L))+
-        real(28304797805527957504.L))-real(7196660625255170048.L))+
-        real(150054667702173696.L))/real(97523056742991208854525.L);
-      _C4x[213] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(316280474750539005952.L)*_n-real(16506738140957900800.L))*_n+
-        real(302475017617010065408.L))-real(252550415242485563392.L))+
-        real(26656308906358734848.L))+real(46363245865927180288.L))+
-        real(25775342097543987200.L))-real(49510038562184101888.L))+
-        real(12050517427519750144.L))+real(4195639799346888704.L))+
-        real(815200122201178112.L))-real(1394136822006906880.L))/
-        real(97523056742991208854525.L);
-      _C4x[214] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(329133446088160706560.L)*_n-real(163807190522737459200.L))-
-        real(38038366367114067968.L))+real(17122524646869041152.L))+
-        real(60262956334873313280.L))-real(33082835687306166272.L))-
-        real(7086096755808272384.L))-real(2735322552694996992.L))+
-        real(12049598737807310848.L))-real(4941712550027853824.L))+
-        real(346176789274165248.L))/real(97523056742991208854525.L);
-      _C4x[215] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((-real(56736646042272399360.L)*
-        _n-real(25695486169747292160.L))*_n+real(65009144065716387840.L))-
-        real(6036013701613486080.L))-real(7038326576975970304.L))-
-        real(17255296659229769728.L))+real(12097546741958049792.L))+
-        real(269660785965268992.L))-real(231461455444574208.L))-
-        real(575402967885512704.L))/real(97523056742991208854525.L);
-      _C4x[216] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(47970221770628136960.L)*_n+
-        real(11183652170713006080.L))+real(6654450689051197440.L))-
-        real(22998474513203593216.L))+real(3559346603691081728.L))+
-        real(742072554564354048.L))+real(5394335140128227328.L))-
-        real(3242594944105316352.L))+real(345937043493945344.L))/
-        real(97523056742991208854525.L);
-      _C4x[217] = (_n*(_n*(_n*(_n*(_n*(_n*(real(21206076828361949184.L)*_n-
-        real(17866586398261248000.L))-real(2689482293101723648.L))-
-        real(5075995234335195136.L))+real(8063468665972457472.L))-
-        real(1073179604510834688.L))-real(285292882316230656.L))-
-        real(257533821328064512.L))/real(97523056742991208854525.L);
-      _C4x[218] = (_n*(_n*(_n*(_n*((-real(2168602113922301952.L)*_n-
-        real(11032586230347857920.L))*_n+real(5592120435094323200.L))+
-        real(376073112627707904.L))+real(2609094050095038464.L))-
-        real(2158630016898826240.L))+real(301421520076013568.L))/
-        real(97523056742991208854525.L);
-      _C4x[219] = (_n*(_n*(_n*(_n*(real(1508398731138433024.L)*_n-
-        real(1433188842334060544.L))+real(4994077430489022464.L))-
-        real(1342770705408720896.L))-real(191596198836568064.L))-
-        real(117789535196512256.L))/real(97523056742991208854525.L);
-      _C4x[220] = (_n*(_n*(_n*(real(439902674335301632.L)*_n-
-        real(18168502642802688.L))+real(125141764267835392.L))-
-        real(134254942169858048.L))+real(22938749427449856.L))/
-        real(8865732431181018986775.L);
-      _C4x[221] = (_n*(_n*(real(3097302916756144128.L)*_n-
-        real(1250796651410358272.L))-real(104045262882209792.L))-
-        real(51553400218484736.L))/real(97523056742991208854525.L);
-      _C4x[222] = (_n*(real(1654857408708608.L)*_n-real(2162255416262656.L))+
-        real(434335999066112.L))/real(202750637719316442525.L);
-      _C4x[223] = (-real(51213500416.L)*_n-real(22070231040.L))/
-        real(115003197798818175.L);
-      _C4x[224] = real(482213888.L)/real(271875172101225.L);
-      _C4x[225] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(2231369728.L)*_n+real(16436428800.L))+real(162611068928.L))+
-        real(2566931873792.L))+real(116104303214592.L))-
-        real(5002160396828672.L))+real(68211278138572800.L))-
-        real(527955292792553472.L))+real(2748719619618373632.L))-
-        real(10422228557719666688.L))+real(30048503114464493568.L))-
-        real(67416513397837004800.L))+real(118653063580193128448.L))-
-        real(162275513425852366848.L))+real(165122452257884864512.L))-
-        real(106150147880068841472.L))+real(30156292011383193600.L))/
-        real(107788641663306072944475.L);
-      _C4x[226] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(1087553667072.L)*_n+real(16236561825792.L))+
-        real(690353678057472.L))-real(27760775846166528.L))+
-        real(350364085667233792.L))-real(2484709491661078528.L))+
-        real(11709732673365737472.L))-real(39599440373689090048.L))+
-        real(99995087980359319552.L))-real(192160489771502665728.L))+
-        real(281993644612666785792.L))-real(312178113804572295168.L))+
-        real(252367351949203341312.L))-real(139906708317025599488.L))+
-        real(47177843502252818432.L))-real(7237510082731966464.L))/
-        real(107788641663306072944475.L);
-      _C4x[227] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(2321342460329984.L)*_n-real(87624051406667776.L))+
-        real(1029554699684020224.L))-real(6727903561715286016.L))+
-        real(28834044814907408384.L))-real(87131527579284013056.L))+
-        real(191789940123405123584.L))-real(309246701905553391616.L))+
-        real(355959190740579385344.L))-real(265399658566779928576.L))+
-        real(76703950634970251264.L))+real(81915983603542523904.L))-
-        real(123166183203322986496.L))+real(74020409632844939264.L))-
-        real(18495859100315025408.L))/real(107788641663306072944475.L);
-      _C4x[228] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(2278819789407256576.L)*_n-real(13791909517065191424.L))+
-        real(53989401256123170816.L))-real(146092539328105283584.L))+
-        real(279136549919162105856.L))-real(369063669832597110784.L))+
-        real(303155228066935996416.L))-real(75427203867469676544.L))-
-        real(156873650151436058624.L))+real(227778831321489473536.L))-
-        real(146142064921074991104.L))+real(45999470831097348096.L))-
-        real(3830903866145112064.L))-real(915087481724731392.L))/
-        real(107788641663306072944475.L);
-      _C4x[229] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(85484487412933459968.L)*_n-real(207519696313245499392.L))+
-        real(342343487242872291328.L))-real(358724413380621238272.L))+
-        real(164770992079469805568.L))+real(128236553616692871168.L))-
-        real(276189113597162422272.L))+real(191834765719799595008.L))-
-        real(37500978531225567232.L))-real(23148176332242812928.L))+
-        real(5803604673929674752.L))+real(8264113601656127488.L))-
-        real(3675109402410614784.L))/real(107788641663306072944475.L);
-      _C4x[230] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(372550883422473551872.L)*_n-real(291388465640112128000.L))+
-        real(975048550637371392.L))+real(263490909276794257408.L))-
-        real(263072399029774057472.L))+real(75626181247843172352.L))+
-        real(38529837946214809600.L))-real(10437661129705521152.L))-
-        real(32398994919785496576.L))+real(24740281721263489024.L))-
-        real(5600848242657984512.L))+real(30413464690753536.L))/
-        real(107788641663306072944475.L);
-      _C4x[231] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(44497094977089699840.L)-real(20453173018838958080.L)*_n)*_n-
-        real(25084538434617344000.L))-real(2816909285156454400.L))+
-        real(5255989055182602240.L))+real(5313795830354804736.L))-
-        real(6245443876828479488.L))+real(945839663757656064.L))+
-        real(610102068278984704.L))+real(168007395832758272.L))-
-        real(189210938594295808.L))/real(15398377380472296134925.L);
-      _C4x[232] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((-real(74424581090432778240.L)*
-        _n-real(57976932679695728640.L))*_n-real(6807209333374320640.L))+
-        real(62100772675576135680.L))-real(20885050910872436736.L))-
-        real(9203592189655908352.L))-real(4716394625768620032.L))+
-        real(11444151948115181568.L))-real(4136102259035471872.L))+
-        real(236973593719209984.L))/real(107788641663306072944475.L);
-      _C4x[233] = (_n*(_n*(_n*(_n*(_n*(_n*((real(53404883454205624320.L)-
-        real(49919870083698524160.L)*_n)*_n+real(5371662883105013760.L))-
-        real(3493811236130258944.L))-real(18479082265901006848.L))+
-        real(9639972225697185792.L))+real(935416409056346112.L))-
-        real(56939893062893568.L))-real(574209275660468224.L))/
-        real(107788641663306072944475.L);
-      _C4x[234] = (_n*(_n*(_n*(_n*(_n*(_n*(real(15457734150169034752.L)*_n+
-        real(13197922425624330240.L))-real(20617355585946386432.L))+
-        real(583624492723470336.L))+real(229369263113109504.L))+
-        real(5430891989732163584.L))-real(2836523797304049664.L))+
-        real(263205781933129728.L))/real(107788641663306072944475.L);
-      _C4x[235] = (_n*(_n*(_n*(_n*((-real(11962142467521773568.L)*_n-
-        real(3835029043890094080.L))*_n-real(6418457916310814720.L))+
-        real(7208879758491254784.L))-real(493610566435209216.L))-
-        real(223724545077411840.L))-real(271643143953448960.L))/
-        real(107788641663306072944475.L);
-      _C4x[236] = (_n*(_n*(_n*((real(3800113671217086464.L)-
-        real(11642532714023747584.L)*_n)*_n+real(495534653961142272.L))+
-        real(2729202525616996352.L))-real(1947332406553870336.L))+
-        real(240934694030671872.L))/real(107788641663306072944475.L);
-      _C4x[237] = (_n*(_n*((real(4768962585824329728.L)-
-        real(2057594272357548032.L)*_n)*_n-real(935950551405821952.L))-
-        real(182507675768061952.L))-real(133472129809514496.L))/
-        real(107788641663306072944475.L);
-      _C4x[238] = (_n*(_n*(real(12188605917167616.L)*_n+
-        real(209617809536188416.L))-real(194671790054703104.L))+
-        real(29729696344178688.L))/real(15398377380472296134925.L);
-      _C4x[239] = ((-real(291547312553984.L)*_n-real(34631982252032.L))*_n-
-        real(19399622787072.L))/real(32013258587260490925.L);
-      _C4x[240] = (real(29689380864.L)-real(164450271232.L)*_n)/
-        real(18158399652444975.L);
-      _C4x[241] = -real(1325662208.L)/real(4764970121563575.L);
-      _C4x[242] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(32992395264.L)*_n-real(564536541184.L))*_n-real(27783262633984.L))+
-        real(1307950517846016.L))-real(19582925808861184.L))+
-        real(167345002366631936.L))-real(968210370835513344.L))+
-        real(4111905772437241856.L))-real(13410419962380550144.L))+
-        real(34483937046121414656.L))-real(70883648372582907904.L))+
-        real(116749538496018907136.L))-real(152081635672445681664.L))+
-        real(149667641455422734336.L))-real(94355687004505636864.L))+
-        real(26537536970017210368.L))/real(118054226583620937034425.L);
-      _C4x[243] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(7907221388132352.L)-real(179214691074048.L)*_n)*_n-
-        real(110141401777307648.L))+real(868043160343805952.L))-
-        real(4583930581544337408.L))+real(17547318819586834432.L))-
-        real(50803334744446599168.L))+real(113825027973376376832.L))-
-        real(199240525155368173568.L))+real(271814562598839386112.L))-
-        real(284412409569249067008.L))+real(220331835808276283392.L))-
-        real(118390672904429764608.L))+real(39043732553588539392.L))-
-        real(5897230437781602304.L))/real(118054226583620937034425.L);
-      _C4x[244] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(2561037277769760768.L)-real(350567539966738432.L)*_n)*_n-
-        real(12399283285044232192.L))+real(42905064156491153408.L))-
-        real(110172130260069384192.L))+real(213062787688508162048.L))-
-        real(308515725044919304192.L))+real(322295352315806220288.L))-
-        real(214726861520594010112.L))+real(40166016800195084288.L))+
-        real(89623113361646419968.L))-real(113906177718655909888.L))+
-        real(65597668940840960000.L))-real(16166545510470254592.L))/
-        real(118054226583620937034425.L);
-      _C4x[245] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(79209066571491180544.L)-real(25253493510248595456.L)*_n)*_n-
-        real(180253741898516135936.L))+real(297879468130890153984.L))-
-        real(343634061029965561856.L))+real(236581088693378351104.L))-
-        real(11837457009513332736.L))-real(176544610687800836096.L))+
-        real(208810886589205970944.L))-real(122271218249773350912.L))+
-        real(35417970488494784512.L))-real(2137291322581581824.L))-
-        real(865889230019100672.L))/real(118054226583620937034425.L);
-      _C4x[246] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(344914019934535680000.L)-real(247585518351380643840.L)*_n)*_n-
-        real(296981563986159861760.L))+real(72214116350495293440.L))+
-        real(180229683679120588800.L))-real(260383131355190394880.L))+
-        real(150307258006241280000.L))-real(15933829848980520960.L))-
-        real(23633470143498027008.L))+real(3200779427592011776.L))+
-        real(8224755000291622912.L))-real(3336535979309137920.L))/
-        real(118054226583620937034425.L);
-      _C4x[247] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(192533439800284282880.L)*_n-real(97694516686796881920.L))*_n+
-        real(280623774829473955840.L))-real(211350383383229235200.L))+
-        real(31741199886172815360.L))+real(42535296349971152896.L))-
-        real(1658370534385123328.L))-real(32878591046534037504.L))+
-        real(21517324801665925120.L))-real(4371544703233949696.L))-
-        real(46514710703505408.L))/real(118054226583620937034425.L);
-      _C4x[248] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(283747078852281630720.L)*_n-real(104725943690503127040.L))-
-        real(45187191658543841280.L))+real(22374117202030755840.L))+
-        real(44256806306916073472.L))-real(37202728358370082816.L))+
-        real(2539421275797848064.L))+real(4034441792987332608.L))+
-        real(1449789070409465856.L))-real(1251078097345183744.L))/
-        real(118054226583620937034425.L);
-      _C4x[249] = (_n*(_n*(_n*(_n*(_n*(_n*((-real(56321598004490403840.L)*_n-
-        real(27898989264249028608.L))*_n+real(58187271506195644416.L))-
-        real(10488728438997778432.L))-real(9555932426178396160.L))-
-        real(6392177544078032896.L))+real(10722699343053193216.L))-
-        real(3465676549913575424.L))+real(157885691632549888.L))/
-        real(118054226583620937034425.L);
-      _C4x[250] = (_n*(_n*(_n*(_n*(_n*(_n*(real(38349135283249741824.L)*_n+
-        real(12282222191403073536.L))+real(799906936383340544.L))-
-        real(18709758659251929088.L))+real(7403284957646290944.L))+
-        real(1343542825945399296.L))+real(101301221628837888.L))-
-        real(564496696970838016.L))/real(118054226583620937034425.L);
-      _C4x[251] = (_n*(_n*(_n*(_n*(_n*(real(18385522823692025856.L)*_n-
-        real(17311052281214402560.L))-real(1558081911333584896.L))-
-        real(425440445347135488.L))+real(5369899160881332224.L))-
-        real(2478526128738795520.L))+real(199935069899980800.L))/
-        real(118054226583620937034425.L);
-      _C4x[252] = (_n*(_n*(_n*((-real(3802164536732024832.L)*_n-
-        real(7479383126163062784.L))*_n+real(6285211757526908928.L))-
-        real(56677317811896320.L))-real(155129966973943808.L))-
-        real(278790769507303424.L))/real(118054226583620937034425.L);
-      _C4x[253] = (_n*(_n*(_n*(real(2211182557075079168.L)*_n+
-        real(432380266489577472.L))+real(2803723207373225984.L))-
-        real(1752158299903492096.L))+real(192986004326449152.L))/
-        real(118054226583620937034425.L);
-      _C4x[254] = (_n*(_n*(real(4452041207794630656.L)*_n-
-        real(599668749687062528.L))-real(161334163675283456.L))-
-        real(144190013656006656.L))/real(118054226583620937034425.L);
-      _C4x[255] = (_n*(real(3209073398906880.L)*_n-real(2605184622526464.L))+
-        real(357815264739328.L))/real(245434982502330430425.L);
-      _C4x[256] = (-real(5140337655808.L)*_n-real(3300780933120.L))/
-        real(5150932701410224575.L);
-      _C4x[257] = real(5125439488.L)/real(4059048622072675.L);
-      _C4x[258] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(6671795486720.L)*_n-real(340738126643200.L))+
-        real(5556652526796800.L))-real(51954701125550080.L))+
-        real(330620825344409600.L))-real(1553917879118725120.L))+
-        real(5650610469522636800.L))-real(16354170685829939200.L))+
-        real(38315485606801571840.L))-real(73250193071826534400.L))+
-        real(114116090259266600960.L))-real(142645112824083251200.L))+
-        real(136443151396949196800.L))-real(84594753866108502016.L))+
-        real(23588921751126409216.L))/real(128319811503935801124375.L);
-      _C4x[259] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(11324896281886720.L)*_n-real(98216454473646080.L))+
-        real(574557871270789120.L))-real(2456040416844185600.L))+
-        real(8019057836535316480.L))-real(20516062627805265920.L))+
-        real(41684118771324682240.L))-real(67505618830921564160.L))+
-        real(86595369947260518400.L))-real(86358122358363914240.L))+
-        real(64500398842194165760.L))-real(33738670163609255936.L))+
-        real(10915452111755935744.L))-real(1626822189732855808.L))/
-        real(42773270501311933708125.L);
-      _C4x[260] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(5082421303600742400.L)*_n-real(19822592539093893120.L))+
-        real(58166028350049484800.L))-real(131028501134605025280.L))+
-        real(227570706948670095360.L))-real(300522987672525864960.L))+
-        real(287800030615107010560.L))-real(171252253497439027200.L))+
-        real(12501916423594967040.L))+real(93250680571438301184.L))-
-        real(105185265804193562624.L))+real(58546515872145473536.L))-
-        real(14274052761526992896.L))/real(128319811503935801124375.L);
-      _C4x[261] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(105383790898346721280.L)*_n-real(208136914244678451200.L))+
-        real(303710159217224581120.L))-real(309004903007230361600.L))+
-        real(174753053390908948480.L))+real(36907004671358402560.L))-
-        real(185217734025622323200.L))+real(189161050019630940160.L))-
-        real(102464139110675120128.L))+real(27409317096350285824.L))-
-        real(992313828341448704.L))-real(806254985527427072.L))/
-        real(128319811503935801124375.L);
-      _C4x[262] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(328074409958965248000.L)*_n-real(228469922819714580480.L))-
-        real(4950401898239754240.L))+real(210076889632934461440.L))-
-        real(236374255355968880640.L))+real(114650922702109409280.L))-
-        real(953987012493312000.L))-real(22586398162745819136.L))+
-        real(1050078458681491456.L))+real(8059197443692036096.L))-
-        real(3038961099295686656.L))/real(128319811503935801124375.L);
-      _C4x[263] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(273011545894803210240.L)-
-        real(167521473070544977920.L)*_n)*_n-real(160170217749904097280.L))+
-        real(454830921552494592.L))+real(40895497723801763840.L))+
-        real(5852613489478074368.L))-real(32357256013314785280.L))+
-        real(18663711808770015232.L))-real(3418428302623244288.L))-
-        real(95543730093686784.L))/real(128319811503935801124375.L);
-      _C4x[264] = (_n*(_n*(_n*(_n*(_n*(_n*((-real(46646098507207802880.L)*_n-
-        real(55181590728680669184.L))*_n+real(7128506606441988096.L))+
-        real(47619150534252953600.L))-real(30689497196554878976.L))-
-        real(438064049108811776.L))+real(3630978130237194240.L))+
-        real(1650971503560228864.L))-real(1177985854434443264.L))/
-        real(128319811503935801124375.L);
-      _C4x[265] = (_n*(_n*(_n*(_n*(_n*((real(50775488411895595008.L)-
-        real(43492866392894472192.L)*_n)*_n-real(2264894610960547840.L))-
-        real(8777858033372889088.L))-real(7712179646405541888.L))+
-        real(9948900906005168128.L))-real(2908130381335101440.L))+
-        real(100147792529326080.L))/real(128319811503935801124375.L);
-      _C4x[266] = (_n*(_n*(_n*(_n*(_n*(real(15383330024249622528.L)*_n+
-        real(5036585180505047040.L))-real(18179914265933119488.L))+
-        real(5444073783608475648.L))+real(1565775689892757504.L))+
-        real(239302712712232960.L))-real(549497872213606400.L))/
-        real(128319811503935801124375.L);
-      _C4x[267] = (_n*(_n*(_n*((-real(13628378796670320640.L)*_n-
-        real(2963709054448304128.L))*_n-real(1115654555757969408.L))+
-        real(5235119911608516608.L))-real(2164937980358164480.L))+
-        real(151159110484623360.L))/real(128319811503935801124375.L);
-      _C4x[268] = (_n*(_n*((real(5355581624668913664.L)-
-        real(8210655445732294656.L)*_n)*_n+real(263609424050913280.L))-
-        real(85997756774088704.L))-real(280996508227076096.L))/
-        real(128319811503935801124375.L);
-      _C4x[269] = (_n*(_n*(real(83743415950376960.L)*_n+
-        real(945290515333513216.L))-real(524622164293320704.L))+
-        real(51572682709270528.L))/real(42773270501311933708125.L);
-      _C4x[270] = ((-real(25148353415217152.L)*_n-real(10257395112476672.L))*_n-
-        real(11627232501956608.L))/real(9870754731071984701875.L);
-      _C4x[271] = (real(2074519535616.L)-real(16716281151488.L)*_n)/
-        real(1866279964279066875.L);
-      _C4x[272] = -real(8589934592.L)/real(13236028115454375.L);
-      _C4x[273] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(15852186076446720.L)-real(1561200143892480.L)*_n)*_n-
-        real(110021720030576640.L))+real(566778557733273600.L))-
-        real(2272266763276124160.L))+real(7302327375998484480.L))-
-        real(19168609361996021760.L))+real(41558833742814904320.L))-
-        real(74732990502430310400.L))+real(111031871603610746880.L))-
-        real(133962366826095575040.L))+real(125031542371022536704.L))-
-        real(76408164782291550208.L))+real(21148688466527125504.L))/
-        real(138585396424250665214325.L);
-      _C4x[274] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(2958823112268840960.L)-real(626676031385763840.L)*_n)*_n-
-        real(10753638090040934400.L))+real(30919950241879818240.L))-
-        real(71469587084240486400.L))+real(133804410448442818560.L))-
-        real(202860010974719508480.L))+real(246853222983637401600.L))-
-        real(236174817190289080320.L))+real(170892532815992193024.L))-
-        real(87323616894047485952.L))+real(27784787193560563712.L))-
-        real(4093294541908475904.L))/real(138585396424250665214325.L);
-      _C4x[275] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(73680257925355929600.L)-real(28673750990051082240.L)*_n)*_n-
-        real(148892120936255324160.L))+real(235994934127141847040.L))-
-        real(287512304815806873600.L))+real(254209647654438174720.L))-
-        real(134376047891605094400.L))-real(8359769760187023360.L))+
-        real(94203796972049006592.L))-real(97139478006830465024.L))+
-        real(52592632902096781312.L))-real(12714020925624811520.L))/
-        real(138585396424250665214325.L);
-      _C4x[276] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(298838728973588889600.L)-real(228610468883894108160.L)*_n)*_n-
-        real(269577861315837296640.L))+real(119683752606899896320.L))+
-        real(73206526506833018880.L))-real(186461951913061515264.L))+
-        real(170093484293994053632.L))-real(86066078878839865344.L))+
-        real(21290392325330042880.L))-real(214554341263015936.L))-
-        real(744235371256086528.L))/real(138585396424250665214325.L);
-      _C4x[277] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((-real(160060419859745341440.L)*
-        _n-real(65897571137303347200.L))*_n+real(223302306570499522560.L))-
-        real(208849685534233067520.L))+real(84929820748836503552.L))+
-        real(9168137573896290304.L))-real(20734355685418991616.L))-
-        real(688244437100265472.L))+real(7816792298515070976.L))-
-        real(2777472995881385984.L))/real(138585396424250665214325.L);
-      _C4x[278] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(249984959643144683520.L)*_n-
-        real(113873120333238632448.L))-real(20504062484885274624.L))+
-        real(36095124782226341888.L))+real(11917724596746321920.L))-
-        real(31185472098366652416.L))+real(16168657511300202496.L))-
-        real(2674683528184070144.L))-real(126102251054825472.L))/
-        real(138585396424250665214325.L);
-      _C4x[279] = (_n*(_n*(_n*(_n*(_n*((-real(54742125407367069696.L)*_n-
-        real(6775438503925776384.L))*_n+real(48145735679794479104.L))-
-        real(24593000341698510848.L))-real(2542380373996732416.L))+
-        real(3150353563947892736.L))+real(1793555262527766528.L))-
-        real(1107424823786602496.L))/real(138585396424250665214325.L);
-      _C4x[280] = (_n*(_n*(_n*(_n*(_n*(real(41679303178092281856.L)*_n+
-        real(3830125412210442240.L))-real(7342331959281975296.L))-
-        real(8686531211100684288.L))+real(9165926187845812224.L))-
-        real(2444079035601387520.L))+real(57748247858380800.L))/
-        real(138585396424250665214325.L);
-      _C4x[281] = (_n*(_n*(_n*(_n*(real(8765911069127344128.L)*_n-
-        real(17118224765014769664.L))+real(3775201851733966848.L))+
-        real(1656694285690470400.L))+real(356504411897331712.L))-
-        real(531367840515620864.L))/real(138585396424250665214325.L);
-      _C4x[282] = (_n*(_n*((-real(3764539380404846592.L)*_n-
-        real(1776277878460121088.L))*_n+real(5047770078955700224.L))-
-        real(1891317913911033856.L))+real(113295579018166272.L))/
-        real(138585396424250665214325.L);
-      _C4x[283] = (_n*(_n*(real(4462595121208098816.L)*_n+
-        real(490548487658668032.L))-real(20052314052100096.L))-
-        real(279713923702194176.L))/real(138585396424250665214325.L);
-      _C4x[284] = (_n*(real(72600258860810240.L)*_n-real(36211635924238336.L))+
-        real(3179186667651072.L))/real(3553471703185914492675.L);
-      _C4x[285] = (-real(19301314592768.L)*_n-real(29359205253120.L))/
-        real(26202570698478098925.L);
-      _C4x[286] = real(2785017856.L)/real(3260242714754025.L);
-      _C4x[287] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(35821823081840640.L)*_n-real(200668545967718400.L))+
-        real(878961399693312000.L))-real(3103409865071001600.L))+
-        real(9011382719317278720.L))-real(21799594960701358080.L))+
-        real(44254816837514035200.L))-real(75514171587821568000.L))+
-        real(107689775133936844800.L))-real(125997036906706108416.L))+
-        real(115108404087608049664.L))-real(69461967983901409280.L))+
-        real(19102041195572887552.L))/real(148850981344565529304275.L);
-      _C4x[288] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(4581213151910952960.L)*_n-real(14619590189383680000.L))+
-        real(37857543608944558080.L))-real(80356003408269803520.L))+
-        real(140318109556675706880.L))-real(200996480282127237120.L))+
-        real(233643442930974720000.L))-real(215589676658378932224.L))+
-        real(151722927633146576896.L))-real(75952236807107641344.L))+
-        real(23815531880194768896.L))-real(3473098399195070464.L))/
-        real(148850981344565529304275.L);
-      _C4x[289] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(88673504147149946880.L)*_n-real(163403083004384378880.L))+
-        real(239244894822822051840.L))-real(271270832021396520960.L))+
-        real(222524211445282897920.L))-real(103327209200830906368.L))-
-        real(24011419553781252096.L))+real(93416275866254573568.L))-
-        real(89799243908620746752.L))+real(47523786589758029824.L))-
-        real(11411609025926660096.L))/real(148850981344565529304275.L);
-      _C4x[290] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(285723804270896087040.L)*_n-real(228591337462101442560.L))+
-        real(72073398978021949440.L))+real(99403506946261647360.L))-
-        real(182826346802342526976.L))+real(152250846083639410688.L))-
-        real(72486330902450798592.L))+real(16574222227323486208.L))+
-        real(313579421845946368.L))-real(683891962775863296.L))/
-        real(148850981344565529304275.L);
-      _C4x[291] = (_n*(_n*(_n*(_n*(_n*(_n*((real(224623684749612810240.L)-
-        real(111637412341182627840.L)*_n)*_n-real(180732219385152798720.L))+
-        real(60659584998462980096.L))+real(15756278678801088512.L))-
-        real(18517453693201154048.L))-real(2070975036814000128.L))+
-        real(7530434710304980992.L))-real(2547317046870278144.L))/
-        real(148850981344565529304275.L);
-      _C4x[292] = (_n*(_n*(_n*(_n*(_n*((-real(74345380106981081088.L)*_n-
-        real(33446175416569036800.L))*_n+real(29766270857812901888.L))+
-        real(16596361781933244416.L))-real(29619050408382038016.L))+
-        real(14003333422240497664.L))-real(2090741671116406784.L))-
-        real(144310940605612032.L))/real(148850981344565529304275.L);
-      _C4x[293] = (_n*(_n*(_n*(_n*((real(46654792779977195520.L)-
-        real(18352967315387056128.L)*_n)*_n-real(19119835431189872640.L))-
-        real(3972190146391965696.L))+real(2647518983439253504.L))+
-        real(1889695856160931840.L))-real(1040545024531496960.L))/
-        real(148850981344565529304275.L);
-      _C4x[294] = (_n*(_n*(_n*(_n*(real(8042800387494772736.L)*_n-
-        real(5581953713670455296.L))-real(9353280430893170688.L))+
-        real(8401655689738452992.L))-real(2057171227478327296.L))+
-        real(26497493910945792.L))/real(148850981344565529304275.L);
-      _C4x[295] = (_n*(_n*((real(2384423818371268608.L)-
-        real(15719743509969764352.L)*_n)*_n+real(1656962409224470528.L))+
-        real(454053617968611328.L))-real(511545454735917056.L))/
-        real(148850981344565529304275.L);
-      _C4x[296] = (_n*((real(1608466708345913344.L)-real(790392194996371456.L)*
-        _n)*_n-real(551028320356007936.L))+real(27909353679880192.L))/
-        real(49616993781521843101425.L);
-      _C4x[297] = (_n*(real(644036807813496832.L)*_n+real(40723815822524416.L))-
-        real(275993534497030144.L))/real(148850981344565529304275.L);
-      _C4x[298] = (real(986902953984.L)-real(12603581530112.L)*_n)/
-        real(1481236940069912025.L);
-      _C4x[299] = -real(455065206784.L)/real(430714287538059525.L);
-      _C4x[300] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(1265500302606336000.L)-real(329030078677647360.L)*_n)*_n-
-        real(4024290962288148480.L))+real(10731442566101729280.L))-
-        real(24216347369558507520.L))+real(46455850055887749120.L))-
-        real(75743233786773504000.L))+real(104222689690600341504.L))-
-        real(118698063258739277824.L))+real(106418953266455904256.L))-
-        real(63508085013852717056.L))+real(17365491995975352320.L))/
-        real(159116566264880393394225.L);
-      _C4x[301] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(14882283558650511360.L)-real(6276881500927426560.L)*_n)*_n-
-        real(29370263865120522240.L))+real(48291491547457781760.L))-
-        real(65837522928418160640.L))+real(73521432262361481216.L))-
-        real(65711463267458613248.L))+real(45123233467577925632.L))-
-        real(22181618050576416768.L))+real(6865738920416509952.L))-
-        real(992313828341448704.L))/real(53038855421626797798075.L);
-      _C4x[302] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(238276389608211087360.L)-
-        real(174523148574067261440.L)*_n)*_n-real(253161974471998832640.L))+
-        real(193258055227869757440.L))-real(77313249564178776064.L))-
-        real(35669549238313811968.L))+real(91513553596817866752.L))-
-        real(83142423755775541248.L))+real(43174935134157668352.L))-
-        real(10312018026953703424.L))/real(159116566264880393394225.L);
-      _C4x[303] = (_n*(_n*(_n*(_n*(_n*(_n*((real(31841725142595010560.L)-
-        real(188279571245653032960.L)*_n)*_n+real(117579283767723294720.L))-
-        real(176104951189136736256.L))+real(135914163665861869568.L))-
-        real(61220379106069184512.L))+real(12910069571720839168.L))+
-        real(669828187357708288.L))-real(627158843691892736.L))/
-        real(159116566264880393394225.L);
-      _C4x[304] = (_n*(_n*(_n*(_n*(_n*(_n*(real(217810521794505867264.L)*_n-
-        real(153744045020188508160.L))+real(41144727522385068032.L))+
-        real(19801355318391209984.L))-real(16197257838647574528.L))-
-        real(3156220832737394688.L))+real(7221922156001624064.L))-
-        real(2344197385262989312.L))/real(159116566264880393394225.L);
-      _C4x[305] = (_n*(_n*(_n*(_n*((real(22938676783197716480.L)-
-        real(40412169997639483392.L)*_n)*_n+real(20050083815169720320.L))-
-        real(27838536003172171776.L))+real(12132117403752464384.L))-
-        real(1629635661550059520.L))-real(154210640238477312.L))/
-        real(159116566264880393394225.L);
-      _C4x[306] = (_n*(_n*(_n*(_n*(real(43830217809177083904.L)*_n-
-        real(14345956578488745984.L))-real(4890152593885495296.L))+
-        real(2154933114156089344.L))+real(1949495001503236096.L))-
-        real(977860968983822336.L))/real(159116566264880393394225.L);
-      _C4x[307] = (_n*(_n*((-real(3719479336609251328.L)*_n-
-        real(9760288647306805248.L))*_n+real(7673076722048172032.L))-
-        real(1733840707841425408.L))+real(3433449469771776.L))/
-        real(159116566264880393394225.L);
-      _C4x[308] = (_n*(_n*(real(1246618329292996608.L)*_n+
-        real(1596423229205905408.L))+real(533862837164965888.L))-
-        real(490989441616183296.L))/real(159116566264880393394225.L);
-      _C4x[309] = (_n*(real(241150525200924672.L)*_n-real(76097818233667584.L))+
-        real(3185457252794368.L))/real(8374556119204231231275.L);
-      _C4x[310] = (real(116805930582016.L)*_n-real(331208416296960.L))/
-        real(194757119051261191425.L);
-      _C4x[311] = real(76235669504.L)/real(153472907053791325.L);
-      _C4x[312] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(1721080411544616960.L)*_n-real(5011381198321090560.L))+
-        real(12425880866012528640.L))-real(26404996840276623360.L))+
-        real(48217820317026877440.L))-real(75541251830008774656.L))+
-        real(100721669106678366208.L))-real(112009442368633700352.L))+
-        real(98761013701375950848.L))-real(58358780823540334592.L))+
-        real(15877021253463179264.L))/real(169382151185195257484175.L);
-      _C4x[313] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(51120883802969210880.L)*
-        _n-real(94718035280548331520.L))+real(147759931167583764480.L))-
-        real(192871281268107509760.L))+real(207872380922293649408.L))-
-        real(180604372191285346304.L))+real(121336560225286619136.L))-
-        real(58687254261571518464.L))+real(17956547945704718336.L))-
-        real(2574652095156191232.L))/real(169382151185195257484175.L);
-      _C4x[314] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(233990948034277539840.L)*_n-
-        real(234191667386621362176.L))+real(166614854742533210112.L))-
-        real(55591689499608875008.L))-real(44261944760675074048.L))+
-        real(88916995783325122560.L))-real(77122507682856566784.L))+
-        real(39416812563742064640.L))-real(9374374295184080896.L))/
-        real(169382151185195257484175.L);
-      _C4x[315] = (_n*(_n*(_n*(_n*(_n*((real(129491872198837665792.L)-
-        real(1518245134972485632.L)*_n)*_n-real(167545388578629484544.L))+
-        real(121158334303866716160.L))-real(51849068982287990784.L))+
-        real(10042629764302241792.L))+real(906484836737220608.L))-
-        real(574828516554571776.L))/real(169382151185195257484175.L);
-      _C4x[316] = (_n*(_n*(_n*(_n*((real(25652339856428236800.L)-
-        real(128817646927041527808.L)*_n)*_n+real(22035468388032053248.L))-
-        real(13924654715208990720.L))-real(3996941508195385344.L))+
-        real(6905581115818377216.L))-real(2164359862996172800.L))/
-        real(169382151185195257484175.L);
-      _C4x[317] = (_n*(_n*(_n*(_n*(real(16232352634898481152.L)*_n+
-        real(22471975741209706496.L))-real(25967942334035263488.L))+
-        real(10518518050574041088.L))-real(1263617758310957056.L))-
-        real(158507531142955008.L))/real(169382151185195257484175.L);
-      _C4x[318] = (_n*(_n*((-real(10270004577038237696.L)*_n-
-        real(5425519030381314048.L))*_n+real(1690772493784055808.L))+
-        real(1981134204506734592.L))-real(919514337289175040.L))/
-        real(169382151185195257484175.L);
-      _C4x[319] = (_n*((real(367876730725072896.L)-real(523988449653424128.L)*
-        _n)*_n-real(76996497190682624.L))-real(713971740966912.L))/
-        real(8914850062378697762325.L);
-      _C4x[320] = (_n*(real(78774441852534784.L)*_n+real(31478708665581568.L))-
-        real(24754434852519936.L))/real(8914850062378697762325.L);
-      _C4x[321] = (real(10340133765120.L)-real(309821760864256.L)*_n)/
-        real(41464418894784640755.L);
-      _C4x[322] = -real(98573794410496.L)/real(63225886967224806825.L);
-      _C4x[323] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(14067034942655692800.L)-
-        real(6042430918549831680.L)*_n)*_n-real(28363423715898163200.L))+
-        real(49595472326084788224.L))-real(75005498270930698240.L))+
-        real(97248508102999801856.L))-real(105875391886330429440.L))+
-        real(91972562648731484160.L))-real(53869643837114155008.L))+
-        real(14589695205885083648.L))/real(179647736105510121574125.L);
-      _C4x[324] = (_n*(_n*(_n*(_n*(_n*(_n*((real(149245124639427919872.L)-
-        real(100215113757480714240.L)*_n)*_n-real(187432707323852750848.L))+
-        real(195721595769606635520.L))-real(165796358358168502272.L))+
-        real(109226330215392739328.L))-real(52066859386524401664.L))+
-        real(15766725025496825856.L))-real(2244568493213089792.L))/
-        real(179647736105510121574125.L);
-      _C4x[325] = (_n*(_n*(_n*(_n*(_n*((real(142606201206746382336.L)-
-        real(215080052857843482624.L)*_n)*_n-real(37499493979751710720.L))-
-        real(50496787156068990976.L))+real(85911488204862652416.L))-
-        real(71683598662433243136.L))+real(36147356017757257728.L))-
-        real(8567682175313379328.L))/real(179647736105510121574125.L);
-      _C4x[326] = (_n*(_n*(_n*(_n*(_n*(real(136581376733532389376.L)*_n-
-        real(158005196148881489920.L))+real(107944816840187838464.L))-
-        real(44029139666167922688.L))+real(7784110766340177920.L))+
-        real(1059263180007538688.L))-real(527085284282597376.L))/
-        real(179647736105510121574125.L);
-      _C4x[327] = (_n*(_n*(_n*(_n*(real(13495181522029772800.L)*_n+
-        real(22995041460089257984.L))-real(11782208651530338304.L))-
-        real(4638827256800608256.L))+real(6590706033872601088.L))-
-        real(2004579178992631808.L))/real(179647736105510121574125.L);
-      _C4x[328] = (_n*(_n*(_n*(real(1265879281930600448.L)*_n-
-        real(1267904444910010368.L))+real(480426383076491264.L))-
-        real(51142821293326336.L))-real(8370302849384448.L))/
-        real(9455144005553164293375.L);
-      _C4x[329] = (_n*((real(9505621619507200.L)-real(42699430985465856.L)*_n)*
-        _n+real(14970984683536384.L))-real(6507010744909824.L))/
-        real(1350734857936166327625.L);
-      _C4x[330] = (_n*(real(47788073878028288.L)*_n-real(9288124475637760.L))-
-        real(195764609351680.L))/real(1350734857936166327625.L);
-      _C4x[331] = (real(139397458558976.L)*_n-real(96668976414720.L))/
-        real(38592424512461895075.L);
-      _C4x[332] = real(4294967296.L)/real(27767187952228725.L);
-      _C4x[333] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(15634981129939845120.L)*_n-
-        real(30097338675134201856.L))+real(50639966659749609472.L))-
-        real(74213744242736496640.L))+real(93844476590815182848.L))-
-        real(100242963631098036224.L))+real(85922540255226888192.L))-
-        real(49927962580739948544.L))+real(13467410959278538752.L))/
-        real(189913321025824985664075.L);
-      _C4x[334] = (_n*(_n*(_n*(_n*(_n*(_n*(real(49858217603252617216.L)*_n-
-        real(60491202854456918016.L))+real(61398847229284843520.L))-
-        real(50839679340478726144.L))+real(32906504778597531648.L))-
-        real(15481538784725565440.L))+real(4644461635417669632.L))-
-        real(656946876062367744.L))/real(63304440341941661888025.L);
-      _C4x[335] = (_n*(_n*(_n*(_n*(_n*(real(121130233672878784512.L)*_n-
-        real(22460671662164541440.L))-real(54915866362539671552.L))+
-        real(82689769086501519360.L))-real(66768253439656853504.L))+
-        real(33285308387159965696.L))-real(7868084678421381120.L))/
-        real(189913321025824985664075.L);
-      _C4x[336] = (_n*(_n*(_n*((real(5061923935373754368.L)-
-        real(7792939020077498368.L)*_n)*_n-real(1972709952573145088.L))+
-        real(315525202555437056.L))+real(60677923568353280.L))-
-        real(25463057211719680.L))/real(9995437948727630824425.L);
-      _C4x[337] = (_n*(_n*(_n*(real(1214256936128610304.L)*_n-
-        real(516349145942851584.L))-real(269481366435921920.L))+
-        real(330694683447525376.L))-real(98005681906384896.L))/
-        real(9995437948727630824425.L);
-      _C4x[338] = (_n*((real(417355922206097408.L)-real(1171522492569747456.L)*
-        _n)*_n-real(38839698495373312.L))-real(8265819179974656.L))/
-        real(9995437948727630824425.L);
-      _C4x[339] = (_n*(real(46264700517744640.L)*_n+real(104456628295696384.L))-
-        real(42917065568288768.L))/real(9995437948727630824425.L);
-      _C4x[340] = (-real(10984670917296128.L)*_n-real(369538986147840.L))/
-        real(1999087589745526164885.L);
-      _C4x[341] = -real(481783661461504.L)/real(212668892526119804775.L);
-      _C4x[342] = (_n*(_n*(_n*(_n*(_n*((real(2705144950491709440.L)-
-        real(1664074014999445504.L)*_n)*_n-real(3854104364947865600.L))+
-        real(4765074487571906560.L))-real(5003328211950501888.L))+
-        real(4237052720030154752.L))-real(2444453492325089280.L))+
-        real(656946876062367744.L))/real(10535731891902097355475.L);
-      _C4x[343] = (_n*(_n*(_n*(_n*((real(9122922853564416000.L)-
-        real(9221291760855023616.L)*_n)*_n-real(7399880380699901952.L))+
-        real(4713560168787345408.L))-real(2191339868297101312.L))+
-        real(651854264620023808.L))-real(91667005962190848.L))/
-        real(10535731891902097355475.L);
-      _C4x[344] = (_n*(_n*(_n*((-real(525427469856014336.L)*_n-
-        real(3049207427590258688.L))*_n+real(4177991903188353024.L))-
-        real(3280075182609268736.L))+real(1619233731795484672.L))-
-        real(381945858175795200.L))/real(10535731891902097355475.L);
-      _C4x[345] = (_n*(_n*(_n*(real(4512114245415993344.L)*_n-
-        real(1683149991985545216.L))+real(240555551971344384.L))+
-        real(63402238504075264.L))-real(23404341947793408.L))/
-        real(10535731891902097355475.L);
-      _C4x[346] = (_n*((-real(422387287414800384.L)*_n-
-        real(288021468942434304.L))*_n+real(315088146683396096.L))-
-        real(91295508470956032.L))/real(10535731891902097355475.L);
-      _C4x[347] = (_n*(real(362953186375368704.L)*_n-real(28952340182597632.L))-
-        real(8074607235956736.L))/real(10535731891902097355475.L);
-      _C4x[348] = (real(103462944662093824.L)*_n-real(40486251517706240.L))/
-        real(10535731891902097355475.L);
-      _C4x[349] = -real(15530601742336.L)/real(74721502779447498975.L);
-      _C4x[350] = (_n*(_n*(_n*(_n*(_n*(real(2732117070232682496.L)*_n-
-        real(3794607041989836800.L))+real(4596895388010545152.L))-
-        real(4752195907875766272.L))+real(3980471786083975168.L))-
-        real(2281489926170083328.L))+real(611113373081272320.L))/
-        real(11076025835076563886525.L);
-      _C4x[351] = (_n*(_n*(_n*(_n*(real(8586653649302716416.L)*_n-
-        real(6835567032860147712.L))+real(4291072825814417408.L))-
-        real(1973394673439342592.L))+real(582508066256191488.L))-
-        real(81481783077502976.L))/real(11076025835076563886525.L);
-      _C4x[352] = (_n*(_n*((real(4003933165197459456.L)-
-        real(3151270693950193664.L)*_n)*_n-real(3068015673494994944.L))+
-        real(1501840524565282816.L))-real(353665611655544832.L))/
-        real(11076025835076563886525.L);
-      _C4x[353] = (_n*((real(180610178024996864.L)-real(1438992439921606656.L)*
-        _n)*_n+real(64567720829517824.L))-real(21546854491619328.L))/
-        real(11076025835076563886525.L);
-      _C4x[354] = ((real(300168873406103552.L)-real(301121050475757568.L)*_n)*
-        _n-real(85269600635191296.L))/real(11076025835076563886525.L);
-      _C4x[355] = (-real(20983079904477184.L)*_n-real(7828247911858176.L))/
-        real(11076025835076563886525.L);
-      _C4x[356] = -real(38242113925677056.L)/real(11076025835076563886525.L);
-      _C4x[357] = (_n*(_n*(_n*((real(4435148431471673344.L)-
-        real(3729556635555725312.L)*_n)*_n-real(4520439747461513216.L))+
-        real(3748657351553449984.L))-real(2135862909606035456.L))+
-        real(570372481542520832.L))/real(11616319778251030417575.L);
-      _C4x[358] = (_n*(_n*((real(1306413327844376576.L)-
-        real(2109021631748767744.L)*_n)*_n-real(594862178905882624.L))+
-        real(174356155886206976.L))-real(24271169427341312.L))/
-        real(3872106592750343472525.L);
-      _C4x[359] = (_n*(_n*(real(3832937116845735936.L)*_n-
-        real(2875521973796995072.L))+real(1397413308205629440.L))-
-        real(328651447245733888.L))/real(11616319778251030417575.L);
-      _C4x[360] = (_n*(real(132504345286541312.L)*_n+real(64633691527184384.L))-
-        real(19871473648795648.L))/real(11616319778251030417575.L);
-      _C4x[361] = (real(285991770477559808.L)*_n-real(79839662461419520.L))/
-        real(11616319778251030417575.L);
-      _C4x[362] = -real(109401406963712.L)/real(168352460554362759675.L);
-      _C4x[363] = (_n*(_n*(_n*(real(4280073311490146304.L)*_n-
-        real(4306171319487037440.L))+real(3538404340043612160.L))-
-        real(2005095792691380224.L))+real(533965727401508864.L))/
-        real(12156613721425496948625.L);
-      _C4x[364] = (_n*(_n*(real(3590600356037394432.L)*_n-
-        real(1620099597202358272.L))+real(471787245339148288.L))-
-        real(65383558457327616.L))/real(12156613721425496948625.L);
-      _C4x[365] = ((real(1304091159286513664.L)-real(2700435742189944832.L)*_n)*
-        _n-real(306405303358849024.L))/real(12156613721425496948625.L);
-      _C4x[366] = (real(2779565395017728.L)*_n-real(798245441765376.L))/
-        real(528548422670673780375.L);
-      _C4x[367] = -real(3257852953100288.L)/real(528548422670673780375.L);
-      _C4x[368] = (_n*((real(145522562959409152.L)-real(178595872722911232.L)*
-        _n)*_n-real(82049955711156224.L))+real(21794519485775872.L))/
-        real(552039463678259281725.L);
-      _C4x[369] = ((real(18577348462903296.L)-real(64176294690029568.L)*_n)*_n-
-        real(2564061115973632.L))/real(552039463678259281725.L);
-      _C4x[370] = (real(53058033109958656.L)*_n-real(12457466742702080.L))/
-        real(552039463678259281725.L);
-      _C4x[371] = -real(35184372088832.L)/real(26287593508488537225.L);
-      _C4x[372] = (_n*(real(137922738588221440.L)*_n-real(77405618595430400.L))+
-        real(20512488927789056.L))/real(575530504685844783075.L);
-      _C4x[373] = (real(5629499534213120.L)*_n-real(774056185954304.L))/
-        real(191843501561948261025.L);
-      _C4x[374] = -real(11681211533492224.L)/real(575530504685844783075.L);
-      _C4x[375] = (real(3870280929771520.L)-real(14636698788954112.L)*_n)/
-        real(119804309138686056885.L);
-      _C4x[376] = -real(140737488355328.L)/real(39934769712895352295.L);
-      _C4x[377] = real(281474976710656.L)/real(9577116718477165935.L);
-      break;
-    case 30:
-      _C4x[0] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(189921507297691265460.L)*_n+real(211051356190277606640.L))+
-        real(235437542304700439340.L))+real(263732757139505707560.L))+
-        real(296753306928658222500.L))+real(335529072367336230240.L))+
-        real(381371707254733912860.L))+real(435968929396185745560.L))+
-        real(501516705494213672340.L))+real(580907380881328578000.L))+
-        real(678001900257207783180.L))+real(798030944800349830920.L))+
-        real(948198058069232863620.L))+real(1138606998736279625280.L))+
-        real(1383723783186450933500.L))+real(1704747700885707550072.L))+
-        real(2133581749866273735028.L))+real(2719730582247118167728.L))+
-        real(3542806942664009192172.L))+real(4736372918000012289000.L))+
-        real(6536194626840016958820.L))+real(9385305105206178197280.L))+
-        real(14184608852186610229980.L))+real(22965557189254511800920.L))+
-        real(41009923552240199644500.L))+real(85300640988659615260560.L))+
-        real(234576762718813941966540.L))+real(1407460576312883651799240.L))-
-        real(4926112017095092781297340.L))+real(12315280042737731953243350.L))/
-        real(18472920064106597929865025.L);
-      _C4x[1] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(814084305459122880.L)*
-        _n+real(977257180095608880.L))+real(1181333738586811680.L))+
-        real(1438803912381373200.L))+real(1766717362179918720.L))+
-        real(2188646813513537520.L))+real(2737638489144023520.L))+
-        real(3460724822271744720.L))+real(4425960997191074880.L))+
-        real(5733631291815710640.L))+real(7534517181435246240.L))+
-        real(10060456849540932240.L))+real(13676960945781136640.L))+
-        real(18976783312271327088.L))+real(26952532820327392096.L))+
-        real(39328695850069561936.L))+real(59231882009011647936.L))+
-        real(92622403729778018096.L))+real(151563933376000393248.L))+
-        real(262322192381539142160.L))+real(487548317153567698560.L))+
-        real(995411147521867384560.L))+real(2315854506479446568160.L))+
-        real(6561587768358431943120.L))+real(26246351073433727772480.L))+
-        real(255901922965978845781680.L))-real(1876614101750511535732320.L))+
-        real(2814921152625767303598480.L))-real(1231528004273773195324335.L))/
-        real(6157640021368865976621675.L);
-      _C4x[2] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(5965802290210445280.L)*_n+
-        real(7221486469779266880.L))+real(8808931664298199200.L))+
-        real(10835344176917195520.L))+real(13449536441823393120.L))+
-        real(16861067578607229120.L))+real(21369723538109490720.L))+
-        real(27411851282409713280.L))+real(35634826738381513440.L))+
-        real(47019737534826853440.L))+real(63089152167581889440.L))+
-        real(86270061350311784960.L))+real(120550517727542648928.L))+
-        real(172716230726179614656.L))+real(254789732923417162016.L))+
-        real(389109630958630598016.L))+real(619611942192308121056.L))+
-        real(1038925423654293293888.L))+real(1860102818705459371680.L))+
-        real(3631881666912084015360.L))+real(8003918206604403051360.L))+
-        real(21208351796180194887360.L))+real(77967101718141367794720.L))+
-        real(682405127909276922084480.L))-real(4370017453726715674117920.L))+
-        real(5800443587228853837718080.L))-real(1876614101750511535732320.L))-
-        real(351865144078220912949810.L))/real(18472920064106597929865025.L);
-      _C4x[3] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(11175914208053605920.L)*_n+
-        real(13667937175788838800.L))+real(16861339550162167680.L))+
-        real(20999038399924890480.L))+real(26425680245286701280.L))+
-        real(33638522960654060880.L))+real(43368452791032505920.L))+
-        real(56712149125481517360.L))+real(75353600937497414560.L))+
-        real(101946850410735354640.L))+real(140800514090906010880.L))+
-        real(199151303276610186992.L))+real(289644075159731035744.L))+
-        real(435427218872554561744.L))+real(681311393548426257344.L))+
-        real(1120178695163687380144.L))+real(1961835789231289606432.L))+
-        real(3736398365335705110160.L))+real(8005684686014379745920.L))+
-        real(20546805257143922774640.L))+real(72847844388028906959840.L))+
-        real(611609049355935945856080.L))-real(3716174531397351926374080.L))+
-        real(4402825392568507833833520.L))-real(91862228757018047203680.L))-
-        real(1961914742739171150992880.L))+real(645086097476738340407985.L))/
-        real(18472920064106597929865025.L);
-      _C4x[4] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(19114287421443758400.L)*_n+
-        real(23678423776028874240.L))+real(29628855166877803200.L))+
-        real(37488161212699324800.L))+real(48019353608228811840.L))+
-        real(62359359382151650560.L))+real(82241257908344364480.L))+
-        real(110375631851636844672.L))+real(151127771985130778432.L))+
-        real(211768425067030307840.L))+real(304891347591212120256.L))+
-        real(453342475320154808192.L))+real(700930993104637725248.L))+
-        real(1137579729063825992448.L))+real(1964375144319342867392.L))+
-        real(3684174697282499778176.L))+real(7762885136767238210880.L))+
-        real(19564112761373887590912.L))+real(67990379306474992258752.L))+
-        real(557946054599958930165120.L))-real(3289407237782262334234560.L))+
-        real(3653037024325964909410560.L))+real(301061085842328053860800.L))-
-        real(1837244575140360944073600.L))+real(446187968248373372132160.L))+
-        real(63975480741494711445420.L))/real(18472920064106597929865025.L);
-      _C4x[5] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(31662052475060350080.L)*_n+
-        real(39866290420131056400.L))+real(50802965833298388000.L))+
-        real(65614329944749727280.L))+real(86032610217249931200.L))+
-        real(114752661353450749776.L))+real(156090693610066908000.L))+
-        real(217195264099038478960.L))+real(310377044694784996096.L))+
-        real(457836627463413087120.L))+real(701889316028543513248.L))+
-        real(1128859090969929711280.L))+real(1930581167686946940480.L))+
-        real(3583732887624629149648.L))+real(7468860304548325335520.L))+
-        real(18603030262550506124016.L))+real(63824972127283464370560.L))+
-        real(516046046235016723549200.L))-real(2982194210746749443899104.L))+
-        real(3177750723996750436138800.L))+real(435299389165277026864320.L))-
-        real(1680518105688703660974000.L))+real(505628233914679167381600.L))-
-        real(190286045282394526350480.L))+real(119338877537018980965495.L))/
-        real(18472920064106597929865025.L);
-      _C4x[6] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(real(52418567655926775840.L)*_n+
-        real(67404971592604453440.L))+real(87973765278231581280.L))+
-        real(116773213512539294592.L))+real(158028390236333901984.L))+
-        real(218709204614695230656.L))+real(310770431127524424416.L))+
-        real(455683015439866156544.L))+real(694202642447122776352.L))+
-        real(1109123937794466762560.L))+real(1883656912173972550496.L))+
-        real(3471067204725631213696.L))+real(7178184098706951481760.L))+
-        real(17731573440262069019072.L))+real(60284824122569309141984.L))+
-        real(482276777901673891965696.L))-real(2747412285149910406954464.L))+
-        real(2844951125947430113449024.L))+real(487234237114473842267232.L))-
-        real(1548827948914646069873280.L))+real(504896911438948815833760.L))-
-        real(238817417352389244344640.L))+real(101125646782935833476320.L))+
-        real(20504961776120099822250.L))/real(18472920064106597929865025.L);
-      _C4x[7] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(real(88777991863066500960.L)*_n+
-        real(117383085554502957840.L))+real(158209294686425258304.L))+
-        real(218031909719357931888.L))+real(308437784986056031008.L))+
-        real(450175344764306177488.L))+real(682510556929791762688.L))+
-        real(1084968513380510370864.L))+real(1832976201260005254880.L))+
-        real(3359149233389601704080.L))+real(6906584436101418559680.L))+
-        real(16955186412374716157680.L))+real(57251960794377059910304.L))+
-        real(454342620201979231468368.L))-real(2560462885055838819676032.L))+
-        real(2596312660963884656634288.L))+real(506172260842485507190368.L))-
-        real(1441060516198138862520816.L))+real(489671625404359685421120.L))-
-        real(251773660584863310594960.L))+real(135822835353698068023840.L))-
-        real(60720079998833910458160.L))+real(41902492476612486342645.L))/
-        real(18472920064106597929865025.L);
-      _C4x[8] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(real(157352525335910459520.L)*_n+
-        real(216112107357009394176.L))+real(304641374195939670912.L))+
-        real(443005003269640933632.L))+real(669087805248518823552.L))+
-        real(1059437867006021978112.L))+real(1782508232470888722816.L))+
-        real(3252675513312165543680.L))+real(6657481389963067610240.L))+
-        real(16264475294831374947840.L))+real(54624571375482100164480.L))+
-        real(430747830766027492306176.L))-real(2407053756464621452637568.L))+
-        real(2401934967172158512489472.L))+real(510116655313811361389952.L))-
-        real(1351897788853967484019968.L))+real(471105017170130292768896.L))-
-        real(252611266238427259932160.L))+real(148999005272714232746880.L))-
-        real(85681317301509592938240.L))+real(39491413689438983583360.L))+
-        real(8826655991801048542680.L))/real(18472920064106597929865025.L);
-      _C4x[9] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(real(300081463107326685888.L)*_n+
-        real(435075662163761717136.L))+real(655092328287902057184.L))+
-        real(1033979227133161426224.L))+real(1733931840540521746176.L))+
-        real(3153124592961525074128.L))+real(6430214076339224853280.L))+
-        real(15647617897201765676656.L))+real(52323358308772898433856.L))+
-        real(410478657984558252030480.L))-real(2278233799007768880069792.L))+
-        real(2244816466385811147093936.L))+real(506765315069892266043264.L))-
-        real(1276922381534538778700976.L))+real(452553764141681994529696.L))-
-        real(248763146335899789627152.L))+real(153472421487050386678720.L))-
-        real(96955754370391847521136.L))+real(57879404459650387936224.L))-
-        real(27194067276886224403920.L))+real(19427022918663383738715.L))/
-        real(18472920064106597929865025.L);
-      _C4x[10] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(real(641124631098159779424.L)*_n+
-        real(1009278149678541276480.L))+real(1687900338358129074720.L))+
-        real(3060674856465476565504.L))+real(6222854187406724628960.L))+
-        real(15093678564518798798528.L))+real(50287676051987597743520.L))+
-        real(392822801419344695118720.L))-real(2168073055102155034983072.L))+
-        real(2114525943001808159799360.L))+real(499768298419350406035744.L))-
-        real(1212890066195340610855680.L))+real(435078310414246447814880.L))-
-        real(243068282836260352220736.L))+real(153984410360074655288480.L))-
-        real(102025021643160744300928.L))+real(67161242601898413948000.L))-
-        real(41077712199598055298240.L))+real(19551747405504050728992.L))+
-        real(4556964852924254247750.L))/real(18472920064106597929865025.L);
-      _C4x[11] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(real(1644593340680774363808.L)*_n+
-        real(2974985345798576277648.L))+real(6033217672533824666880.L))+
-        real(14593332547391192455536.L))+real(48470944278867841871712.L))+
-        real(377263975683542674014288.L))-real(2072466844264004196520512.L))+
-        real(2004280098922226778564912.L))+real(490983001152674306581536.L))-
-        real(1157448735444418176679920.L))+real(418961345006282569203328.L))-
-        real(236735403379970029309712.L))+real(152578379808885400201440.L))-
-        real(103980365080202374289456.L))+real(71949257599003878952768.L))-
-        real(48668654832790395121488.L))+real(30271556639684001914272.L))-
-        real(14541717385575148841072.L))+real(10562542186496209223769.L))/
-        real(18472920064106597929865025.L);
-      _C4x[12] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(real(5859225767839481941440.L)*_n+real(14138836591954902297600.L))+
-        real(46836981518114363714112.L))+real(363417916476778490830464.L))-
-        real(1988471862920876700983616.L))+real(1909460638889273111625984.L))+
-        real(481401111456226504006464.L))-real(1108873247879487179177088.L))+
-        real(404205608091269807345600.L))-real(230310960802358250088960.L))+
-        real(150227316868554610502720.L))-real(104271177452718125897600.L))+
-        real(74319013457213827752128.L))-real(52940603775677982348544.L))+
-        real(36502659689693769522496.L))-real(22982944304842651153024.L))+
-        real(11115849857024519262656.L))+real(2648408976069309124868.L))/
-        real(18472920064106597929865025.L);
-      _C4x[13] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(45357313447133764627200.L)*_n+real(350992057688664545142288.L))-
-        real(1913915380779142223674464.L))+real(1826804308476682757856816.L))+
-        real(471568337397950033457216.L))-real(1065875812796881025260464.L))+
-        real(390715339577761010443488.L))-real(224046698446479685030800.L))+
-        real(147426865494714014258560.L))-real(103639146131018019198320.L))+
-        real(75309285871462651360800.L))-real(55326930578775326600528.L))+
-        real(40234763951743351716544.L))-real(28135381515304633083696.L))+
-        real(17877808985319180867424.L))-real(8691641782865373187856.L))+
-        real(6372339575414211051807.L))/real(18472920064106597929865025.L);
-      _C4x[14] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(1753933532511317034765888.L)-real(1847153977649346830327136.L)*
-        _n)*_n+real(461789084706692153759712.L))-
-        real(1027477306531764197935488.L))+real(378366479907630886502688.L))-
-        real(218054850072167125283136.L))+real(144441107605135284033120.L))-
-        real(102488535780945183240448.L))+real(75481304605813369868192.L))-
-        real(56584143579971679080640.L))+real(42483089984340017145056.L))-
-        real(31372510739198785034368.L))+real(22174438785393712385568.L))-
-        real(14190233504057266556992.L))+real(6926800934824139768672.L))+
-        real(1671964091253290097186.L))/real(18472920064106597929865025.L);
-      _C4x[15] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(452232258222178731259872.L)*_n-real(992920225077050004699120.L))+
-        real(367034239977241909375680.L))-real(212378970982395934608528.L))+
-        real(141414529033734011291040.L))-real(101050148880869812595504.L))+
-        real(75156163830808410647680.L))-real(57139308626006973667280.L))+
-        real(43807877206156354446176.L))-real(33429658024434313696880.L))+
-        real(24979378458362427631168.L))-real(17803992487860150922000.L))+
-        real(11457353713161731633440.L))-real(5610802265994889042352.L))+
-        real(4137334111727488291165.L))/real(18472920064106597929865025.L);
-      _C4x[16] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(356603400938676393126144.L)*_n-real(207028189392477859501056.L))+
-        real(138426858316142976126720.L))-real(99460280478065510819328.L))+
-        real(74525806878683852346624.L))-real(57246300780477923866624.L))+
-        real(44537266454003446889216.L))-real(34728397099533369985536.L))+
-        real(26835866849517672595712.L))-real(20239122580453996764160.L))+
-        real(14521934281100724446976.L))-real(9387445163616609693184.L))+
-        real(4609135838728243047680.L))+real(1121862778166628454320.L))/
-        real(18472920064106597929865025.L);
-      _C4x[17] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(135521498207840115389760.L)*_n-real(97801324580930546164080.L))+
-        real(73708932658832728524384.L))-real(57062294419595186876112.L))+
-        real(44872638803452391883648.L))-real(35523601668082297450032.L))+
-        real(28065863564156663165088.L))-real(21904058542540639116176.L))+
-        real(16643111787427543929280.L))-real(12006564633203377451760.L))+
-        real(7790065294829085108960.L))-real(3833034059675095183440.L))+
-        real(2837212009395740895555.L))/real(18472920064106597929865025.L);
-      _C4x[18] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(72780887999907980778720.L)*_n-real(56687797467093094390464.L))+
-        real(44942288203091579409312.L))-real(35976018484962791685888.L))+
-        real(28869487952817744324192.L))-real(23048040245128473133888.L))+
-        real(18132809768032450731296.L))-real(13861708603609051373440.L))+
-        real(10044727732782400847840.L))-real(6537113063366962023360.L))+
-        real(3222261847927140308640.L))+real(788765879651738958270.L))/
-        real(18472920064106597929865025.L);
-      _C4x[19] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(44830467165217313564448.L)*_n-real(36190573016423876920944.L))+
-        real(29376003983353192454784.L))-real(23829834809301037658256.L))+
-        real(19186376534360080014816.L))-real(15194457458019024700592.L))+
-        real(11674167008212187725120.L))-real(8491094065455827973840.L))+
-        real(5540167474678961177760.L))-real(2734942126196093975280.L))+
-        real(2029779927155061805185.L))/real(18472920064106597929865025.L);
-      _C4x[20] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(9890530249207254091968.L)*_n-real(8118063630608987537920.L))+
-        real(6643669716759343956800.L))-real(5386553664458604177792.L))+
-        real(4289287139671079089600.L))-real(3309498018794454114560.L))+
-        real(2414702008011454632000.L))-real(1578935189784522012800.L))+
-        real(780444455838026203840.L))+real(191815908348659248500.L))/
-        real(6157640021368865976621675.L);
-      _C4x[21] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(6817412133444875030656.L)*_n-
-        real(5620052783236574483024.L))+real(4583277918914439827040.L))-
-        real(3666544959812840807920.L))+real(2839166746024591046720.L))-
-        real(2077083941506777485200.L))+real(1360691529974839700000.L))-
-        real(673303240421980556080.L))+real(500663785927046642285.L))/
-        real(6157640021368865976621675.L);
-      _C4x[22] = (_n*(_n*(_n*(_n*(_n*(_n*(real(960262614181115850976.L)*_n-
-        real(786986354599569927744.L))+real(632056913425981822112.L))-
-        real(490933242387825553792.L))+real(359984540096369636448.L))-
-        real(236201765928323876032.L))+real(116988418102754605088.L))+
-        real(28838938497325330374.L))/real(1231528004273773195324335.L);
-      _C4x[23] = (_n*(_n*(_n*(_n*(_n*(real(23484957834366375456.L)*_n-
-        real(18925443258702887248.L))+real(14738796727059217088.L))-
-        real(10828987655927003952.L))+real(7115236278117316448.L))-
-        real(3526991761547102992.L))+real(2626420759498248999.L))/
-        real(42466482905992179149115.L);
-      _C4x[24] = (_n*(_n*(_n*(_n*(real(2668340077443716480.L)*_n-
-        real(2082843371271969280.L))+real(1532978845352494720.L))-
-        real(1008471996361473280.L))+real(500253303269582720.L))+
-        real(123596899995061064.L))/real(6849432726772932120825.L);
-      _C4x[25] = (_n*(_n*(_n*(real(2156823602081600.L)*_n-
-        real(1589847612210000.L))+real(1046997801668000.L))-
-        real(519691524492400.L))+real(387422508833217.L))/
-        real(8048687105491107075.L);
-      _C4x[26] = (_n*(_n*(real(7937931437280.L)*_n-real(5232466998720.L))+
-        real(2598654782880.L))+real(643173496654.L))/real(45302178830156325.L);
-      _C4x[27] = (_n*(real(21708121824.L)*_n-real(10786479696.L))+
-        real(8048130587.L))/real(210707808512355.L);
-      _C4x[28] = (real(121722048.L)*_n+real(30168404.L))/real(2653289816265.L);
-      _C4x[29] = real(3361.L)/real(109067695.L);
-      _C4x[30] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(814084305459122880.L)*_n-real(977257180095608880.L))*_n-
-        real(1181333738586811680.L))-real(1438803912381373200.L))-
-        real(1766717362179918720.L))-real(2188646813513537520.L))-
-        real(2737638489144023520.L))-real(3460724822271744720.L))-
-        real(4425960997191074880.L))-real(5733631291815710640.L))-
-        real(7534517181435246240.L))-real(10060456849540932240.L))-
-        real(13676960945781136640.L))-real(18976783312271327088.L))-
-        real(26952532820327392096.L))-real(39328695850069561936.L))-
-        real(59231882009011647936.L))-real(92622403729778018096.L))-
-        real(151563933376000393248.L))-real(262322192381539142160.L))-
-        real(487548317153567698560.L))-real(995411147521867384560.L))-
-        real(2315854506479446568160.L))-real(6561587768358431943120.L))-
-        real(26246351073433727772480.L))-real(255901922965978845781680.L))+
-        real(1876614101750511535732320.L))-real(2814921152625767303598480.L))+
-        real(1231528004273773195324335.L))/real(55418760192319793789595075.L);
-      _C4x[31] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-real(2005643965009613760.L)*
-        _n-real(2429409496302821760.L))*_n-real(2965661919767726400.L))-
-        real(3650954726278679040.L))-real(4536121407398159040.L))-
-        real(5692895300159591040.L))-real(7224136946783000640.L))-
-        real(9279964644013781760.L))-real(12083782077375046080.L))-
-        real(15975351585978180480.L))-real(21484119234250012480.L))-
-        real(29458069729374755840.L))-real(41298475551499997376.L))-
-        real(59405582542762415232.L))-real(88066170611639019072.L))-
-        real(135322933470303651072.L))-real(217183567366376042432.L))-
-        real(367898778451146253696.L))-real(667729216971190543680.L))-
-        real(1328392516302474309120.L))-real(3006547955780334141120.L))-
-        real(8288321391610650875520.L))-real(32421963090712251954240.L))-
-        real(314956212881204733269760.L))+real(2440910649829336682840640.L))-
-        real(4776835895364938454591360.L))+real(3753228203501023071464640.L))-
-        real(1055595432234662738849430.L))/real(55418760192319793789595075.L);
-      _C4x[32] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-real(3816953936920456800.L)*_n-
-        real(4677189639754023600.L))*_n-real(5782666059330422400.L))-
-        real(7219608463225577040.L))-real(9110981115729129120.L))-
-        real(11635224361148640240.L))-real(15056331161655618240.L))-
-        real(19773358779936305040.L))-real(26404265548567707360.L))-
-        real(35932449379408457008.L))-real(49972283914418892544.L))-
-        real(71270574874949052624.L))-real(104699952805366775584.L))-
-        real(159340438154165872240.L))-real(253142983745603515200.L))-
-        real(424262440221289179664.L))-real(761531304077056446304.L))-
-        real(1497797891719239317424.L))-real(3350658144843794241408.L))-
-        real(9126515871644592444240.L))-real(35225365914345266220960.L))-
-        real(335778588926305020395760.L))+real(2502666770002121924658240.L))-
-        real(4389702217031790969947280.L))+real(2375294772145752363409440.L))+
-        real(426503204943298076302800.L))-real(527797716117331369424715.L))/
-        real(55418760192319793789595075.L);
-      _C4x[33] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-real(6688421299693756800.L)*_n-
-        real(8318723752159902720.L))*_n-real(10456318988493686400.L))-
-        real(13297764205111054080.L))-real(17132844985350284160.L))-
-        real(22398068386194117120.L))-real(29766990506144868480.L))-
-        real(40307665023770473728.L))-real(55767164347954251136.L))-
-        real(79107406984970348544.L))-real(115563675901661162112.L))-
-        real(174856271434465483520.L))-real(276130458992508848000.L))-
-        real(459921286559271452160.L))-real(820204488667933084800.L))-
-        real(1602120454252197789952.L))-real(3556690557130179471744.L))-
-        real(9598342522049367561216.L))-real(36574602887685465525888.L))-
-        real(341411008525015711000320.L))+real(2442779585045092025685120.L))-
-        real(3876334153582298915351040.L))+real(1269088269550736719351680.L))+
-        real(1574781064406023666348800.L))-real(1207332149377951477534080.L))+
-        real(191926442224484134336260.L))/real(55418760192319793789595075.L);
-      _C4x[34] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*((-real(11462002110786579840.L)*_n-
-        real(14532667058590206000.L))*_n-real(18665387532273821280.L))-
-        real(24322846465933422480.L))-real(32217392904290184000.L))-
-        real(43476036592309432560.L))-real(59938038670189729824.L))-
-        real(84714223035796826192.L))-real(123289476739392063744.L))-
-        real(185820728393648468400.L))-real(292255603104432757216.L))-
-        real(484690342916587907344.L))-real(860347070756853376704.L))-
-        real(1671653262597377206896.L))-real(3687406234588003306400.L))-
-        real(9868141697134848102864.L))-real(37152156376431500944512.L))-
-        real(340202559960650654251824.L))+real(2351419036440507359736480.L))-
-        real(3451546200146088209466000.L))+real(668997549187553810374080.L))+
-        real(1735001630130614851288080.L))-real(961079620188970325786400.L))+
-        real(45931114378509023601840.L))+real(6151488532836029946675.L))/
-        real(55418760192319793789595075.L);
-      _C4x[35] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*((-real(19847244376334498880.L)*_n-
-        real(25801395373244530560.L))*_n-real(34092435167930139840.L))-
-        real(45891051087732082944.L))-real(63104393053459745088.L))-
-        real(88951984456050754176.L))-real(129098616922168078784.L))-
-        real(194010162422931018752.L))-real(304186862818327078464.L))-
-        real(502757981992172660096.L))-real(888964630867993808576.L))-
-        real(1719317325273701588736.L))-real(3770674992738836845376.L))-
-        real(10013419727824349669504.L))-real(37287277314258483567552.L))-
-        real(335749034487865066596864.L))+real(2255512032774074262089664.L))-
-        real(3115802587512100727622528.L))+real(326338699607330562336576.L))+
-        real(1684557160859615373085440.L))-real(778370888335670830751040.L))+
-        real(134725851640102540702080.L))-real(177548845496757570225600.L))+
-        real(61514885328360299466750.L))/real(55418760192319793789595075.L);
-      _C4x[36] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*((-real(35580188330979656480.L)*_n-
-        real(47800971987094641840.L))*_n-real(65598887342296596928.L))-
-        real(92274510981260121296.L))-real(133624133893158205536.L))-
-        real(200333254919296556784.L))-real(313279606173452163840.L))-
-        real(516256798917127139088.L))-real(909680190002436316576.L))-
-        real(1751995742683927984432.L))-real(3821884125050105443392.L))-
-        real(10077766696148516843856.L))-real(37158662647818267103968.L))-
-        real(329759833992830299966320.L))+real(2163767191649939424793216.L))-
-        real(2848512689616706443312016.L))+real(118143397748753246652384.L))+
-        real(1590687092722570815621712.L))-real(664715603097770302760640.L))+
-        real(186479282153894749573680.L))-real(204973438336645753269600.L))+
-        real(35733228744713565906960.L))+real(8419096070430488044665.L))/
-        real(55418760192319793789595075.L);
-      _C4x[37] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*((-real(67614346374123618048.L)*_n-
-        real(94942623276258132992.L))*_n-real(137228018043831245056.L))-
-        real(205309620072052627968.L))-real(320314130323449012992.L))-
-        real(526432706840689430528.L))-real(924657026068917288192.L))-
-        real(1773897164768946914816.L))-real(3850578519939696887552.L))-
-        real(10087913193119159688192.L))-real(36869909959797637243136.L))-
-        real(323101223380667185459712.L))+real(2078802922316667474154752.L))-
-        real(2631988397451844271368192.L))-real(14930806384683051123968.L))+
-        real(1494910512547290465575424.L))-real(590282828713516030168832.L))+
-        real(212501349224908436360192.L))-real(202201125550628328827136.L))+
-        real(61134319420473445332480.L))-real(56230572578378141233920.L))+
-        real(26479967975403145628040.L))/real(55418760192319793789595075.L);
-      _C4x[38] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*((-real(140135640797037619776.L)*_n-
-        real(209265279469938687024.L))*_n-real(325786240806027892128.L))-
-        real(534090489468272393232.L))-real(935316351805514224896.L))-
-        real(1787817966663647237616.L))-real(3863082324469943710816.L))-
-        real(10061107370431775593936.L))-real(36483809234456367677376.L))-
-        real(316230073692359390037936.L))+real(2001043590628557886029024.L))-
-        real(2453360065026297009092496.L))-real(103394407542075265698432.L))+
-        real(1407604530728476508425872.L))-real(538063919347557729952224.L))+
-        real(224182862009367660707504.L))-real(193375802540129176491328.L))+
-        real(77398825291951865154768.L))-real(76323569275099051176096.L))+
-        real(20299498139747185536240.L))+real(4968168138077891678295.L))/
-        real(55418760192319793789595075.L);
-      _C4x[39] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*((-real(330035192316442762432.L)*_n-
-        real(539787852319707457920.L))*_n-real(942651980471728721984.L))-
-        real(1795714705202389126144.L))-real(3863762192004920940480.L))-
-        real(10008869602452047523456.L))-real(36039662586506876291904.L))-
-        real(309392037837973786585344.L))+real(1930118996419671573986624.L))-
-        real(2303504873890674693034880.L))-real(163987936825440233346624.L))+
-        real(1330502303732325803588096.L))-real(499154401904498160623040.L))+
-        real(228101605850403113609088.L))-real(184119365546522586214720.L))+
-        real(87322616002846390639872.L))-real(83535203192403975923904.L))+
-        real(33118898100595057181312.L))-real(24847299380732185680960.L))+
-        real(13670894558772762743250.L))/real(55418760192319793789595075.L);
-      _C4x[40] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*((-real(947388313020058838496.L)*_n-real(1799003943382836775600.L))*
-        _n-real(3855720267295109129984.L))-real(9939093360251941403472.L))-
-        real(35562658326305742522400.L))-real(302718790207011419004400.L))+
-        real(1865402076799515601556160.L))-real(2175912282139128640165520.L))-
-        real(206430197983594870667872.L))+real(1262901198421429395158736.L))-
-        real(468727463627992918545280.L))+real(227818255852780731967024.L))-
-        real(175710166112086001196192.L))+real(93128707316214767719312.L))-
-        real(85623932461375306643904.L))+real(41437384895418975263472.L))-
-        real(36831773863672624352992.L))+real(12053690019269973776464.L))+
-        real(2980680072920487920157.L))/real(55418760192319793789595075.L);
-      _C4x[41] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(3841207564338212515968.L)*_n-real(9857294793660195600384.L))*_n-
-        real(35069211459881194299264.L))-real(296278466827896236577024.L))+
-        real(1806221212550456218208640.L))-real(2065860304455691649088000.L))-
-        real(236638770613027231810944.L))+real(1203530014670064977607936.L))-
-        real(444020900085069505371264.L))+real(225268510860390785385472.L))-
-        real(168318066923378504338304.L))+real(96301772308684493015808.L))-
-        real(85532415108775652909696.L))+real(46865263338914335490560.L))-
-        real(42889332527017771659648.L))+real(19806892137255872551168.L))-
-        real(13204705668013650315392.L))+real(7945226928207927374604.L))/
-        real(55418760192319793789595075.L);
-      _C4x[42] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(34570132243058804572416.L)*_n-real(290103005755605244351536.L))*_n+
-        real(1751942018638081895464224.L))-real(1969860415982855605457040.L))-
-        real(258364250937265972420800.L))+real(1151120746513593270556944.L))-
-        real(423365216157605967320736.L))+real(221524358403251902655664.L))-
-        real(161839711497044888838272.L))+real(97790402192806968815184.L))-
-        real(84483808178319136553568.L))+real(50383607194859243315696.L))-
-        real(45979102886110400372800.L))+real(24993236713673849850768.L))-
-        real(20675861806313495973408.L))+real(7622298985427171962672.L))+
-        real(1892850834301749304731.L))/real(55418760192319793789595075.L);
-      _C4x[43] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(1701994960858239813972672.L)*_n-
-        real(1885287950016774159024000.L))-real(274065984469264122532800.L))+
-        real(1104566494831757719338240.L))-real(405699254588547485206080.L))+
-        real(217190621111722953075072.L))-real(156125915240022434540736.L))+
-        real(98196995368563810844160.L))-real(83022046253984048172864.L))+
-        real(52617302280444217045632.L))-real(47487104885086738085312.L))+
-        real(28531059373389509918464.L))-real(25079781177753740945472.L))+
-        real(12727519124781414210432.L))-real(7882579214068057288384.L))+
-        real(5015892273759870291558.L))/real(55418760192319793789595075.L);
-      _C4x[44] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(1062944632259898279572304.L)-real(285404106963266611203744.L)*
-        _n)*_n-real(390317526654249104686656.L))+
-        real(212613189904717741628976.L))-real(151041081363274969789920.L))+
-        real(97906868047333644171024.L))-real(81401059645446646761856.L))+
-        real(53974314048451953240560.L))-real(48111090638036365839648.L))+
-        real(30962521854484358144720.L))-real(27737242043737957995712.L))+
-        real(16267332716492314463664.L))-real(12811373250402984457312.L))+
-        real(5090958618155564996240.L))+real(1266952522750128264225.L))/
-        real(55418760192319793789595075.L);
-      _C4x[45] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(207990932412946446206976.L)-real(376732087321994151448064.L)*_n)*
-        _n-real(146474601612938666443264.L))+real(97169353635137985289216.L))-
-        real(79743103258702858458624.L))+real(54726083031053696315392.L))-
-        real(48223322779126909061632.L))+real(32629351855022582252544.L))-
-        real(29350330880583378394624.L))+real(18774027310783717152768.L))-
-        real(15996417250061875941888.L))+real(8639532003336273980416.L))-
-        real(5095874742975159969280.L))+real(3365588334499885362960.L))/
-        real(55418760192319793789595075.L);
-      _C4x[46] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(96147780439629766979536.L)-real(142339128738509340355008.L)*_n)*
-        _n-real(78107652208277513893408.L))+real(55056235240537884001008.L))-
-        real(48032132090083457656448.L))+real(33756366984930393685008.L))-
-        real(30313847800677949581024.L))+real(20570433288805596262192.L))-
-        real(18101183122240008151872.L))+real(11184879250589618139216.L))-
-        real(8509304451750124537760.L))+real(3556079264867171963760.L))+
-        real(886075630207202901375.L))/real(55418760192319793789595075.L);
-      _C4x[47] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(55090871324183468777088.L)-real(76523089763985821705664.L)*_n)*
-        _n-real(47658833209034917312320.L))+real(34496060551838452376064.L))-
-        real(30860325336708127460544.L))+real(21863834399640327325056.L))-
-        real(19510153585784551710272.L))+real(13046295420881552462080.L))-
-        real(10857175459784817992640.L))+real(6122978918822394760320.L))-
-        real(3491055165207878210880.L))+real(2366297638955216874810.L))/
-        real(55418760192319793789595075.L);
-      _C4x[48] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(34954321124911591136592.L)-real(47176442350469959824736.L)*_n)*
-        _n-real(31132163789696460427136.L))+real(22792973292386146379696.L))-
-        real(20456406103376609499552.L))+real(14424895721637750243344.L))-
-        real(12503771489851888195520.L))+real(8020051384627945661040.L))-
-        real(5950645450397488696800.L))+real(2576558619861345700560.L))+
-        real(642510925765171283205.L))/real(55418760192319793789595075.L);
-      _C4x[49] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(23453686777064094620672.L)-
-        real(31219511051863266258816.L)*_n)*_n-real(21086659018714357475456.L))+
-        real(15453430466497973157120.L))-real(13674031491581111843200.L))+
-        real(9446133588918941560320.L))-real(7721456099348769690240.L))+
-        real(4492650943146103422720.L))-real(2499503236834749129600.L))+
-        real(1726343175137933236500.L))/real(55418760192319793789595075.L);
-      _C4x[50] = (_n*(_n*(_n*(_n*(_n*(_n*((real(5407589072646469496816.L)-
-        real(7165426380527719942528.L)*_n)*_n-real(4837362034234238303520.L))+
-        real(3510391217391502943440.L))-real(3005898282995297604800.L))+
-        real(1981915927642556595120.L))-real(1443361750708063192160.L))+
-        real(641358162809287868560.L))+real(160019031014469778305.L))/
-        real(18472920064106597929865025.L);
-      _C4x[51] = (_n*(_n*(_n*(_n*(_n*((real(757562138772545005440.L)-
-        real(1007548363563399060928.L)*_n)*_n-real(665218929187409178944.L))+
-        real(470942424602221403392.L))-real(379672162975286765760.L))+
-        real(226107025984450495104.L))-real(123519074556567739456.L))+
-        real(86516815491975991122.L))/real(3694584012821319585973005.L);
-      _C4x[52] = (_n*(_n*(_n*(_n*((real(91200994242608567600.L)-
-        real(122944302767324211936.L)*_n)*_n-real(77327312120249875264.L))+
-        real(52063113028397988432.L))-real(37380420194747347872.L))+
-        real(16937015255732167024.L))+real(4227381449623069023.L))/
-        real(636997243589882687236725.L);
-      _C4x[53] = (_n*(_n*(_n*((real(2010823247286486016.L)-
-        real(2787158949471683840.L)*_n)*_n-real(1603653185828168448.L))+
-        real(972166889809842688.L))-real(523716116426936576.L))+
-        real(370790699985183192.L))/real(20548298180318796362475.L);
-      _C4x[54] = (_n*(_n*((real(106111501951975728.L)-
-        real(155064719533064896.L)*_n)*_n-real(75346950652689248.L))+
-        real(34656942644604176.L))+real(8652573946332745.L))/
-        real(1666078230836659164525.L);
-      _C4x[55] = (_n*((real(5071657205888.L)-real(8250530877888.L)*_n)*_n-
-        real(2702497967936.L))+real(1929520489962.L))/
-        real(135906536490468975.L);
-      _C4x[56] = ((real(1519083436272.L)-real(3263721307296.L)*_n)*_n+
-        real(379339642199.L))/real(91657896702874425.L);
-      _C4x[57] = (real(90505212.L)-real(125915776.L)*_n)/real(7959869448795.L);
-      _C4x[58] = real(917561.L)/real(273868982145.L);
-      _C4x[59] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(10225920963679200.L)*
-        _n+real(13348403825839680.L))+real(17610819000996000.L))+
-        real(23504000383768320.L))+real(31765556074216800.L))+
-        real(43523664374308800.L))+real(60537460447902240.L))+
-        real(85608529926326400.L))+real(123303898748724960.L))+
-        real(181263444621537600.L))+real(272641107033629600.L))+
-        real(420829567562496512.L))+real(668981785391468640.L))+
-        real(1100103380421526208.L))+real(1881755782299979040.L))+
-        real(3371833890456071040.L))+real(6387751981364001248.L))+
-        real(12954182339829093440.L))+real(28616966441622451872.L))+
-        real(70659176399067782400.L))+real(203145132147319874400.L))+
-        real(731322475730351547840.L))+real(3859757510799077613600.L))+
-        real(52492702146867455544960.L))-real(590542899152258874880800.L))+
-        real(1706012819773192305211200.L))-real(1876614101750511535732320.L))+
-        real(703730288156441825899620.L))/real(92364600320532989649325125.L);
-      _C4x[60] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(55388496851101440.L)*_n+
-        real(73297116867312000.L))+real(98160656573506560.L))+
-        real(133181191363743360.L))+real(183292111100862720.L))+
-        real(256250070250062720.L))+real(364526643557260800.L))+
-        real(528677904833124480.L))+real(783535482429889280.L))+
-        real(1189983324838874496.L))+real(1858254845525170176.L))+
-        real(2996123551667774080.L))+real(5013842433670796544.L))+
-        real(8766768115185784704.L))+real(16157555531640001024.L))+
-        real(31764404393681038464.L))+real(67735348410140839680.L))+
-        real(160631861013880758656.L))+real(440913260730182962176.L))+
-        real(1505040457300143765120.L))+real(7475740863021371377920.L))+
-        real(95071921844945701219200.L))-real(1000449146799120917445120.L))+
-        real(2782113213783975143882880.L))-real(3464518341693252065967360.L))+
-        real(2047215383727830766253440.L))-real(469153525437627883933080.L))/
-        real(92364600320532989649325125.L);
-      _C4x[61] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(193786477152168000.L)*_n+
-        real(260786717022574080.L))+real(355789016082678720.L))+
-        real(492766878916663680.L))+real(693948215922327360.L))+
-        real(995554358851411200.L))+real(1458219485527055040.L))+
-        real(2186561839577227392.L))+real(3367385075175560768.L))+
-        real(5347583613890782208.L))+real(8801246886455325120.L))+
-        real(15109857583132764032.L))+real(27289946337266150720.L))+
-        real(52455989242200042240.L))+real(109080529302663219392.L))+
-        real(251462306635481083520.L))+real(668411443501940163648.L))+
-        real(2198913569538989388288.L))+real(10459677882354003828672.L))+
-        real(126190223131095152588160.L))-real(1238779015834356594091200.L))+
-        real(3091381362965054920669440.L))-real(3052296239539910576834880.L))+
-        real(682405127909276922084480.L))+real(761144181129578105401920.L))-
-        real(383852884448968268672520.L))/real(92364600320532989649325125.L);
-      _C4x[62] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(564397049921172480.L)*_n+
-        real(775607788496883840.L))+real(1083186997807084800.L))+
-        real(1540138644113074560.L))+real(2234348005630195200.L))+
-        real(3315926665505055360.L))+real(5050048925185472256.L))+
-        real(7923556934823951232.L))+real(12871056955825911808.L))+
-        real(21783222619092923520.L))+real(38731364103567046912.L))+
-        real(73174877880134192512.L))+real(149279729934157036032.L))+
-        real(336833892044063327872.L))+real(873810621715813169920.L))+
-        real(2794690680798804402048.L))+real(12851978308127269420032.L))+
-        real(148549612910816161650816.L))-real(1373317620657001605169920.L))+
-        real(3097662963746932046524800.L))-real(2370784950212081862197760.L))-
-        real(455857676538585798153600.L))+real(1550078616336909569621760.L))-
-        real(682405127909276922084480.L))+real(68896671567763535402760.L))/
-        real(92364600320532989649325125.L);
-      _C4x[63] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(1510159456347225120.L)*_n+
-        real(2131225074243766080.L))+real(3067263814697368160.L))+
-        real(4513288224908855680.L))+real(6810844338272471200.L))+
-        real(10581309789942926272.L))+real(17006095585078593248.L))+
-        real(28450673954439392768.L))+real(49952932107547825440.L))+
-        real(93079891060155650112.L))+real(187003428066745553760.L))+
-        real(414784851299522417280.L))+real(1055235908022005293472.L))+
-        real(3298920275002817205440.L))+real(14757435305564548669408.L))+
-        real(164615132310776762906368.L))-real(1446852921979182545850848.L))+
-        real(2993432434987727176243520.L))-real(1793960530157701997269920.L))-
-        real(1016707823288546414175360.L))+real(1487794318820541296130720.L))-
-        real(371105527406723946553920.L))-real(22386593562634650158880.L))-
-        real(14763572478806471872020.L))/real(92364600320532989649325125.L);
-      _C4x[64] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(real(3926503759589752320.L)*_n+
-        real(5736057719114897664.L))+real(8589583111438156800.L))+
-        real(13234884752815992576.L))+real(21082484153642273280.L))+
-        real(34932749781583856896.L))+real(60695852194351403008.L))+
-        real(111809155009711676160.L))+real(221801493924987622912.L))+
-        real(485023232422784790784.L))+real(1214043802728328879104.L))+
-        real(3723758295178525902592.L))+real(16275479861714760655360.L))+
-        real(176182036867386606083328.L))-real(1483900099438236172621824.L))+
-        real(2853910160118121085694720.L))-real(1353918119411404304454144.L))-
-        real(1264163324955721694918400.L))+real(1273007027473829018563584.L))-
-        real(210408895481144042430720.L))+real(105960500928042046487040.L))-
-        real(152440107163348833749760.L))+real(33579890343951975238320.L))/
-        real(92364600320532989649325125.L);
-      _C4x[65] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(real(10348807236233434752.L)*_n+
-        real(15833236058289707520.L))+real(25030870678909246848.L))+
-        real(41136745997606531328.L))+real(70842170185100551296.L))+
-        real(129234137024964937728.L))+real(253616491925840964480.L))+
-        real(547913146278462578432.L))+real(1352561511617963045504.L))+
-        real(4081499505667871798784.L))+real(17487479030009948141952.L))+
-        real(184503743811725745818880.L))-real(1498633725517251663134592.L))+
-        real(2708950537964498237039616.L))-real(1024358657433489622349952.L))-
-        real(1357718080316965863965952.L))+real(1072802112995662905134720.L))-
-        real(155746014496473218395648.L))+real(187782414014634557150592.L))-
-        real(149444158084028359776000.L))+real(6338128122996380081280.L))+
-        real(1482959464675435083120.L))/real(92364600320532989649325125.L);
-      _C4x[66] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(real(28813974765118858240.L)*_n+
-        real(47018702229964543744.L))+real(80348922982315178496.L))+
-        real(145342299480053398784.L))+real(282567261500227801088.L))+
-        real(604059413193177260800.L))+real(1473262487019278362112.L))+
-        real(4383038320173895665920.L))+real(18457229388826488601600.L))+
-        real(190454066254228843818752.L))-real(1499478418032986585689600.L))+
-        real(2570244849456177085371648.L))-real(776332302242292094294016.L))-
-        real(1376417232538117303272704.L))+real(914176297176770559163904.L))-
-        real(145166482459855919292160.L))+real(223399040905236937266176.L))-
-        real(125007388518174757910784.L))+real(34464719880409301543424.L))-
-        real(53065041475699904582400.L))+real(17165763666448529386800.L))/
-        real(92364600320532989649325125.L);
-      _C4x[67] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(real(89213549963721942624.L)*_n+
-        real(160178600054690713152.L))+real(308847440495627304480.L))+
-        real(654128645982132822528.L))+real(1578464349274375357920.L))+
-        real(4637582930729589290432.L))+real(19234163038099038821792.L))+
-        real(194648740348473794931072.L))-real(1491588254398097307949728.L))+
-        real(2441931481777210121805120.L))-real(587403086315149652198112.L))-
-        real(1358958355574264419618560.L))+real(793071656092041900786912.L))-
-        real(149884297159121689770816.L))+real(232915693481018797481120.L))-
-        real(106097486461191358236544.L))+real(59673903887854299030624.L))-
-        real(65732112028760785933248.L))+real(8325417459220161461280.L))+
-        real(2279862488501171416500.L))/real(92364600320532989649325125.L);
-      _C4x[68] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(real(332676211076188667136.L)*_n+
-        real(698771409436338781824.L))+real(1670231531257124333568.L))+
-        real(4852771423956136513920.L))+real(19856578439370859107072.L))+
-        real(197527911063230844470400.L))-real(1478199428698110793105920.L))+
-        real(2324951000087213754275712.L))-real(441480804322928718862080.L))-
-        real(1324621492392870291699072.L))+real(700720820593975863399424.L))-
-        real(158384241916642412929664.L))+real(229787803240103030947584.L))-
-        real(94727874271911753084800.L))+real(76721835386908846844416.L))-
-        real(65395982632546671041664.L))+real(19464345252996169356544.L))-
-        real(23969947940443760716160.L))+real(9752291202628836492120.L))/
-        real(92364600320532989649325125.L);
-      _C4x[69] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(real(1750360477507800441536.L)*_n+real(5034896784851855780864.L))+
-        real(20354291808487928837440.L))+real(199410924180410437662336.L))-
-        real(1461389035468887244838976.L))+real(2218912856068127267586304.L))-
-        real(327220860548568939857344.L))-real(1283189264783818863506560.L))+
-        real(629471489523330331159744.L))-real(166461107883227116972544.L))+
-        real(221216258070492868525888.L))-real(88635937521315812663168.L))+
-        real(86705203987721024664000.L))-real(61948693544619373024512.L))+
-        real(29724227698789988205632.L))-real(33609489189994449029760.L))+
-        real(6542430603722650203840.L))+real(1759266285719289723880.L))/
-        real(92364600320532989649325125.L);
-      _C4x[70] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(20750676603924363380736.L)*_n+real(200532809147824922866560.L))-
-        real(1442514123424746242631936.L))+real(2122918714733138306165376.L))-
-        real(236599827628978397551104.L))-real(1239671295066849607433856.L))+
-        real(573598087596734159074560.L))-real(172832537264684588828544.L))+
-        real(210776075512535926457344.L))-real(85667085855198022840448.L))+
-        real(91750331278805358367488.L))-real(58511115428931574102400.L))+
-        real(37716213508602300539392.L))-real(36872632132887958495872.L))+
-        real(12694658546883640848640.L))-real(12765430379737479113600.L))+
-        real(6025446039159729483000.L))/real(92364600320532989649325125.L);
-      _C4x[71] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(2035928845700220481028928.L)-real(1422473440015137751405920.L)*
-        _n)*_n-real(163882404607538930695200.L))-
-        real(1196615424836726937694080.L))+real(529003988833701589478688.L))-
-        real(177330013217149431865920.L))+real(200156031948174846936672.L))-
-        real(84385655624976395302144.L))+real(93628316085241762426784.L))-
-        real(55840878314952302921664.L))+real(43387747643814191794400.L))-
-        real(37497004539622719339136.L))+real(18071538116079585014304.L))-
-        real(19292542849512407051584.L))+real(4795965398911197711200.L))+
-        real(1267516030173145370940.L))/real(92364600320532989649325125.L);
-      _C4x[72] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(104913580559080807621632.L)*_n-real(1155273392742248110536192.L))*
-        _n+real(492787395690658718947328.L))-real(180168311129085732035072.L))+
-        real(190100239465169451258880.L))-real(83937140546282456677888.L))+
-        real(93573752982776103833600.L))-real(53947756308357148959232.L))+
-        real(47142507870816502516736.L))-real(37139814175395887531520.L))+
-        real(22434457182073563777024.L))-real(22508469801129060084224.L))+
-        real(8780780057373695443968.L))-real(7597582748731977469440.L))+
-        real(3969095839988936541920.L))/real(92364600320532989649325125.L);
-      _C4x[73] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(462884984899016179918080.L)*_n-real(181657666546014617932800.L))+
-        real(180890017322133425173248.L))-real(83841828039865046361600.L))+
-        real(92390039530657458077952.L))-real(52653850736823081416704.L))+
-        real(49450831092728900013824.L))-real(36500401767585397737984.L))+
-        real(25788291725039460834560.L))-real(24010147167193701047296.L))+
-        real(12111681294802971028224.L))-real(12063452177263553457664.L))+
-        real(3511708739491195255040.L))+real(916661338230053172960.L))/
-        real(92364600320532989649325125.L);
-      _C4x[74] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(172586112286902449903616.L)*_n-real(83843124463314953697792.L))+
-        real(90582884130577018475520.L))-real(51773100267400389139968.L))+
-        real(50717873269527405072384.L))-real(35851877739928402641408.L))+
-        real(28260766168381046049792.L))-real(24641738258264699102720.L))+
-        real(14832274053282260420608.L))-real(14672265221402357893632.L))+
-        real(6309801849014622766080.L))-real(4893746262753346629120.L))+
-        real(2747719450008674799840.L))/real(92364600320532989649325125.L);
-      _C4x[75] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(88464230067365972517088.L)*_n-real(51158198782477902887360.L))+
-        real(51256618816174764684192.L))-real(35283865772827250342656.L))+
-        real(30014945147323219818080.L))-real(24842081849940667251776.L))+
-        real(16997908311482491636000.L))-real(16188403886159756795264.L))+
-        real(8594671248920096279520.L))-real(8043852184060868280000.L))+
-        real(2611662709409341529760.L))+real(675732084838686311940.L))/
-        real(92364600320532989649325125.L);
-      _C4x[76] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(51296797078671665468160.L)*_n-real(34811196771702299960448.L))+
-        real(31206641459411733076992.L))-real(24836160156843489059712.L))+
-        real(18681678895674326426880.L))-real(17062382565779482378880.L))+
-        real(10460065523713051471360.L))-real(10078508632973323616640.L))+
-        real(4672292491084876035840.L))-real(3342416484332444803200.L))+
-        real(1978656352225287827400.L))/real(92364600320532989649325125.L);
-      _C4x[77] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(10656202668643435975104.L)*_n-real(8245754510254482276864.L))+
-        real(6654020647736230357568.L))-real(5852702008698615320960.L))+
-        real(3989947706091658142400.L))-real(3799868400102736666880.L))+
-        real(2113805151487135644480.L))-real(1878501406816923512960.L))+
-        real(660044494895188849600.L))+real(169684055409960861000.L))/
-        real(30788200106844329883108375.L);
-      _C4x[78] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(20913313546959607811072.L)*
-        _n-real(17830005446551747023232.L))+real(13178164975286764714240.L))-
-        real(12262116723167456668800.L))+real(7705392247574002460160.L))-
-        real(7219227959126401722240.L))+real(3547658462537036010240.L))-
-        real(2387866187601348854400.L))+real(1471081318455683965800.L))/
-        real(92364600320532989649325125.L);
-      _C4x[79] = (_n*(_n*(_n*(_n*(_n*(_n*(real(4711180203722749927520.L)*_n-
-        real(4275879978901995198528.L))+real(2940155760331451541280.L))-
-        real(2773854532947431196032.L))+real(1606094390631317806560.L))-
-        real(1368369818748899046080.L))+real(510087411385434104992.L))+
-        real(130505638655798393988.L))/real(30788200106844329883108375.L);
-      _C4x[80] = (_n*(_n*(_n*(_n*(_n*(real(111825452951270045184.L)*_n-
-        real(104540386919149525760.L))+real(67360700047710462976.L))-
-        real(61489086780213337344.L))+real(31633938350439698944.L))-
-        real(20316775186789342976.L))+real(12907124073180226032.L))/
-        real(1061662072649804478727875.L);
-      _C4x[81] = (_n*(_n*(_n*(_n*(real(7474051807931633280.L)*_n-
-        real(6961858298376531456.L))+real(4168952324633580928.L))-
-        real(3432280681360430848.L))+real(1338933524782046336.L))+
-        real(341311351846317424.L))/real(102741490901593981812375.L);
-      _C4x[82] = (_n*(_n*(_n*(real(3522180730272768.L)*_n-
-        real(3142089987455744.L))+real(1676633863151104.L))-
-        real(1037928664983808.L))+real(675511217288336.L))/
-        real(71199924394729024125.L);
-      _C4x[83] = (_n*(_n*(real(4862227565319072.L)*_n-real(3892692316249152.L))+
-        real(1573706902301664.L))+real(400010797142476.L))/
-        real(151082766398571343875.L);
-      _C4x[84] = (_n*(real(412763643136.L)*_n-real(248137794944.L))+
-        real(164642704408.L))/real(21823308738779625.L);
-      _C4x[85] = (real(17366491968.L)*_n+real(4404238552.L))/
-        real(2056299607605375.L);
-      _C4x[86] = real(185528.L)/real(30429886905.L);
-      _C4x[87] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-real(284983078248960.L)*_n-
-        real(407691551904000.L))*_n-real(592093576919040.L))-
-        real(874138152410880.L))-real(1313921943375360.L))-
-        real(2014318351207680.L))-real(3156074835993600.L))-
-        real(5066044262603520.L))-real(8354529134819840.L))-
-        real(14202699529193728.L))-real(24990939325026304.L))-
-        real(45742344300271360.L))-real(87632701712098816.L))-
-        real(177106426569409792.L))-real(381459995687959552.L))-
-        real(887628066889290496.L))-real(2274088435832066560.L))-
-        real(6594856463912993024.L))-real(22610936447701690368.L))-
-        real(98922846958694895360.L))-real(650064422871423598080.L))-
-        real(11376127400249912966400.L))+real(172917136483798677089280.L))-
-        real(734897830056144377629440.L))+real(1469795660112288755258880.L))-
-        real(1364810255818553844168960.L))+real(469153525437627883933080.L))/
-        real(129310440448746185509055175.L);
-      _C4x[88] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-real(861653267328000.L)*_n-
-        real(1257419066695680.L))*_n-real(1866580716426240.L))-
-        real(2823303349401600.L))-real(4359656760130560.L))-
-        real(6888309378355200.L))-real(11165975109411840.L))-
-        real(18628822411257856.L))-real(32110451109481472.L))-
-        real(57454252534611968.L))-real(107338902927979520.L))-
-        real(210952929008310272.L))-real(440372736334748672.L))-
-        real(989280867938004992.L))-real(2435475357084664832.L))-
-        real(6748907616017745920.L))-real(21961196894606814208.L))-
-        real(90443745790806761472.L))-real(553967942968691414016.L))-
-        real(8931319896842167695360.L))+real(123512240345570483635200.L))-
-        real(473246899850396379402240.L))+real(864585682418993385446400.L))-
-        real(839883234349879288719360.L))+real(419941617174939644359680.L))-
-        real(85300640988659615260560.L))/real(43103480149582061836351725.L);
-      _C4x[89] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*((-real(14274538625341440.L)*_n-
-        real(21343252110508800.L))*_n-real(32551079991252480.L))-
-        real(50747404089473280.L))-real(81079762642457600.L))-
-        real(133162564816981760.L))-real(225641748677005824.L))-
-        real(396262261490943232.L))-real(725296576014782464.L))-
-        real(1393576282060757760.L))-real(2837216312433839616.L))-
-        real(6198328401867297024.L))-real(14789250483252317184.L))-
-        real(39557611146245629696.L))-real(123628669481617000960.L))-
-        real(485955931264974691584.L))-real(2818050389683096881152.L))-
-        real(42543419048702717997824.L))+real(541899355639730636782080.L))-
-        real(1858406998471881744902400.L))+real(2851182558714063901178880.L))-
-        real(1882911600847078451838720.L))-real(61756120172785241817600.L))+
-        real(734897830056144377629440.L))-real(278867480155233357582600.L))/
-        real(129310440448746185509055175.L);
-      _C4x[90] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*((-real(63272655802122240.L)*_n-
-        real(97514239231672320.L))*_n-real(153883215408742400.L))-
-        real(249379662286651392.L))-real(416505325937147904.L))-
-        real(720053843215040512.L))-real(1295574605803765760.L))-
-        real(2443059370299097088.L))-real(4872274637860159488.L))-
-        real(10403723182808711168.L))-real(24198789550791016448.L))-
-        real(62897054614224273408.L))-real(190266399892582350848.L))-
-        real(720263541748219363328.L))-real(3995286238793153855488.L))-
-        real(57131473147589926256640.L))+real(678471555924374059696128.L))-
-        real(2104505372891018930438144.L))+real(2700107586838745056985088.L))-
-        real(967748079961632347750400.L))-real(1102509261189934422343680.L))+
-        real(1227321630381247753175040.L))-real(395239169105825547632640.L))+
-        real(26246351073433727772480.L))/real(129310440448746185509055175.L);
-      _C4x[91] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*((-real(252522425678361600.L)*_n-
-        real(404540409892093440.L))*_n-real(667306280226658304.L))-
-        real(1138243609979499008.L))-real(2018368194099821568.L))-
-        real(3746012130808915456.L))-real(7341817097894551552.L))-
-        real(15378806133081463296.L))-real(35015980682664576000.L))-
-        real(88862392425594686976.L))-real(261612210224901236736.L))-
-        real(959767001045613806080.L))-real(5129687653822518578176.L))-
-        real(70076479488182086252032.L))+real(783832600852928646713344.L))-
-        real(2226130096779574334171648.L))+real(2409821757379709188303872.L))-
-        real(239150222073228853599744.L))-real(1494017625781889191065600.L))+
-        real(977216409599107430592000.L))-real(94909405739227845319680.L))-
-        real(18851868263271284344320.L))-real(21228666309394926874800.L))/
-        real(129310440448746185509055175.L);
-      _C4x[92] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*((-real(973495431253567488.L)*_n-
-        real(1641257265622900736.L))*_n-real(2873832677337503744.L))-
-        real(5261101932096516096.L))-real(10158025789064611840.L))-
-        real(20930633641192554496.L))-real(46796081238907090944.L))-
-        real(116359447866156716032.L))-real(334728929598291601408.L))-
-        real(1195619953343914549248.L))-real(6190862543882483095552.L))-
-        real(81327683923032432062464.L))+real(863934270537120264566784.L))-
-        real(2271442193347694086307840.L))+real(2096079424610442041903104.L))+
-        real(265875889944857000718336.L))-real(1544311105732929937156096.L))+
-        real(659123871408136075354112.L))-real(7393776218398452750336.L))+
-        real(130465103303238753423360.L))-real(122212111499827636439040.L))+
-        real(19136271448277532168480.L))/real(129310440448746185509055175.L);
-      _C4x[93] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*((-real(3840807064263579648.L)*_n-
-        real(6947503040769950208.L))*_n-real(13239954509886692352.L))-
-        real(26892807512740517376.L))-real(59180922678208880640.L))-
-        real(144571946003804580352.L))-real(407626441370380739584.L))-
-        real(1422659141802369662464.L))-real(7166776190652489263104.L))-
-        real(91005163358079412130304.L))+real(924313509896617986905088.L))-
-        real(2270947239939790397744640.L))+real(1802927901688480821940224.L))+
-        real(598127057836437928232448.L))-real(1454839332586740350071808.L))+
-        real(428226314172607749059072.L))-real(37289072743757418723328.L))+
-        real(209484673453844235836928.L))-real(93371862060784130374656.L))-
-        real(4154759572265185605120.L))-real(2214281940405786630960.L))/
-        real(129310440448746185509055175.L);
-      _C4x[94] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*((-real(16517156456001093632.L)*_n-
-        real(33127887155820871680.L))*_n-real(71891304803438116864.L))-
-        real(172906707481828655104.L))-real(478994355649219706880.L))-
-        real(1638064878248325431296.L))-real(8055227035135093325824.L))-
-        real(99285305747425816510464.L))+real(969476781942207048925184.L))-
-        real(2243439064506960248750080.L))+real(1544084416774299511996416.L))+
-        real(810475073455093316386816.L))-real(1321037679819531135795200.L))+
-        real(284344070234553422757888.L))-real(94216091717394767626240.L))+
-        real(222837426994882148728832.L))-real(57503509823823967862784.L))+
-        real(31293536043619139469312.L))-real(47935185269127583580160.L))+
-        real(11393792194349679912000.L))/real(129310440448746185509055175.L);
-      _C4x[95] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*((-real(84714001464288978432.L)*_n-real(200941415186676672256.L))*
-        _n-real(547998684961299804160.L))-real(1840489117213869504768.L))-
-        real(8859106670338174204416.L))-real(106351507021513312955136.L))+
-        real(1002924527198675185204224.L))-real(2200450490793923279355136.L))+
-        real(1321058042212741229261312.L))+real(942484193093322258059520.L))-
-        real(1183409147433759727179776.L))+real(201072798095806514069248.L))-
-        real(144042491577537801282048.L))+real(205482842661004182785280.L))-
-        real(41776119603145535204352.L))+real(63975308760281854704384.L))-
-        real(51746882357358674572800.L))+real(1868228623991352166656.L))+
-        real(530032146963507202728.L))/real(129310440448746185509055175.L);
-      _C4x[96] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(614135397419521059840.L)*_n-real(2029496796056565006336.L))*_n-
-        real(9583769587121662514176.L))-real(112374216799040651728896.L))+
-        real(1027330790585017514738688.L))-real(2149078090210374168113152.L))+
-        real(1130838635691375328041984.L))+real(1021253030445581493417984.L))-
-        real(1057337809042960081079296.L))+real(155632357157352456478720.L))-
-        real(178978008684414653428736.L))+real(179081461018233307498496.L))-
-        real(41258406674064609827840.L))+real(82777372390874374549504.L))-
-        real(43722680618064601416704.L))+real(14181450230461498120192.L))-
-        real(22747251805940995386368.L))+real(7056084237857907973616.L))/
-        real(129310440448746185509055175.L);
-      _C4x[97] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(10235580119040855076864.L)*_n-real(117504174823777438113024.L))*_n+
-        real(1044730268341507622493696.L))-real(2093700354938164863391488.L))+
-        real(969103139246444163197952.L))+real(1064823604916846067535616.L))-
-        real(947306142763111052445184.L))+real(132650370052616144983296.L))-
-        real(200231381396720892753920.L))+real(153384793406985951951616.L))-
-        real(48088534189377285843456.L))+real(89848698361989693047040.L))-
-        real(36467122299547148934144.L))+real(27762158605900621588224.L))-
-        real(29218970048938255928832.L))+real(2943279304805965294848.L))+
-        real(870499733657429153544.L))/real(129310440448746185509055175.L);
-      _C4x[98] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(1056674213554723884269568.L)*_n-
-        real(2037015865816681711632384.L))+real(831503687880225443905536.L))+
-        real(1085128663156891375435776.L))-real(853316935986419365412864.L))+
-        real(122565343760489227583488.L))-real(211139283993045649489920.L))+
-        real(131788142645403755872256.L))-real(57115718899333218009088.L))+
-        real(89641594514284024332288.L))-real(32760078772324259758080.L))+
-        real(38194619800476822208512.L))-real(28893806218509377961984.L))+
-        real(8831092330942177443840.L))-real(12363529263319048421376.L))+
-        real(4611444212679725565312.L))/real(129310440448746185509055175.L);
-      _C4x[99] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(714135758963408477853696.L)*_n+real(1090077500564781946573824.L))-
-        real(773726121568277926055936.L))+real(119635921376481383894016.L))-
-        real(214891046679826394757120.L))+real(114857184123263841731584.L))-
-        real(65723571174824953470976.L))+real(85695615809430471326720.L))-
-        real(32099511064053217691648.L))+real(44706355729364789949440.L))-
-        real(26823885157692190339072.L))+real(15411402899308282194944.L))-
-        real(17606310685717619955712.L))+real(2729933130679178224640.L))+
-        real(778760667879547712800.L))/real(129310440448746185509055175.L);
-      _C4x[100] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(120480286056717284327424.L)-real(706459247949592149282816.L)*_n)*
-        _n-real(213966319828151508709376.L))+real(102084407499395048906752.L))-
-        real(72848145868005195878400.L))+real(80247421404982120841216.L))-
-        real(33338585931827047395328.L))+real(47966681842274535825408.L))-
-        real(25032150605463492513792.L))+real(21123254785067415257088.L))-
-        real(19134104642702225584128.L))+real(6224608695707437572096.L))-
-        real(7414678232192469504000.L))+real(3160386894563310081600.L))/
-        real(129310440448746185509055175.L);
-      _C4x[101] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(92670063848109897812992.L)-real(210136488069104402829312.L)*_n)*
-        _n-real(78232536984927882131456.L))+real(74544736435560844379136.L))-
-        real(35503255021235290071040.L))+real(48944290218386746244096.L))-
-        real(24062787725474210482176.L))+real(25401405602815184352256.L))-
-        real(19104176304186263908352.L))+real(9927856472145816185856.L))-
-        real(11290183932260669184000.L))+real(2268610117420575237120.L))+
-        real(628988336798597909280.L))/real(129310440448746185509055175.L);
-      _C4x[102] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(69208318099843060432896.L)-real(81988009811609591316480.L)*_n)*
-        _n-real(37941510567141484167168.L))+real(48483596782281724133376.L))-
-        real(23870410298944703004672.L))+real(28255073925778446123008.L))-
-        real(18633694866097806934016.L))+real(13294244419840801177600.L))-
-        real(13055711138703215001600.L))+real(4627976316221046620160.L))-
-        real(4785265946199798743040.L))+real(2253263844142164228480.L))/
-        real(129310440448746185509055175.L);
-      _C4x[103] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(47206155369671896290048.L)-real(40273611851703196723712.L)*_n)*
-        _n-real(24235646318026101360640.L))+real(29927299192503385578752.L))-
-        real(18211267098451245590016.L))+real(16049867031414423308032.L))-
-        real(13716076945588947584000.L))+real(6976005034656670306560.L))-
-        real(7631058591415895892480.L))+real(1828722225001791732480.L))+
-        real(496659892475397059640.L))/real(129310440448746185509055175.L);
-      _C4x[104] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(30711479976291538214912.L)-
-        real(24932406073642308228096.L)*_n)*_n-real(17998624599329955245056.L))+
-        real(18133006616754891601920.L))-real(13875800189129263334400.L))+
-        real(9129713142486985297920.L))-real(9214753498037294423040.L))+
-        real(3545472475402409502720.L))-real(3266763146678944281600.L))+
-        real(1659947616321838074000.L))/real(129310440448746185509055175.L);
-      _C4x[105] = (_n*(_n*(_n*(_n*(_n*(_n*((real(19598298905831804524800.L)-
-        real(18007563017934550689792.L)*_n)*_n-real(13861414449459155004928.L))+
-        real(10972158532646516030208.L))-real(10044734273235796079616.L))+
-        real(5169616610118234979584.L))-real(5386361761267283360256.L))+
-        real(1466567355225799352064.L))+real(392310578701953226392.L))/
-        real(129310440448746185509055175.L);
-      _C4x[106] = (_n*(_n*(_n*(_n*(_n*((real(12461790289419602509824.L)-
-        real(13830379080573634625536.L)*_n)*_n-real(10458128276836454744064.L))+
-        real(6649800424078438268928.L))-real(6712477850991396667392.L))+
-        real(2774237839297767456768.L))-real(2330558536889172344832.L))+
-        real(1256685070887155093184.L))/real(129310440448746185509055175.L);
-      _C4x[107] = (_n*(_n*(_n*(_n*((real(273869977857081110016.L)-
-        real(367632485074535353344.L)*_n)*_n-real(259373075001239046144.L))+
-        real(136851540683345478144.L))-real(135864050075113980928.L))+
-        real(40734340002567411200.L))+real(10773207634081740848.L))/
-        real(4458980705129178810657075.L);
-      _C4x[108] = (_n*(_n*(_n*((real(39250680271724544.L)-
-        real(62311098358585344.L)*_n)*_n-real(39111918089431040.L))+
-        real(17175919641194496.L))-real(13397556821096448.L))+
-        real(7572676586130656.L))/real(1005860750085535486275.L);
-      _C4x[109] = (_n*(_n*((real(29942233233848832.L)-real(55137815989807104.L)*
-        _n)*_n-real(28441333182559232.L))+real(9190102048751104.L))+
-        real(2409387702333040.L))/real(1238878684468285019775.L);
-      _C4x[110] = (_n*((real(416718490812416.L)-real(901706506321920.L)*_n)*_n-
-        real(306118121340928.L))+real(179714891668416.L))/
-        real(30216553279714268775.L);
-      _C4x[111] = ((real(132451998132480.L)-real(386245198689792.L)*_n)*_n+
-        real(34487905553192.L))/real(21784026783049821675.L);
-      _C4x[112] = (real(1965206256.L)-real(3245452288.L)*_n)/
-        real(411259921521075.L);
-      _C4x[113] = real(594728.L)/real(456448303575.L);
-      _C4x[114] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(15423387840000.L)*_n+
-        real(24410637619200.L))+real(39434803868160.L))+real(65153154216960.L))+
-        real(110340019238400.L))+real(192053235456000.L))+
-        real(344628861401600.L))+real(639921380539392.L))+
-        real(1235017350364672.L))+real(2490791294853120.L))+
-        real(5284738109145600.L))+real(11895841861370880.L))+
-        real(28719961065309696.L))+real(75453625520695296.L))+
-        real(220073074435361280.L))+real(733576914784537600.L))+
-        real(2923827988926942720.L))+real(15073957631801126912.L))+
-        real(118707416350433874432.L))+real(2543730350366440166400.L))-
-        real(48754831715356769856000.L))+real(273027057605997911193600.L))-
-        real(778127114177094046901760.L))+real(1259824851524818933079040.L))-
-        real(1049854042937349110899200.L))+real(341202563954638461042240.L))/
-        real(166256280576959381368785225.L);
-      _C4x[115] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(211886621245440.L)*_n+
-        real(344887437219840.L))+real(574763649085440.L))+
-        real(983167619696640.L))+real(1731297510400000.L))+
-        real(3149502347491328.L))+real(5943830533705728.L))+
-        real(11697003233241088.L))+real(24156305750786048.L))+
-        real(52775086452480000.L))+real(123252527383179264.L))+
-        real(312010937963956224.L))+real(872814911428583424.L))+
-        real(2775016671927793664.L))+real(10479670211207680000.L))+
-        real(50780289975427934208.L))+real(372170816012745064448.L))+
-        real(7333480387871248242688.L))-real(127390015946351323533312.L))+
-        real(635932587591610041600000.L))-real(1591357707189244968099840.L))+
-        real(2270024964667011204495360.L))-real(1877386053252671351255040.L))+
-        real(839883234349879288719360.L))-real(157478106440602366634880.L))/
-        real(166256280576959381368785225.L);
-      _C4x[116] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(1733813683845120.L)*_n+
-        real(2921279796817920.L))+real(5060946682767360.L))+
-        real(9045535065481216.L))+real(16746859934144512.L))+
-        real(32275230929915904.L))+real(65147793225795584.L))+
-        real(138800500252639232.L))+real(315292150644946944.L))+
-        real(773949004450492416.L))+real(2091794676130424832.L))+
-        real(6397923634241298432.L))+real(23121664591616546816.L))+
-        real(106523751762883825664.L))+real(736201024205424003072.L))+
-        real(13531819665936818520064.L))-real(215978365469340356642816.L))+
-        real(968064633071900171415552.L))-real(2087961704390117193652224.L))+
-        real(2337518609963400750243840.L))-real(1068705911200620395243520.L))-
-        real(379637622956911381278720.L))+real(642263649796966514903040.L))-
-        real(209970808587469822179840.L))/real(166256280576959381368785225.L);
-      _C4x[117] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(real(11281902452101120.L)*_n+
-        real(19856137297704960.L))+real(36154474616020992.L))+
-        real(68431113868150784.L))+real(135438618199486464.L))+
-        real(282418738685630464.L))+real(626544546594914304.L))+
-        real(1498337078519113728.L))+real(3933696924152532992.L))+
-        real(11646021535115835392.L))+real(40564439417152315392.L))+
-        real(179149339145069217792.L))+real(1178575207609915322368.L))+
-        real(20423711902316282025984.L))-real(302998486839507258720256.L))+
-        real(1232898835414026959775744.L))-real(2300980896038842246311936.L))+
-        real(1930800622120958644467712.L))-real(33011967213644467937280.L))-
-        real(1241679575025538326558720.L))+real(920491222785935814881280.L))-
-        real(236623449925198189701120.L))+real(9263418025917786272640.L))/
-        real(166256280576959381368785225.L);
-      _C4x[118] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(real(66291179380177920.L)*_n+
-        real(123502498083074048.L))+real(240276116509910016.L))+
-        real(491746535067949056.L))+real(1068834239585012736.L))+
-        real(2499083563092852736.L))+real(6399155309289157632.L))+
-        real(18423448180957145088.L))+real(62177905138903292928.L))+
-        real(264854349484989616128.L))+real(1670380106711262757888.L))+
-        real(27515284114781292705792.L))-real(383045286443291509330944.L))+
-        real(1429964615506826337017856.L))-real(2328915416924607663975424.L))+
-        real(1397452025538086337447936.L))+real(707050350167252187593728.L))-
-        real(1407832273022066247946240.L))+real(563521063617845378196480.L))+
-        real(18427913204876877649920.L))-real(3900386537228541588480.L))-
-        real(22264706483346258234240.L))/real(166256280576959381368785225.L);
-      _C4x[119] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(real(382965711284199424.L)*_n+
-        real(770977653102635008.L))+real(1645917529390166016.L))+
-        real(3773218865391958016.L))+real(9453272621815267328.L))+
-        real(26562303451622639616.L))+real(87219647588387999744.L))+
-        real(360033595760694302720.L))+real(2188814336113346027520.L))+
-        real(34495902320421639071744.L))-real(454138552156337199714304.L))+
-        real(1569987468301227912050688.L))-real(2250966977888217204998144.L))+
-        real(891526076637315135686656.L))+real(1131859061537723437191168.L))-
-        real(1245402071256865660020736.L))+real(232185728777560185528320.L))+
-        real(25165972266291981379584.L))+real(146473646308211550203904.L))-
-        real(95078987762585607997440.L))+real(11213611294532057066880.L))/
-        real(166256280576959381368785225.L);
-      _C4x[120] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(real(2355597954345252864.L)*_n+
-        real(5306628405977763840.L))+real(13041221262183229440.L))+
-        real(35865931381437005824.L))+real(114956423420358236160.L))+
-        real(461587696109817409536.L))+real(2716987595157332969472.L))+
-        real(41183405552573615235072.L))-real(516027721640714382116864.L))+
-        real(1665285424112185919016960.L))-real(2118667194899511313913856.L))+
-        real(463862759634883188572160.L))+real(1332726183954882242140160.L))-
-        real(994736282435457627426816.L))+real(54441341804372914800640.L))-
-        real(71905863118601554911232.L))+real(201133635951871102040064.L))-
-        real(50241500786793155997696.L))-real(6308451268908771612672.L))-
-        real(4098232231145931379200.L))/real(166256280576959381368785225.L);
-      _C4x[121] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(real(17098913794908082176.L)*_n+real(46134404084977125376.L))+
-        real(144720746208363184128.L))+real(566985526960805689344.L))+
-        real(3242871776626640629760.L))+real(47479940168196059703296.L))-
-        real(569261760283941813755904.L))+real(1726666467712281622517760.L))-
-        real(1962921565983217717047296.L))+real(121242993676359938869248.L))+
-        real(1395172683285044179582976.L))-real(757402581415371604199424.L))-
-        real(7804285406736951939072.L))-real(162279076537018804213760.L))+
-        real(179472887010351527534592.L))-real(15854994877038181853184.L))+
-        real(35598970218247026855936.L))-real(41852843364695828871168.L))+
-        real(7711742512194257771136.L))/real(166256280576959381368785225.L);
-      _C4x[122] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(real(175932069921886992896.L)*_n+real(674224356017709817856.L))+
-        real(3758175988521507276288.L))+real(53341040498023015910400.L))-
-        real(614706974856303979752960.L))+real(1762769154763009954314240.L))-
-        real(1801403281533153772249600.L))-real(145529063466538972552192.L))+
-        real(1378722173338312469162496.L))-real(564551951692855483019264.L))-
-        real(6976131587718032198144.L))-real(216185514334708864533504.L))+
-        real(133788882241089836597760.L))-real(14883806111752805799936.L))+
-        real(70236969349664605146624.L))-real(37558563751040750939136.L))-
-        real(1190387835225122612736.L))-real(577285471180383782208.L))/
-        real(166256280576959381368785225.L);
-      _C4x[123] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(4257384430093558022144.L)*_n+real(58755135352811110797312.L))-
-        real(653307147328584716083200.L))+real(1780223143564599083151360.L))-
-        real(1643767703459943581859840.L))-real(349748860251661508915200.L))+
-        real(1320730746669392228769792.L))-real(418639756822354187882496.L))+
-        real(21385306082083744088064.L))-real(237075054747228085907456.L))+
-        real(91878258712461689954304.L))-real(32268939335735401205760.L))+
-        real(83452509226462081499136.L))-real(24544611660129055617024.L))+
-        real(13444528204945543028736.L))-real(21054126943541691224064.L))+
-        real(5171959329612868977408.L))/real(166256280576959381368785225.L);
-      _C4x[124] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(1784021138885207529431040.L)-real(685970634918942781599744.L)*
-        _n)*_n-real(1494945320904017106948096.L))-
-        real(504258247076960377552896.L))+real(1243456478552992527831040.L))-
-        real(312593215380001079599104.L))+real(57674736325606682161152.L))-
-        real(235909959094226612944896.L))+real(62412061285611365371904.L))-
-        real(53707790367761437974528.L))+real(81041501347448354549760.L))-
-        real(17683931620331725012992.L))+real(29772079621946350424064.L))-
-        real(24057332146516405395456.L))+real(771488169740602503168.L))+
-        real(240936001891833529344.L))/real(166256280576959381368785225.L);
-      _C4x[125] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(1357135428823881153355776.L)*_n-real(619993760047485238751232.L))*
-        _n+real(1159678825439692254855168.L))-real(237545533065498653413376.L))+
-        real(92448223283311194480640.L))-real(222429070521524100132864.L))+
-        real(45294582361086188748800.L))-real(71880302971566403686400.L))+
-        real(71286556310080704208896.L))-real(18201204787742735216640.L))+
-        real(40601988695871336824832.L))-real(20409141195442082893824.L))+
-        real(7244415426799040372736.L))-real(11799790075845426966528.L))+
-        real(3560892380901363191040.L))/real(166256280576959381368785225.L);
-      _C4x[126] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(1076448934906472409118720.L)*_n-real(185548840598543086510080.L))+
-        real(121883495804173713770496.L))-real(203364471661709466505216.L))+
-        real(37626881204170271250432.L))-real(84442615990512135520256.L))+
-        real(59862841522277907769344.L))-real(23261547619129516290048.L))+
-        real(45148586339150679504896.L))-real(16733921813601069342720.L))+
-        real(15336057170869389674496.L))-real(15494731005672544948224.L))+
-        real(1311033933917763901440.L))+real(406742200072498080000.L))/
-        real(166256280576959381368785225.L);
-      _C4x[127] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(144999955520959822282752.L)*_n-real(182819205307386653790208.L))+
-        real(36265912363576915795968.L))-real(91538426742912616329216.L))+
-        real(49676263686196403011584.L))-real(30007360864412334657536.L))+
-        real(45107679970428656738304.L))-real(15208913191480066551808.L))+
-        real(22033053146603491901440.L))-real(15174606815537292103680.L))+
-        real(4813095418531485818880.L))-real(7191729762838616862720.L))+
-        real(2532530840105454531840.L))/real(166256280576959381368785225.L);
-      _C4x[128] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(38669172193378346979328.L)*_n-real(94242807079707850416128.L))+
-        real(41806794187103815397376.L))-real(36574082083677166403584.L))+
-        real(42471896890389454524416.L))-real(15816943641348566114304.L))+
-        real(26305503336956956192768.L))-real(13786980635743277957120.L))+
-        real(9230326727696393195520.L))-real(10324616450702228398080.L))+
-        real(1341323234232394936320.L))+real(398746919787171701760.L))/
-        real(166256280576959381368785225.L);
-      _C4x[129] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(36358165736989723385856.L)*_n-real(42024245141348829499392.L))+
-        real(38769283601188777721856.L))-real(17832530990951250980864.L))+
-        real(28296523278293164105728.L))-real(12755580054593512001536.L))+
-        real(13308567320059057192960.L))-real(11074656958634213683200.L))+
-        real(3544351093506972672000.L))-real(4679705767716804464640.L))+
-        real(1856487183525513665280.L))/real(166256280576959381368785225.L);
-      _C4x[130] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(34961875576232693810688.L)*_n-real(20500376327075499659264.L))+
-        real(28588870662014648326656.L))-real(12510306510186250509312.L))+
-        real(16416302285680224857600.L))-real(10825554949776351848448.L))+
-        real(6203108912328070414848.L))-real(7141416231355722150912.L))+
-        real(1210039267821848335872.L))+real(347929149053787174720.L))/
-        real(166256280576959381368785225.L);
-      _C4x[131] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(27807481879669030633472.L)*
-        _n-real(12996334083051604891648.L))+real(18419615947032059203584.L))-
-        real(10399912448169498937344.L))+real(8784819036492296675328.L))-
-        real(8151761375079420966912.L))+real(2745351352566564876288.L))-
-        real(3207045221167399299072.L))+real(1397543922868227894144.L))/
-        real(166256280576959381368785225.L);
-      _C4x[132] = (_n*(_n*(_n*(_n*(_n*(_n*(real(19451667812668025489408.L)*_n-
-        real(10175337301239971131392.L))+real(10949542328618408957952.L))-
-        real(8402323186343432822784.L))+real(4488136881866794100736.L))-
-        real(5113243688000272011264.L))+real(1043166858801298896896.L))+
-        real(292560752143799147008.L))/real(166256280576959381368785225.L);
-      _C4x[133] = (_n*(_n*(_n*(_n*(_n*(real(33326152373781835776.L)*_n-
-        real(22182225700218402816.L))+real(16468539213228613632.L))-
-        real(16188661697554925568.L))+real(5800677560629563392.L))-
-        real(6077685110278166528.L))+real(2855456530016678016.L))/
-        real(440998091716072629625425.L);
-      _C4x[134] = (_n*(_n*(_n*(_n*(real(1743899320985515008.L)*_n-
-        real(1476206937214611456.L))+real(769465150290668544.L))-
-        real(851356787711113216.L))+real(199443555472139264.L))+
-        real(54887670894962048.L))/real(37504236538903537416825.L);
-      _C4x[135] = (_n*(_n*(_n*(real(28150215791353856.L)*_n-
-        real(28391775516788736.L))+real(10815834865864704.L))-
-        real(10325524592973824.L))+real(5156944760482944.L))/
-        real(1013628014564960470725.L);
-      _C4x[136] = (_n*(_n*(real(135967115813947392.L)*_n-
-        real(145018936369369088.L))+real(37812934392010752.L))+
-        real(10255361879519744.L))/real(8430418365040280988225.L);
-      _C4x[137] = (_n*(real(245769011032064.L)*_n-real(216898146789376.L))+
-        real(113908615347072.L))/real(28008034435349770725.L);
-      _C4x[138] = (real(322327509504.L)*_n+real(86419033792.L))/
-        real(85130803754862525.L);
-      _C4x[139] = real(4519424.L)/real(1369344910725.L);
-      _C4x[140] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*((-real(1509229117440.L)*_n-
-        real(2673546024960.L))*_n-real(4867128668160.L))-real(9131587799040.L))-
-        real(17715602432000.L))-real(35679223298048.L))-real(74950862671872.L))-
-        real(165169493665792.L))-real(384543217451008.L))-
-        real(954289234483200.L))-real(2553253862928384.L))-
-        real(7477386312861696.L))-real(24471446114820096.L))-
-        real(92221097858627584.L))-real(419186808448307200.L))-
-        real(2489969642182944768.L))-real(22870832268939640832.L))-
-        real(580347368824343386112.L))+real(13430896249934804078592.L))-
-        real(93270112846769472768000.L))+real(343234015276111659786240.L))-
-        real(772276534371251234519040.L))+real(1086907715041020255989760.L))-
-        real(839883234349879288719360.L))+real(262463510734337277724800.L))/
-        real(203202120705172577228515275.L);
-      _C4x[141] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*((-real(30080573890560.L)*_n-
-        real(55401635266560.L))*_n-real(105354433372160.L))-
-        real(207639744577536.L))-real(426043293130752.L))-
-        real(915086349484032.L))-real(2071448988229632.L))-
-        real(4984142127562752.L))-real(12887852831924224.L))-
-        real(36339334049120256.L))-real(114001127022698496.L))-
-        real(409670134959210496.L))-real(1764663169835360256.L))-
-        real(9859273734704185344.L))-real(84407455749151137792.L))-
-        real(1974269262957499318272.L))+real(41544866816528857571328.L))-
-        real(258005858825908088225792.L))+real(832715567495957852872704.L))-
-        real(1611707549992176489431040.L))+real(1944992753231299405455360.L))-
-        real(1435342245700103304560640.L))+real(592858753658738321448960.L))-
-        real(104985404293734911089920.L))/real(203202120705172577228515275.L);
-      _C4x[142] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*((-real(356377645240320.L)*_n-
-        real(689149620418560.L))*_n-real(1385236399480832.L))-
-        real(2909595558692864.L))-real(6427965023023104.L))-
-        real(15059867984533504.L))-real(37817587481411584.L))-
-        real(103237671469836288.L))-real(312430825227128832.L))-
-        real(1078470603387942912.L))-real(4439544762234150912.L))-
-        real(23556259347618629632.L))-real(190037546553915977728.L))-
-        real(4146855804991892772864.L))+real(80331819782914612412416.L))-
-        real(450652320071960341981184.L))+real(1275660693756579111776256.L))-
-        real(2051693762328003682301952.L))+real(1805709384713456992788480.L))-
-        real(535540029763814536366080.L))-real(504449992148224712110080.L))+
-        real(548654372903481516779520.L))-real(163653718457880890816640.L))/
-        real(203202120705172577228515275.L);
-      _C4x[143] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*((-real(3388311204741120.L)*_n-
-        real(6978286282539008.L))*_n-real(15090843503476736.L))-
-        real(34542093221462016.L))-real(84556478627332096.L))-
-        real(224440130522054656.L))-real(658439360351158272.L))-
-        real(2195396955955560448.L))-real(8691703876623351808.L))-
-        real(44117722079536939008.L))-real(338173853971207733248.L))-
-        real(6949060480140715589632.L))+real(125192508635260946202624.L))-
-        real(640893571248497898684416.L))+real(1601921181227197633675264.L))-
-        real(2116066947487359353389056.L))+real(1168493691452395189747712.L))+
-        real(505279059817973774090240.L))-real(1174864257822579831521280.L))+
-        real(681945843262682981498880.L))-real(145614430723198885969920.L))+
-        real(1950193268614270794240.L))/real(203202120705172577228515275.L);
-      _C4x[144] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*((-real(29783676799279104.L)*_n-real(66783770293413888.L))*
-        _n-real(159847560838557696.L))-real(413946427279620096.L))-
-        real(1181749374200414208.L))-real(3822568817823041536.L))-
-        real(14627176912157691904.L))-real(71427768325991913472.L))-
-        real(523603662060395241472.L))-real(10207419868634363848704.L))+
-        real(172465203279918671990784.L))-real(813073050770341051987968.L))+
-        real(1808841542201733751455744.L))-real(1946718201588498158585856.L))+
-        real(458533006919580010442752.L))+real(1136573462746409662048256.L))-
-        real(1136290520034443223654400.L))+real(285779625762501664561152.L))+
-        real(56843894229522049585152.L))+real(9157429261319184599040.L))-
-        real(21289609849039122837120.L))/real(203202120705172577228515275.L);
-      _C4x[145] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*((-real(269451846663593984.L)*_n-real(682649077269381120.L))*_n-
-        real(1902332600302673920.L))-real(5990518270476550144.L))-
-        real(22243518881532764160.L))-real(104972018046645846016.L))-
-        real(739735758189559226368.L))-real(13763541120759336173568.L))+
-        real(219624425025241531817984.L))-real(961132382054108943400960.L))+
-        real(1917663819062625474011136.L))-real(1663701415234432596377600.L))-
-        real(140417044513105697792000.L))+real(1378636532210118154960896.L))-
-        real(819197161807891380183040.L))+real(2561130794785129398272.L))-
-        real(1394081185120366288896.L))+real(148508630588504702337024.L))-
-        real(73168990344762670030848.L))+real(6656094416792185102080.L))/
-        real(203202120705172577228515275.L);
-      _C4x[146] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*((-real(2831187952337965056.L)*_n-real(8704297725028550656.L))*_n-
-        real(31463779835313553408.L))-real(144028402139220916224.L))-
-        real(979868397825624944640.L))-real(17487099875172234897408.L))+
-        real(265079166778857997934592.L))-real(1084267980991470975293440.L))+
-        real(1953524551249217124233216.L))-real(1343493318122186827696128.L))-
-        real(583937400532039706034176.L))+real(1376371556895501754599424.L))-
-        real(491595989847575029444608.L))-real(81097430953600769648640.L))-
-        real(132514574679631879053312.L))+real(171839973101469484492800.L))-
-        real(21090545893459680153600.L))-real(5177904446523687094272.L))-
-        real(4984298303190241370496.L))/real(203202120705172577228515275.L);
-      _C4x[147] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((-real(42164554818087878656.L)*_n-real(187794586344044363776.L))*_n-
-        real(1237820389692004302848.L))-real(21276921629106257920000.L))+
-        real(307912188999861753282560.L))-real(1184204656026050936176640.L))+
-        real(1938326853499561091072000.L))-real(1028442679209437130784768.L))-
-        real(884922170676224156041216.L))+real(1251351047786572668207104.L))-
-        real(245742882447295612911616.L))-real(46975561981181028335616.L))-
-        real(217221353375111366901760.L))+real(119366160036174220230656.L))+
-        real(3304399308580991860736.L))+real(40500018545262944976896.L))-
-        real(35786615001180827090944.L))+real(5298496107578096109568.L))/
-        real(203202120705172577228515275.L);
-      _C4x[148] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(1508191457506470068224.L)*_n-real(25057490773531995082752.L))*_n+
-        real(347661023376368060620800.L))-real(1263676145041214994984960.L))+
-        real(1889104624799544520458240.L))-real(739197454803586327859200.L))-
-        real(1072931463723461916024832.L))+real(1079883134776675908489216.L))-
-        real(90378562900263442939904.L))+real(28821057507252135817216.L))-
-        real(240406627876557011165184.L))+real(59353392085704620789760.L))-
-        real(14369290558376752889856.L))+real(71816811073014796529664.L))-
-        real(25207245399451801706496.L))-real(2330460677832194912256.L))-
-        real(1262801308417546560768.L))/real(203202120705172577228515275.L);
-      _C4x[149] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(384157060738624636698624.L)*_n-real(1325640286490171952168960.L))+
-        real(1818375681717492525907968.L))-real(483886805722631273644032.L))-
-        real(1177733879671663761244160.L))+real(903391730055772263645184.L))-
-        real(6722064289967832809472.L))+real(104499992701792283918336.L))-
-        real(222632457050411308171264.L))+real(20808095332678201540608.L))-
-        real(47175661879102651023360.L))+real(74747346957226768269312.L))-
-        real(10613075846527693701120.L))+real(14633979157653783674880.L))-
-        real(19097413224122007011328.L))+real(3833716971278880569856.L))/
-        real(203202120705172577228515275.L);
-      _C4x[150] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(1735035615479764409491456.L)*_n-real(263908522000477623406592.L))-
-        real(1224009998714426275643392.L))+real(741587925728620980883456.L))+
-        real(27786928928082644623360.L))+real(163385167394187748470784.L))-
-        real(186124748954937563709440.L))+real(6335275210711645327360.L))-
-        real(75448932541388953214976.L))+real(61026427708877107671040.L))-
-        real(7950184245844838531072.L))+real(32166351408222650945536.L))-
-        real(18840415003374022467584.L))-real(433087043016453066752.L))-
-        real(198249161220521286400.L))/real(203202120705172577228515275.L);
-      _C4x[151] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(602017899186674245435392.L)-real(1230565698081099411652608.L)*
-        _n)*_n+real(31742011530137720356864.L))+
-        real(202135102848916822491136.L))-real(145782200355059610058752.L))+
-        real(9035714370561142685696.L))-real(92139198992304170696704.L))+
-        real(43388306747663045296128.L))-real(15380367166228461551616.L))+
-        real(40940599489643849318400.L))-real(12832236640446745116672.L))+
-        real(7000769552131186556928.L))-real(11083009183419288944640.L))+
-        real(2772354835694146913280.L))/real(203202120705172577228515275.L);
-      _C4x[152] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(18443598179278392803328.L)*_n+real(223119117407864259923968.L))-
-        real(109451968063979174371328.L))+real(21074572530029275508736.L))-
-        real(97577678435877587943424.L))+real(28954805728690295607296.L))-
-        real(26858596718327496105984.L))+real(41168866374346514771968.L))-
-        real(9204440533975142973440.L))+real(16333420244126310420480.L))-
-        real(13150311523176015175680.L))+real(386220598307148165120.L))+
-        real(127630062479153122560.L))/real(203202120705172577228515275.L);
-      _C4x[153] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(36542158751968925810688.L)-real(80260892944829572005888.L)*_n)*
-        _n-real(94824240932929013661696.L))+real(20078509324456305229824.L))-
-        real(37760761316771589144576.L))+real(36385580269011635830784.L))-
-        real(9783612234194463408128.L))+real(23102624962723027025920.L))-
-        real(11175987276193467678720.L))+real(4206925306002343034880.L))-
-        real(6898184321561910558720.L))+real(2041859227186034403840.L))/
-        real(203202120705172577228515275.L);
-      _C4x[154] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(16488890321654728691712.L)-real(87208333471391658008576.L)*_n)*
-        _n-real(45809077918610146557952.L))+real(29949622426063107780608.L))-
-        real(13431745842237051445248.L))+real(26106057096864886214656.L))-
-        real(9028423369382465945600.L))+real(9403007802980489736192.L))-
-        real(9192948985841019936768.L))+real(677059432404873154560.L))+
-        real(217097408346699412224.L))/real(203202120705172577228515275.L);
-      _C4x[155] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(24006981966100691419136.L)-
-        real(50445848972662873325568.L)*_n)*_n-real(18393271224818951716864.L))+
-        real(26014317062101581299712.L))-real(8333093675665032806400.L))+
-        real(13920631682915687989248.L))-real(8912605815657295183872.L))+
-        real(2933630693708410257408.L))-real(4545849550822027886592.L))+
-        real(1536715582489742764032.L))/real(203202120705172577228515275.L);
-      _C4x[156] = (_n*(_n*(_n*(_n*(_n*(_n*((real(24057954746398648850432.L)-
-        real(23282906528843549360128.L)*_n)*_n-real(9228903276836773351424.L))+
-        real(16819498333922089601024.L))-real(7935792550154883555328.L))+
-        real(6025113920482285697024.L))-real(6555338253120414478336.L))+
-        real(737733980594879916032.L))+real(226150779384719136640.L))/
-        real(203202120705172577228515275.L);
-      _C4x[157] = (_n*(_n*(_n*(_n*(_n*((real(1387947585015300440064.L)-
-        real(863101789858062770176.L)*_n)*_n-real(562629390413564534784.L))+
-        real(691828035753203171328.L))-real(533526894075147067392.L))+
-        real(171269495608139563008.L))-real(241448143622761439232.L))+
-        real(90837269845846427904.L))/real(15630932361936352094501175.L);
-      _C4x[158] = (_n*(_n*(_n*(_n*((real(866186923153107769344.L)-
-        real(569180110351342301184.L)*_n)*_n-real(510674583004295897088.L))+
-        real(322751588064965486592.L))-real(368356854557834498048.L))+
-        real(54205790186264983552.L))+real(16040043923515570816.L))/
-        real(15630932361936352094501175.L);
-      _C4x[159] = (_n*(_n*(_n*((real(1396004848943169536.L)-
-        real(1421006686098669568.L)*_n)*_n-real(1215708449370816512.L))+
-        real(399424955491647488.L))-real(508067845210292224.L))+
-        real(208618699335208448.L))/real(45838511325326545731675.L);
-      _C4x[160] = (_n*(_n*((real(587099505297537024.L)-
-        real(1029146611646324736.L)*_n)*_n-real(677087690482118656.L))+
-        real(120598133734467584.L))+real(34730953897228160.L))/
-        real(38405239218516835613025.L);
-      _C4x[161] = (_n*((real(6669452902088704.L)-real(19450166986039296.L)*_n)*
-        _n-real(7692029488013312.L))+real(3395611120122624.L))/
-        real(936713151671142332025.L);
-      _C4x[162] = ((real(665065126582272.L)-real(3230970624380928.L)*_n)*_n+
-        real(187530626331776.L))/real(239624294613548038425.L);
-      _C4x[163] = (real(304969986048.L)-real(650254352384.L)*_n)/
-        real(104048760144831975.L);
-      _C4x[164] = real(3108352.L)/real(4619256832179.L);
-      _C4x[165] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(257316433920.L)*_n+
-        real(517719121920.L))+real(1079888875520.L))+real(2344901558272.L))+
-        real(5327004626944.L))+real(12736747905024.L))+real(32288773197824.L))+
-        real(87593073311744.L))+real(257304652853248.L))+
-        real(831291955372032.L))+real(3017481838006272.L))+
-        real(12688897985462272.L))+real(64804014711468032.L))+
-        real(435954280786239488.L))+real(4577519948255514624.L))+
-        real(134273918482161762304.L))-real(3642180038828637802496.L))+
-        real(30178063178865856077824.L))-real(135801284304896352350208.L))+
-        real(388003669442561006714880.L))-real(743673699764908596203520.L))+
-        real(946493799700792758804480.L))-real(691668545935194708357120.L))+
-        real(209970808587469822179840.L))/real(240147960833385773088245325.L);
-      _C4x[166] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(_n*(real(2448085319680.L)*_n+
-        real(5198109163520.L))+real(11525969215488.L))+real(26842568769536.L))+
-        real(66124844138496.L))+real(173845436317696.L))+
-        real(493381392531456.L))+real(1534563265134592.L))+
-        real(5340421046632448.L))+real(21426460183052288.L))+
-        real(103810217665036288.L))+real(658009995531829248.L))+
-        real(6456836374888087552.L))+real(175253620876068274176.L))-
-        real(4345592270877235216384.L))+real(32427151313442065596416.L))-
-        real(129037235661357453574144.L))+real(319025239319439049965568.L))-
-        real(517338225923414675619840.L))+real(552611286781829312593920.L))-
-        real(374437107573939992494080.L))+real(145614430723198885969920.L))-
-        real(24702448069114096727040.L))/real(80049320277795257696081775.L);
-      _C4x[167] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(real(126342544613376.L)*_n+
-        real(287468136923136.L))+real(690492253741056.L))+
-        real(1766046625873920.L))+real(4863401337839616.L))+
-        real(14633956119281664.L))+real(49097734894362624.L))+
-        real(189134731009409024.L))+real(875564292614316032.L))+
-        real(5271908606120067072.L))+real(48789763316146642944.L))+
-        real(1237782058785010335744.L))-real(28355986371045703458816.L))+
-        real(192444170076031269666816.L))-real(680906092303007800320000.L))+
-        real(1443741944502735160098816.L))-real(1875053748152881983791104.L))+
-        real(1343511695807170839412736.L))-real(193459172246535662788608.L))-
-        real(539949162371116365987840.L))+real(468046384467424990617600.L))-
-        real(131313013420027566812160.L))/real(240147960833385773088245325.L);
-      _C4x[168] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(real(1794028353814528.L)*_n+real(4477787992637440.L))+
-        real(12006817381318656.L))+real(35088430518812672.L))+
-        real(113994359758389248.L))+real(423728832601341952.L))+
-        real(1884855122013618176.L))+real(10849655450029899776.L))+
-        real(95384760613357551616.L))+real(2280138071014243844096.L))-
-        real(48685051081419936268288.L))+real(303214926810544425320448.L))-
-        real(960908651560086026190848.L))+real(1745683879375284629487616.L))-
-        real(1743703775031953529733120.L))+real(548066899358913552171008.L))+
-        real(778581347098662674825216.L))-real(1038113314186880008175616.L))+
-        real(506123201445354637197312.L))-real(91348183248714829086720.L))-
-        real(1300128845742847196160.L))/real(240147960833385773088245325.L);
-      _C4x[169] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(real(24778942658555904.L)*_n+real(70552539374690304.L))+
-        real(222740581213900800.L))+real(802122872534925312.L))+
-        real(3444064036667289600.L))+real(19049960218061692928.L))+
-        real(160022902663762890752.L))+real(3628119050363403681792.L))-
-        real(72733278067356486193152.L))+real(418988509060386250137600.L))-
-        real(1197935997204518426308608.L))+real(1865910080228015497052160.L))-
-        real(1356505990642522145427456.L))-real(233007536131786922827776.L))+
-        real(1241420475659236427878400.L))-real(844924131779929731088384.L))+
-        real(113626972836874418761728.L))+real(62677515833029085700096.L))+
-        real(18314858522638369198080.L))-real(19643251038940843507200.L))/
-        real(240147960833385773088245325.L);
-      _C4x[170] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(real(386613842950619136.L)*_n+real(1353278838292938752.L))+
-        real(5629515198463213568.L))+real(30047212317907550208.L))+
-        real(242321110939347058688.L))+real(5239257310343406092288.L))-
-        real(99224653351858212175872.L))+real(532320801506965520580608.L))-
-        real(1382287083951432119222272.L))+real(1846228289058830433189888.L))-
-        real(880787032480011345461248.L))-real(801889054499842357264384.L))+
-        real(1273894517435658985144320.L))-real(448728411912169822289920.L))-
-        real(94514888074456720998400.L))-real(39503896548611063611392.L))+
-        real(141233626760411992948736.L))-real(56195714051354601127936.L))+
-        real(3934302941900094124032.L))/real(240147960833385773088245325.L);
-      _C4x[171] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(real(8489275551543689216.L)*_n+real(43876825675639291904.L))+
-        real(341077744362532929536.L))+real(7064728499067957608448.L))-
-        real(127064310092653389840384.L))+real(638621086696665877446656.L))-
-        real(1515120656017505324204032.L))+real(1732965433613042390859776.L))-
-        real(416659196788742022004736.L))-real(1138189677523088913465344.L))+
-        real(1080767835234722522890240.L))-real(128480464944752491167744.L))-
-        real(82732793120026949222400.L))-real(175466098285534552129536.L))+
-        real(135173325698368450232320.L))-real(2948124056344606605312.L))-
-        real(3006474860080610967552.L))-real(5321107044025797799936.L))/
-        real(240147960833385773088245325.L);
-      _C4x[172] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(454620391029060141056.L)*_n+real(9056118414265227608064.L))-
-        real(155383610610520554078208.L))+real(735429741143205140824064.L))-
-        real(1602560535867794634571776.L))+real(1564476643391685127503872.L))-
-        real(11762333435376197042176.L))-real(1288301898182646401531904.L))+
-        real(815252396397919916785664.L))+real(49782085725578505420800.L))+
-        real(24113307230430807588864.L))-real(229062705483133247488000.L))+
-        real(63342427682715150319616.L))+real(7875346407680037027840.L))+
-        real(43770882909168072261632.L))-real(30238057194890977804288.L))+
-        real(3678565453801950867456.L))/real(240147960833385773088245325.L);
-      _C4x[173] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(821731396929669016010752.L)-real(183529127146933632196608.L)*_n)*
-        _n-real(1652332061873336752283648.L))+
-        real(1368738156318510239219712.L))+real(318138599568120510226432.L))-
-        real(1310184091339834383024128.L))+real(560408743594952306614272.L))+
-        real(110676205326983189168128.L))+real(134341126806557678608384.L))-
-        real(208091062685216436633600.L))+real(5645989597895597547520.L))-
-        real(26253275550930074501120.L))+real(68355826684718847762432.L))-
-        real(15371949150190859534336.L))-real(2452376969201300578304.L))-
-        real(1674403979534002762752.L))/real(240147960833385773088245325.L);
-      _C4x[174] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(1164631760887444407287808.L)-real(1672063719072874003365888.L)*
-        _n)*_n+real(573973535120174555987968.L))-
-        real(1252993307912317168222208.L))+real(350694770109091176448000.L))+
-        real(98240468623336356282368.L))+real(210067308553286879805440.L))-
-        real(152408252200864889012224.L))-real(13945195548260895227904.L))-
-        real(66685451163929648332800.L))+real(59814932081329384587264.L))-
-        real(2037325835146397974528.L))+real(16311186817173913534464.L))-
-        real(17076664527843759390720.L))+real(2868285736807542016000.L))/
-        real(240147960833385773088245325.L);
-      _C4x[175] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(764135057651395492102144.L)*_n-real(1152635155842632424554496.L))+
-        real(193854344540972493389824.L))+real(49470026438969445941248.L))+
-        real(245966578294613110013952.L))-real(93102146467331687186432.L))-
-        real(3436057585971318603776.L))-real(91209199540789553233920.L))+
-        real(37227347117157306253312.L))-real(5688296637058436366336.L))+
-        real(33399261936008523104256.L))-real(14057707417544877965312.L))-
-        real(1015737220237693829120.L))-real(500634805329813288960.L))/
-        real(240147960833385773088245325.L);
-      _C4x[176] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(85305679257713609146368.L)*_n-real(11089919412196939628544.L))+
-        real(250145458939405349093376.L))-real(45859244715211880300544.L))+
-        real(21781784366930411126784.L))-real(96387723577350541639680.L))+
-        real(17190616935572830224384.L))-real(20081999288689171398656.L))+
-        real(38292133581529026002944.L))-real(6870193956450861023232.L))+
-        real(7429188838123466588160.L))-real(10271644792234587095040.L))+
-        real(2174257397994122004480.L))/real(240147960833385773088245325.L);
-      _C4x[177] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(233644519885353150324736.L)*_n-real(15261470871563375230976.L))+
-        real(49510531225464097431552.L))-real(87596468125517391659008.L))+
-        real(6560735495028469833728.L))-real(35679820077785115115520.L))+
-        real(33283281055730385412096.L))-real(4796419217902489468928.L))+
-        real(17436845615871411953664.L))-real(10788199764266725097472.L))-
-        real(181727943171350962176.L))-real(79749383957434340352.L))/
-        real(240147960833385773088245325.L);
-      _C4x[178] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(72827313088752745316352.L)*_n-real(71814852403093401698304.L))+
-        real(5368140613167144763392.L))-real(46754774377127572733952.L))+
-        real(24324414120113464541184.L))-real(8630453428059493302272.L))+
-        real(23269141919886798487552.L))-real(7572481339215041593344.L))+
-        real(4107321939726699724800.L))-real(6543695339402962599936.L))+
-        real(1655621357111277760512.L))/real(240147960833385773088245325.L);
-      _C4x[179] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(10764550869353176596480.L)*_n-real(51670552302968450056192.L))+
-        real(16060470891565481099264.L))-real(15580877285327828877312.L))+
-        real(23999123493445142282240.L))-real(5417108632232330395648.L))+
-        real(9944129571696691937280.L))-real(7975828621818156875776.L))+
-        real(218993539526363807744.L))+real(75076309196665835520.L))/
-        real(240147960833385773088245325.L);
-      _C4x[180] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(826878773833583034368.L)*_n-
-        real(1747178392781595934720.L))+real(1635903775474357501952.L))-
-        real(454534917086792318976.L))+real(1111445221583379234816.L))-
-        real(521822207931571306496.L))+real(204781338760991342592.L))-
-        real(336821611116005621760.L))+real(98284255801221754880.L))/
-        real(18472920064106597929865025.L);
-      _C4x[181] = (_n*(_n*(_n*(_n*(_n*(_n*(real(1321660083498000748544.L)*_n-
-        real(660353884216987901952.L))+real(1270351981574471856128.L))-
-        real(416290641584376266752.L))+real(476368073420692180992.L))-
-        real(453631696169838714880.L))+real(29813236108711227392.L))+
-        real(9794743193350123008.L))/real(18472920064106597929865025.L);
-      _C4x[182] = (_n*(_n*(_n*(_n*(_n*(real(1260483950616081825792.L)*_n-
-        real(390902614476836814848.L))+real(720904661188272259072.L))-
-        real(435641120796265562112.L))+real(148340810697106948096.L))-
-        real(234920185317888671744.L))+real(77026888103827504128.L))/
-        real(18472920064106597929865025.L);
-      _C4x[183] = (_n*(_n*(_n*(_n*(real(79781508316395626496.L)*_n-
-        real(34630877306189807616.L))+real(29159418113056612352.L))-
-        real(30875112149841756160.L))+real(3081556390752739328.L))+
-        real(967480605650617344.L))/real(1679356369464236175442275.L);
-      _C4x[184] = (_n*(_n*(_n*(real(1205956028389326848.L)*_n-
-        real(871339038836637696.L))+real(283151198814568448.L))-
-        real(416899622605373440.L))+real(150586549927756800.L))/
-        real(45388009985519896633575.L);
-      _C4x[185] = (_n*(_n*(real(11679472316977152.L)*_n-
-        real(13107134511882240.L))+real(1711437269741568.L))+
-        real(518364816254464.L))/real(936713151671142332025.L);
-      _C4x[186] = (_n*(real(110139925594112.L)*_n-real(148869233901568.L))+
-        real(58325556617216.L))/real(21784026783049821675.L);
-      _C4x[187] = (real(16241983488.L)*_n+real(4782743552.L))/
-        real(9458978194984725.L);
-      _C4x[188] = real(139264.L)/real(63626127165.L);
-      _C4x[189] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*((-real(75441766400.L)*_n-real(175710732288.L))*_n-
-        real(429272596480.L))-real(1106910052352.L))-real(3035570503680.L))-
-        real(8938068705280.L))-real(28601819856896.L))-real(101068930744320.L))-
-        real(403050645028864.L))-real(1871306566205440.L))-
-        real(10610925144637440.L))-real(79758787337191424.L))-
-        real(942603850348625920.L))-real(31388708216609243136.L))+
-        real(976537588961176453120.L))-real(9399174293751323361280.L))+
-        real(49949897675364175577088.L))-real(172446075307804891873280.L))+
-        real(413870580738731740495872.L))-real(705461217168292739481600.L))+
-        real(832082461275422205542400.L))-real(582457722892795543879680.L))+
-        real(172917136483798677089280.L))/real(277093800961598968947975375.L);
-      _C4x[190] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*((-real(3111445069824.L)*_n-real(7812137615360.L))*_n-
-        real(20813588463616.L))-real(59386797490176.L))-
-        real(183618286911488.L))-real(624839756873728.L))-
-        real(2390402094858240.L))-real(10599374409695232.L))-
-        real(57101583220211712.L))-real(405287987384942592.L))-
-        real(4489836126200922112.L))-real(138925305943689789440.L))+
-        real(3973640791529667428352.L))-real(34708936019077243076608.L))+
-        real(164741891257750467641344.L))-real(498117873592110949072896.L))+
-        real(1022783619066980738007040.L))-real(1454817798960390360530944.L))+
-        real(1415263734134544203513856.L))-real(897201958244803073802240.L))+
-        real(332832984510168882216960.L))-real(54605411521199582238720.L))/
-        real(277093800961598968947975375.L);
-      _C4x[191] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*((-real(79854773207040.L)*_n-real(221557201502208.L))*_n-
-        real(664458787160064.L))-real(2186921930981376.L))-
-        real(8065158447366144.L))-real(34342247604879360.L))-
-        real(176863478347595776.L))-real(1193592132558192640.L))-
-        real(12491033020846571520.L))-real(362197501565686972416.L))+
-        real(9610829533367644323840.L))-real(76860505272133713199104.L))+
-        real(328055549161452697288704.L))-real(868808054727527240761344.L))+
-        real(1496676385184361931210752.L))-real(1640879598365711084093440.L))+
-        real(969024688235553160429568.L))+real(23877148888772985028608.L))-
-        real(533979875148923119730688.L))+real(401570231311182020935680.L))-
-        real(107910694196656317281280.L))/real(277093800961598968947975375.L);
-      _C4x[192] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*((-real(1787250441453568.L)*_n-real(5709575309230080.L))*_n-
-        real(20379043833577472.L))-real(83702291789512704.L))-
-        real(414148105847439360.L))-real(2672437640021671936.L))-
-        real(26585576168731181056.L))-real(727455323626338779136.L))+
-        real(18042943657392995303424.L))-real(133145498496082022236160.L))+
-        real(514617076983561465102336.L))-real(1197178585841772204654592.L))+
-        real(1707915227692879487959040.L))-real(1318158338653766295748608.L))+
-        real(89691221632280360386560.L))+real(890413412324178455953408.L))-
-        real(889018358625662489591808.L))+real(378175449066626671968256.L))-
-        real(57883997306116327342080.L))-real(2713312373724202844160.L))/
-        real(277093800961598968947975375.L);
-      _C4x[193] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*((-real(42928828177711104.L)*_n-real(170700156826812416.L))*_n-
-        real(814790242912436224.L))-real(5050491221818736640.L))-
-        real(48007950867778502656.L))-real(1246794276917594030080.L))+
-        real(29090434785150149591040.L))-real(199434240489355020599296.L))+
-        real(702576871985851397570560.L))-real(1440467539294701266141184.L))+
-        real(1677059961808671593201664.L))-real(751516848547125450768384.L))-
-        real(670205781189179909603328.L))+real(1172934321756483825172480.L))-
-        real(592914991760959746342912.L))+real(12500754256932686266368.L))+
-        real(55422264087350460547072.L))+real(24118332210881803059200.L))-
-        real(17862639793684335390720.L))/real(277093800961598968947975375.L);
-      _C4x[194] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((-real(1422100676438130688.L)*_n-real(8500178320434921472.L))*_n-
-        real(77540766521811271680.L))-real(1920646798052109058048.L))+
-        real(42385642600050273026048.L))-real(271563716140306721144832.L))+
-        real(877093742012769036664832.L))-real(1589447120644752308961280.L))+
-        real(1478221673842423284891648.L))-real(155653080079782230622208.L))-
-        real(1118563574177351578157056.L))+real(1020823612125358898282496.L))-
-        real(180659163925863690403840.L))-real(116635074141771809161216.L))-
-        real(72255196637290036199424.L))+real(129246359576356145070080.L))-
-        real(43246664653994957209600.L))+real(2261093644770169036800.L))/
-        real(277093800961598968947975375.L);
-      _C4x[195] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(115550504205888258048.L)*_n-real(2741123455591345029120.L))*_n+
-        real(57484180955459937107968.L))-real(345982057108095043371008.L))+
-        real(1029849926050158159593472.L))-real(1653101587809800741978112.L))+
-        real(1186567888404923198996480.L))+real(353863544783374359724032.L))-
-        real(1276990156691436608684032.L))+real(696718673211264264830976.L))+
-        real(76278710899184528523264.L))-real(28970856832476529295360.L))-
-        real(193729859975510248914944.L))+real(99474840531795795247104.L))+
-        real(7501096425097388359680.L))-real(735085987294951505920.L))-
-        real(5356452875714159063040.L))/real(277093800961598968947975375.L);
-      _C4x[196] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(73936074989479620771840.L)*_n-real(419941766920906498637824.L))+
-        real(1157359604143959839866880.L))-real(1647695718262972235120640.L))+
-        real(859747249493093165039616.L))+real(735946719885051968880640.L))-
-        real(1235985831377864921972736.L))+real(373610686613064993734656.L))+
-        real(152487453654084159012864.L))+real(113830676970719976357888.L))-
-        real(206464254778412687687680.L))+real(20221955931885327613952.L))+
-        real(4552689587597677166592.L))+real(45096720481873054138368.L))-
-        real(25389977312990587781120.L))+real(2568441412724467875840.L))/
-        real(277093800961598968947975375.L);
-      _C4x[197] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(1259284817770600319942656.L)*_n-
-        real(1590616063503911985741824.L))+real(535775086987426103033856.L))+
-        real(991225880849209726468096.L))-real(1084532801672530279792640.L))+
-        real(126438942000949104082944.L))+real(111503584749498775109632.L))+
-        real(216235718602758370754560.L))-real(145796975301985252933632.L))-
-        real(22856377227704232181760.L))-real(40959485398228434157568.L))+
-        real(61424721901577417392128.L))-real(7985188759441047289856.L))-
-        real(2073800978755465379840.L))-real(1908347945460918528000.L))/
-        real(277093800961598968947975375.L);
-      _C4x[198] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(236733498233124738826240.L)*_n+real(1138759225202582193438720.L))-
-        real(888034239400996557553664.L))-real(30076654325270488023040.L))+
-        real(20352360506274004598784.L))+real(255123334897451365564416.L))-
-        real(68856778755797536997376.L))-real(16722330759145001582592.L))-
-        real(80527607758667720949760.L))+real(42761672595454266703872.L))+
-        real(2216524642203430551552.L))+real(17800653167500568035328.L))-
-        real(15123716238901261107200.L))+real(2161746371167920230400.L))/
-        real(277093800961598968947975375.L);
-      _C4x[199] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(687450483950084219731968.L)*_n-real(108699568870896450797568.L))*
-        _n-real(76154908051131797340160.L))+real(243141411935960445616128.L))-
-        real(9874406845516828639232.L))+real(17352698496524266110976.L))-
-        real(93179112890473252651008.L))+real(15827310667347994214400.L))-
-        real(8170504585938830098432.L))+real(33123523730030976958464.L))-
-        real(9943416602613636136960.L))-real(1213914241674355802112.L))-
-        real(705473045033914902528.L))/real(277093800961598968947975375.L);
-      _C4x[200] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(201964962830957590609920.L)-real(155273019420878287405056.L)*_n)*
-        _n+real(20745527087238522863616.L))+real(56279576782152180695040.L))-
-        real(82287391605795603873792.L))-real(579614829333184512000.L))-
-        real(27647675396249369968640.L))+real(33259290835251846184960.L))-
-        real(2659419031482613628928.L))+real(8109191962481450287104.L))-
-        real(9422781656861865148416.L))+real(1715986744463414771712.L))/
-        real(277093800961598968947975375.L);
-      _C4x[201] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(26171083601417378201600.L)*_n+real(86270411167545844039680.L))-
-        real(59603899820817350918144.L))-real(2133488787948678414336.L))-
-        real(43641822730431468404736.L))+real(23500662442215146782720.L))-
-        real(3148888808728506138624.L))+real(18160457847254936715264.L))-
-        real(8563705923482740588544.L))-real(500786955277502251008.L))-
-        real(232488718992255086592.L))/real(277093800961598968947975375.L);
-      _C4x[202] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(7212441055062359277568.L)-
-        real(35610732121616972513280.L)*_n)*_n-real(50613726020626482724864.L))+
-        real(12363663748667145191424.L))-real(10472920633762596782080.L))+
-        real(22247510426871750721536.L))-real(4598743255868765110272.L))+
-        real(4290853001439697960960.L))-real(6148819626660560109568.L))+
-        real(1349360346075493441536.L))/real(277093800961598968947975375.L);
-      _C4x[203] = (_n*(_n*(_n*(_n*(_n*(_n*((real(5203700604330893901824.L)-
-        real(48900911314275175235584.L)*_n)*_n-real(19853106229379914530816.L))+
-        real(20239188691598173798400.L))-real(3124362673253052841984.L))+
-        real(10521302770356731510784.L))-real(6752195489944448794624.L))-
-        real(83165149124833312768.L))-real(35211092731689971712.L))/
-        real(277093800961598968947975375.L);
-      _C4x[204] = (_n*(_n*(_n*(_n*(_n*((real(1162731928529984815104.L)-
-        real(2103889244558006943744.L)*_n)*_n-real(411962859164558950400.L))+
-        real(1118176952494940225536.L))-real(372992867284225622016.L))+
-        real(201166926510657896448.L))-real(321812014233212157952.L))+
-        real(82058264093589848064.L))/real(21314907766276843765228875.L);
-      _C4x[205] = (_n*(_n*(_n*(_n*((real(1175732900060890726400.L)-
-        real(762577061907395641344.L)*_n)*_n-real(266356124826903248896.L))+
-        real(500719515075378610176.L))-real(400230461401841664000.L))+
-        real(10420824586550050816.L))+real(3664884159967540224.L))/
-        real(21314907766276843765228875.L);
-      _C4x[206] = (_n*(_n*(_n*((real(67522179001937297408.L)-
-        real(26979889106708070400.L)*_n)*_n-real(30955581145869975552.L))+
-        real(12533235212662341632.L))-real(20643526053379440640.L))+
-        real(5957931413328660480.L))/real(1937718887843349433202625.L);
-      _C4x[207] = (_n*(_n*((real(8937338642882297856.L)-
-        real(7264491379390939136.L)*_n)*_n-real(8331323368101773312.L))+
-        real(497573960000798720.L))+real(166567353005081600.L))/
-        real(576078588277752534195375.L);
-      _C4x[208] = (_n*((real(67893913511264256.L)-real(193468457828745216.L)*
-        _n)*_n-real(109001388295454720.L))+real(34903794537431040.L))/
-        real(14050697275067134980375.L);
-      _C4x[209] = ((real(330570665558016.L)-real(3670039933747200.L)*_n)*_n+
-        real(105796914356224.L))/real(326760401745747325125.L);
-      _C4x[210] = (real(118608642048.L)-real(339124158464.L)*_n)/
-        real(58423100616082125.L);
-      _C4x[211] = real(13087612928.L)/real(40785938165944125.L);
-      _C4x[212] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(_n*(real(38323224576.L)*_n+real(106018897920.L))+
-        real(312755748864.L))+real(993459437568.L))+real(3440313237504.L))+
-        real(13200839933952.L))+real(57378650849280.L))+
-        real(291568551723008.L))+real(1817840664313856.L))+
-        real(15102060903530496.L))+real(198424300204720128.L))+
-        real(7395814825812295680.L))-real(259593100386011578368.L))+
-        real(2845909544972571377664.L))-real(17431195962956999688192.L))+
-        real(70436261238071141597184.L))-real(202178157257426424954880.L))+
-        real(426412113488390278086656.L))-real(664218869087684856250368.L))+
-        real(738020965652983173611520.L))-real(499249476765253323325440.L))+
-        real(145614430723198885969920.L))/real(314039641089812164807705425.L);
-      _C4x[213] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(_n*(real(2356747960320.L)*_n+real(7255434461184.L))+
-        real(24284564029440.L))+real(89784958058496.L))+
-        real(374695538982912.L))+real(1820615840890880.L))+
-        real(10802487333224448.L))+real(84935704230494208.L))+
-        real(1049313565000859648.L))+real(36491613163230855168.L))-
-        real(1184051915039802654720.L))+real(11865845306533247188992.L))-
-        real(65532836008557589561344.L))+real(234787537460237138657280.L))-
-        real(585308729749358846672896.L))+real(1045871757777419981291520.L))-
-        real(1343707137464741778161664.L))+real(1213634476851572329938944.L))-
-        real(729338366057065724510208.L))+real(260477987877523473039360.L))-
-        real(41604123063771110277120.L))/real(314039641089812164807705425.L);
-      _C4x[214] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(real(95622952648704.L)*_n+real(341967649112064.L))+
-        real(1376125295001600.L))+real(6424438958456832.L))+
-        real(36472018729697280.L))+real(273026171921235968.L))+
-        real(3192592336066445312.L))+real(104342602239235325952.L))-
-        real(3153894263012104077312.L))+real(29116303580112019783680.L))-
-        real(145979963963411779289088.L))+real(465285502321503145820160.L))-
-        real(1001298660985214437687296.L))+real(1468489325205846830874624.L))-
-        real(1395955117828853601402880.L))+real(675429198673490273632256.L))+
-        real(160478392531439748907008.L))-real(509379176293823680610304.L))+
-        real(347303983836697964052480.L))-real(90443745790806761472000.L))/
-        real(314039641089812164807705425.L);
-      _C4x[215] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(real(3749725005152256.L)*_n+real(16886650371571712.L))+
-        real(92132322509324288.L))+real(659895955329908736.L))+
-        real(7343669488133341184.L))+real(226920745256900624384.L))-
-        real(6431206852000456114176.L))+real(55065655493504444923904.L))-
-        real(252233232939834397425664.L))+real(718219025096796909600768.L))-
-        real(1329749515211165535305728.L))+real(1551966380199111933034496.L))-
-        real(912968965357573027921920.L))-real(228147081855301138776064.L))+
-        real(909205858761418150510592.L))-real(750141836056627665960960.L))+
-        real(284895720074471395033088.L))-real(36659864960540340649984.L))-
-        real(3255974848469043412992.L))/real(314039641089812164807705425.L);
-      _C4x[216] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(real(193889231431008256.L)*_n+real(1334234851179495424.L))+
-        real(14195942025094234112.L))+real(416846581600799948800.L))-
-        real(11138888975916869353472.L))+real(88980190149058827911168.L))-
-        real(374531129899296507822080.L))+real(956626325385210376486912.L))-
-        real(1518242191729673590276096.L))+real(1347897413453936607625216.L))-
-        real(230026316312536969379840.L))-real(904464764416532329529344.L))+
-        real(1026658068930258334646272.L))-real(393851560165027623206912.L))-
-        real(43523529157238895149056.L))+real(43864780754260493074432.L))+
-        real(27478265387846026657792.L))-real(16159282581290808049664.L))/
-        real(314039641089812164807705425.L);
-      _C4x[217] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(24354651895482023936.L)*_n+real(682547908895860850688.L))-
-        real(17279401597770331586560.L))+real(129445585687353401802752.L))-
-        real(503266799659981826162688.L))+real(1157263510700160301137920.L))-
-        real(1565864711205645542490112.L))+real(973104725414398885625856.L))+
-        real(397646575408843958779904.L))-real(1187413586253403476459520.L))+
-        real(737481003260777950347264.L))-real(8123853036626178998272.L))-
-        real(101601905878894806827008.L))-real(95466743944136461123584.L))+
-        real(115557663439225632063488.L))-real(33401878015390745362432.L))+
-        real(1210074943683897360384.L))/real(314039641089812164807705425.L);
-      _C4x[218] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(174789494833237517664256.L)-real(24767165321852208807936.L)*_n)*
-        _n-real(630581566453052440838144.L))+real(1309469623921914849263616.L))-
-        real(1497878628689001121316864.L))+real(535490081916544262078464.L))+
-        real(853112635520440747425792.L))-real(1154977897325426578030592.L))+
-        real(352926388853612272943104.L))+real(159942760531815762493440.L))+
-        real(36232053680558848344064.L))-real(192285152806477456474112.L))+
-        real(68511348162877666099200.L))+real(12894588647206039846912.L))+
-        real(1279156929716178386944.L))-real(5229036853418211606528.L))/
-        real(314039641089812164807705425.L);
-      _C4x[219] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(1411523848449549596622848.L)-real(750796173889068810108928.L)*
-        _n)*_n-real(1347519277492177146478592.L))+
-        real(109812168713178043645952.L))+real(1117024747522877287301120.L))-
-        real(945902117389189685706752.L))+real(49121093927135074058240.L))+
-        real(134874280090906739081216.L))+real(181522242560836680810496.L))-
-        real(165489086005093264261120.L))-real(8712033594873663717376.L))-
-        real(2218106377444991172608.L))+real(44807732642953863102464.L))-
-        real(21258472128924072017920.L))+real(1794119540158754816000.L))/
-        real(314039641089812164807705425.L);
-      _C4x[220] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(1146200471619475550240768.L)*_n-real(261875871122117134123008.L))*
-        _n+real(1218326021822826050486272.L))-real(675475330509238721576960.L))-
-        real(123077088994828954632192.L))+real(18067816558988848267264.L))+
-        real(247445699944332096962560.L))-real(78715960977854018617344.L))-
-        real(30841053808481728200704.L))-real(53529437347574237364224.L))+
-        real(52723460871608094425088.L))-real(2681345414299398963200.L))-
-        real(1482440326242132819968.L))-real(2026986195987958431744.L))/
-        real(314039641089812164807705425.L);
-      _C4x[221] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(1201262920050208181059584.L)*_n-real(415750371721314383167488.L))-
-        real(179174664712868242391040.L))-real(108648055795350193569792.L))+
-        real(234348287961902755086336.L))-real(965884489933128204288.L))-
-        real(147469438483870777344.L))-real(85626748530084985438208.L))+
-        real(26558363620069875908608.L))+real(3415732906600992079872.L))+
-        real(18849221960713601286144.L))-real(13310900513910783737856.L))+
-        real(1637922831357138665472.L))/real(314039641089812164807705425.L);
-      _C4x[222] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(156547756038606249000960.L)*_n-real(203064063039653428592640.L))*
-        _n+real(175481801560763903508480.L))+real(37730562770338672803840.L))+
-        real(48662925765217370505216.L))-real(82633433398391259267072.L))-
-        real(38300106132776026112.L))-real(12943607418138637893632.L))+
-        real(31538668226661486428160.L))-real(6557382754233867042816.L))-
-        real(1184094358740381204480.L))-real(840882393298311512064.L))/
-        real(314039641089812164807705425.L);
-      _C4x[223] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(103839089292858941767680.L)*_n+real(37954623472046002667520.L))+
-        real(87921831512023599415296.L))-real(56914878314376772190208.L))-
-        real(8374621376916904476672.L))-real(34769447684571821244416.L))+
-        real(26884873922242517401600.L))-real(20105568363257266176.L))+
-        real(8802779476990155030528.L))-real(8579176685245715447808.L))+
-        real(1361485417850272382976.L))/real(314039641089812164807705425.L);
-      _C4x[224] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(106397118712333538426880.L)*_n-real(26353269446097441390592.L))+
-        real(1150308504748652232704.L))-real(47557283913553796923392.L))+
-        real(13774852237613426278400.L))-real(3525517425994784309248.L))+
-        real(18336362436941025116160.L))-real(6565849939978130292736.L))-
-        real(650950777347756261376.L))-real(343846103940597350400.L))/
-        real(314039641089812164807705425.L);
-      _C4x[225] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(19648756765982143283200.L)*
-        _n-real(47558967248843745787904.L))+real(2954409512541331914752.L))-
-        real(13819804139340561907712.L))+real(20188105575504579395584.L))-
-        real(2325477329569987428352.L))+real(4605313951944489828352.L))-
-        real(5733809212763759181824.L))+real(1104779249964513722368.L))/
-        real(314039641089812164807705425.L);
-      _C4x[226] = (_n*(_n*(_n*(_n*(_n*((-real(475664108904792457216.L)*_n-
-        real(24102154397918989123584.L))*_n+real(15522335200959713509376.L))-
-        real(2040948183275608735744.L))+real(10949172862437826756608.L))-
-        real(5581459902086741229568.L))-real(270354579134970068992.L))-
-        real(120320035327844352000.L))/real(314039641089812164807705425.L);
-      _C4x[227] = (_n*(_n*(_n*(_n*(_n*(real(681822016249028149248.L)*_n-
-        real(476134816118335864832.L))+real(1082746294884628430848.L))-
-        real(246222891562836688896.L))+real(208002135910993887232.L))-
-        real(305301130790091358208.L))+real(68772858650836893696.L))/
-        real(24156895468447089600592725.L);
-      _C4x[228] = (_n*(_n*(_n*(_n*(real(1019737540579528146944.L)*_n-
-        real(165420699690441637888.L))+real(526156322565434245120.L))-
-        real(346624209820278587392.L))-real(3068233984327942144.L))-
-        real(1253534193385357312.L))/real(24156895468447089600592725.L);
-      _C4x[229] = (_n*(_n*(_n*(real(20176394120014594048.L)*_n-
-        real(6848788448664354816.L))+real(3674985233203068928.L))-
-        real(5895747338098442240.L))+real(1511858300431564800.L))/
-        real(652889066714786205421425.L);
-      _C4x[230] = (_n*(_n*(real(227962473897000960.L)*_n-
-        real(181666859005771776.L))+real(4531352468717568.L))+
-        real(1623576417009664.L))/real(15924123578409419644425.L);
-      _C4x[231] = (_n*(real(87718379913216.L)*_n-real(144562380079104.L))+
-        real(41360414670848.L))/real(21784026783049821675.L);
-      _C4x[232] = (real(1221967478784.L)*_n+real(415240683520.L))/
-        real(2449875352501043775.L);
-      _C4x[233] = real(474546176.L)/real(302118060488475.L);
-      _C4x[234] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*((-real(34760294400.L)*_n-real(118491709440.L))*_n-
-        real(441537527808.L))-real(1828418224128.L))-real(8604321054720.L))-
-        real(47503022489600.L))-real(323020552929280.L))-
-        real(2939487031656448.L))-real(42509504765493248.L))-
-        real(1753517071576596480.L))+real(68546576434357862400.L))-
-        real(843122890142601707520.L))+real(5845652038322038505472.L))-
-        real(27036140677239428087808.L))+real(90120468924131426959360.L))-
-        real(225301172310328567398400.L))+real(429805313330472959344640.L))-
-        real(623217704329185791049728.L))+real(659877569289726131699712.L))-
-        real(434129979795872455065600.L))+real(124812369191313330831360.L))/
-        real(350985481218025360667435475.L);
-      _C4x[235] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*((-real(1129750462464.L)*_n-real(4510936203264.L))*_n-
-        real(20401298079744.L))-real(107840823885824.L))-
-        real(699101085696000.L))-real(6034783977078784.L))-
-        real(82305636886380544.L))-real(3180072739478175744.L))+
-        real(115498324447845154816.L))-real(1307167271538917376000.L))+
-        real(8242040350467189374976.L))-real(34174581147113455878144.L))+
-        real(100350359991194994343936.L))-real(216289125417915424702464.L))+
-        real(346617188169736257536000.L))-real(410394750792967728922624.L))+
-        real(348900783762383931703296.L))-real(200664523994536601452544.L))+
-        real(69460796767339592810496.L))-real(10853249494896811376640.L))/
-        real(116995160406008453555811825.L);
-      _C4x[236] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*((-real(242559872925696.L)*_n-real(1232842657366016.L))*_n-
-        real(7655098394083328.L))-real(63009120421675008.L))-
-        real(815073208086560768.L))-real(29680741605785993216.L))+
-        real(1008180352205124009984.L))-real(10569860153082438483968.L))+
-        real(60990150631500930875392.L))-real(227728401268181083619328.L))+
-        real(588780361305740630032384.L))-real(1079965478015771222736896.L))+
-        real(1389129273798950573309952.L))-real(1163940517873974352805888.L))+
-        real(449052761897074784468992.L))+real(244716027320752308486144.L))-
-        real(477310111119630496956416.L))+real(302926252568675446423552.L))-
-        real(77058071413767360774144.L))/real(350985481218025360667435475.L);
-      _C4x[237] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((-real(20724700514615296.L)*_n-real(163367289792495616.L))*_n-
-        real(2014034275887742976.L))-real(69485076333488766976.L))+
-        real(2219880423724672876544.L))-real(21686614110547220627456.L))+
-        real(115172823355485820289024.L))-real(388997571671190642098176.L))+
-        real(885972811022257025449984.L))-real(1366729549160097771421696.L))+
-        real(1333068227773522881019904.L))-real(560882818651309438140416.L))-
-        real(436607606765714969460736.L))+real(877244105410187733499904.L))-
-        real(628812942778464443826176.L))+real(216374974876285638017024.L))-
-        real(22887465601498869661696.L))-real(3376566509523452428288.L))/
-        real(350985481218025360667435475.L);
-      _C4x[238] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(4148491175365443584.L)*_n-real(136210816196921524224.L))*_n+
-        real(4112824759486986059776.L))-real(37633302048158915231744.L))+
-        real(184894111872173532512256.L))-real(567243239338076522676224.L))+
-        real(1138428474799567563390976.L))-real(1454713993026997920989184.L))+
-        real(966793751900622470250496.L))+real(174029480894057554640896.L))-
-        real(995585475736398052982784.L))+real(856546323054646419521536.L))-
-        real(244110150568943607087104.L))-real(71772293433957586305024.L))+
-        real(31837271636593607704576.L))+real(29165207244820718288896.L))-
-        real(14608224320142719680512.L))/real(350985481218025360667435475.L);
-      _C4x[239] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(6771994398722315255808.L)*_n-real(58302747011422546296832.L))+
-        real(266206116333677472382976.L))-real(744614091698941118644224.L))+
-        real(1316169824117630978490368.L))-real(1361700583434129969774592.L))+
-        real(456349226729114097942528.L))+real(757534446801672917221376.L))-
-        real(1105464800073373915807744.L))+real(480862003253177009307648.L))+
-        real(90901905554643183730688.L))-real(71344148263531542740992.L))-
-        real(109632774671083518296064.L))+real(101868967302095119056896.L))-
-        real(25900781590293357002752.L))+real(540046749060123131904.L))/
-        real(350985481218025360667435475.L);
-      _C4x[240] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(354709244620360674967552.L)*_n-real(907545477431171639410688.L))+
-        real(1410500412077264089382912.L))-real(1138293428627189882421248.L))-
-        real(59407750569307484979200.L))+real(1088607588403619225403392.L))-
-        real(908928944457705542647808.L))+real(95936055753985086717952.L))+
-        real(166861321871471921856512.L))+real(92765456209060809932800.L))-
-        real(178186628785300582694912.L))+real(43369812221643580768256.L))+
-        real(15100107637849452445696.L))+real(2933905239802040025088.L))-
-        real(5017498422402857861120.L))/real(350985481218025360667435475.L);
-      _C4x[241] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(1426804803851522574123008.L)*_n-real(840209013575262186504192.L))-
-        real(496630593742902415851520.L))+real(1184551272471290382909440.L))-
-        real(589542078691332115660800.L))-real(136900080555243530616832.L))+
-        real(61623966204081679106048.L))+real(216886379849209054494720.L))-
-        real(119065125638614892412928.L))-real(25502862224153972310016.L))-
-        real(9844425867149294174208.L))+real(43366505857368511741952.L))-
-        real(17785223467550245912576.L))+real(1245890264597720727552.L))/
-        real(350985481218025360667435475.L);
-      _C4x[242] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(1111177566917860746854400.L)-real(819912639586453998796800.L)*
-        _n)*_n-real(277464011665858253291520.L))-
-        real(204195189106138365296640.L))-real(92478054724920504483840.L))+
-        real(233967909492513279836160.L))-real(21723613312106936401920.L))-
-        real(25330937350536517124096.L))-real(62101812676567941251072.L))+
-        real(43539070724307021201408.L))+real(970509168689003102208.L))-
-        real(833029778145022574592.L))-real(2070875281419960221696.L))/
-        real(350985481218025360667435475.L);
-      _C4x[243] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(37501384436491852185600.L)*_n-real(156820502467363555246080.L))*_n-
-        real(210728061936941515407360.L))+real(172644828152490664919040.L))+
-        real(40249964162396108881920.L))+real(23949368029895259586560.L))-
-        real(82771509773019731984384.L))+real(12810088426684203139072.L))+
-        real(2670719123877110218752.L))+real(19414212169321490153472.L))-
-        real(11670099203835033550848.L))+real(1245027419534709293056.L))/
-        real(350985481218025360667435475.L);
-      _C4x[244] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(84800051272131839262720.L)-real(264705504861770549821440.L)*_n)*
-        _n+real(48103900366085214437376.L))+real(76320670505274655113216.L))-
-        real(64301844447342231552000.L))-real(9679446772873103409152.L))-
-        real(18268506848372367294464.L))+real(29020423728834874441728.L))-
-        real(3862373396634494042112.L))-real(1026769083456114130944.L))-
-        real(926864222959704178688.L))/real(350985481218025360667435475.L);
-      _C4x[245] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(17040329021547538808832.L)*_n+real(104102126249085780361216.L))-
-        real(28787312733256159330304.L))-real(7804799008006364725248.L))-
-        real(39706277843021940654080.L))+real(20126041445904469196800.L))+
-        real(1353487132347120746496.L))+real(9390129486292043431936.L))-
-        real(7768909430818875637760.L))+real(1084816050753572831232.L))/
-        real(350985481218025360667435475.L);
-      _C4x[246] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(1538576775560051032064.L)*
-        _n+real(11696841452753850466304.L))-real(46711589139438944387072.L))+
-        real(5428727033367220453376.L))-real(5158046643560283897856.L))+
-        real(17973684672329991847936.L))-real(4832631768765986504704.L))-
-        real(689554719612808462336.L))-real(423924537172247609344.L))/
-        real(350985481218025360667435475.L);
-      _C4x[247] = (_n*(_n*(_n*(_n*(_n*((-real(38871421772234661822464.L)*_n-
-        real(2834982596851997343744.L))*_n-real(17449094233977276858368.L))+
-        real(17415306974260256309248.L))-real(719272851125915615232.L))+
-        real(4954237305599335333888.L))-real(5315018905562510262272.L))+
-        real(908122151083312349184.L))/real(350985481218025360667435475.L);
-      _C4x[248] = (_n*(_n*(_n*(_n*((real(10579612556489078079488.L)-
-        real(26970900492980428210176.L)*_n)*_n-real(1920614827565082738688.L))+
-        real(11147193197405362716672.L))-real(4501617148425879420928.L))-
-        real(374458901113073041408.L))-real(185540687386326564864.L))/
-        real(350985481218025360667435475.L);
-      _C4x[249] = (_n*(_n*(_n*((real(1008566220850160730112.L)-
-        real(602834335072111296512.L)*_n)*_n-real(144241694179103604736.L))+
-        real(220365777115864367104.L))-real(287932417995784060928.L))+
-        real(57837484643640672256.L))/real(26998883170617335435956575.L);
-      _C4x[250] = (_n*(_n*((real(14768730917217239040.L)-
-        real(2984159999753715712.L)*_n)*_n-real(7967891541553315840.L))-
-        real(324951555039035392.L))-real(140036432547348480.L))/
-        real(729699545151819876647475.L);
-      _C4x[251] = (_n*((real(30674408653717504.L)-real(39005275696398336.L)*_n)*
-        _n-real(45794506234134528.L))+real(10522262427795456.L))/
-        real(5932516627250568102825.L);
-      _C4x[252] = ((-real(6558828537577472.L)*_n-real(40136675950592.L))*_n-
-        real(15708310798336.L))/real(729246229927810697025.L);
-      _C4x[253] = (real(448813334528.L)-real(1742758477824.L)*_n)/
-        real(304232886911894325.L);
-      _C4x[254] = real(1104084992.L)/real(17220729447843075.L);
-      _C4x[255] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(_n*(real(59828600832.L)*_n+real(265958719488.L))+
-        real(1347255533568.L))+real(8030699651072.L))+real(59154707251200.L))+
-        real(585237237071872.L))+real(9238387813777408.L))+
-        real(417859387269316608.L))-real(18002775268186390528.L))+
-        real(245492390020723507200.L))-real(1900111098760399945728.L))+
-        real(9892641911006526701568.L))-real(37509600579233080410112.L))+
-        real(108144562708957712351232.L))-real(242632031718815380275200.L))+
-        real(427032375825115069284352.L))-real(584029572819642668285952.L))+
-        real(594275705676127627378688.L))-real(382034382220367760457728.L))+
-        real(108532494948968113766400.L))/real(387931321346238556527165525.L);
-      _C4x[256] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(_n*(real(10351382888448.L)*_n+real(59157457666048.L))+
-        real(416147233046528.L))+real(3914105647792128.L))+
-        real(58435386011025408.L))+real(2484582887328841728.L))-
-        real(99911032270353334272.L))+real(1260960344316374417408.L))-
-        real(8942469460488221622272.L))+real(42143327891443289161728.L))-
-        real(142518385904907035082752.L))+real(359882321641313191067648.L))-
-        real(691585602687638093955072.L))+real(1014895126960987762065408.L))-
-        real(1123529031582655690309632.L))+real(908270099665182825381888.L))-
-        real(503524243232975132557312.L))+real(169793058764607893536768.L))-
-        real(26047798787752347303936.L))/real(387931321346238556527165525.L);
-      _C4x[257] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(real(1631184712892416.L)*_n+real(14652169630253056.L))+
-        real(207909583444770816.L))+real(8354511514727612416.L))-
-        real(315358961012597325824.L))+real(3705367364162788786176.L))-
-        real(24213724918613314371584.L))+real(103773727288851762774016.L))-
-        real(313586367757843162988544.L))+real(690251994504135039778816.L))-
-        real(1112978880158086656425984.L))+real(1281097127475345207853056.L))-
-        real(955173371181840962945024.L))+real(276057518335257934299136.L))+
-        real(294815624989149543530496.L))-real(443275093348759428399104.L))+
-        real(266399454268608936411136.L))-real(66566596902033776443392.L))/
-        real(387931321346238556527165525.L);
-      _C4x[258] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(549079324393734144.L)*_n+real(20948185607395344384.L))-
-        real(745922130393186697216.L))+real(8201472422076716417024.L))-
-        real(49637082351917623934976.L))+real(194307855120787291766784.L))-
-        real(525787049041850915618816.L))+real(1004612443159064418975744.L))-
-        real(1328260147727517001711616.L))+real(1091055665812902651101184.L))-
-        real(271462506719023365881856.L))-real(564588266895018374987776.L))+
-        real(819776013926040615256064.L))-real(525965291650948892983296.L))+
-        real(165552095521119355797504.L))-real(13787423014256258318336.L))-
-        real(3293399846727308279808.L))/real(387931321346238556527165525.L);
-      _C4x[259] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(15220161420201602056192.L)-real(1472588543149162364928.L)*_n)*_n-
-        real(85702411275349202567168.L))+real(307658670199147522424832.L))-
-        real(746863387031370552311808.L))+real(1232094210587097376489472.L))-
-        real(1291049163756855836540928.L))+real(593010800494011830239232.L))+
-        real(461523356466477643333632.L))-real(994004619836187557756928.L))+
-        real(690413321825558742433792.L))-real(134966021733880816467968.L))-
-        real(83310286619741883727872.L))+real(20887173221472899432448.L))+
-        real(29742544852360402829312.L))-real(13226718739275802607616.L))/
-        real(387931321346238556527165525.L);
-      _C4x[260] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(435034857939829388214272.L)-real(131675314027856838787072.L)*_n)*
-        _n-real(948698098882376449916928.L))+real(1340810629437482313187328.L))-
-        real(1048707087838763548672000.L))+real(3509199733743899639808.L))+
-        real(948303782487182532411392.L))-real(946797564108156832841728.L))+
-        real(272178626310987577294848.L))+real(138668886768427099750400.L))-
-        real(37565142405810170626048.L))-real(116603982716308002177024.L))+
-        real(89040273914827296997376.L))-real(20157452825326086258688.L))+
-        real(109458059422021976064.L))/real(387931321346238556527165525.L);
-      _C4x[261] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(1331062244050061764853760.L)-real(1112169839020350363402240.L)*
-        _n)*_n-real(684421689374159667200000.L))-
-        real(515276787863609870909440.L))+real(1121015313757820808069120.L))-
-        real(631954776783314747392000.L))-real(70966395620946555699200.L))+
-        real(132414132267215298232320.L))+real(133870458354128595714048.L))-
-        real(157341467588939883741184.L))+real(23828538649046629220352.L))+
-        real(15370301406152461647872.L))+real(4232610323214679146496.L))-
-        real(4766791176006094290944.L))/real(387931321346238556527165525.L);
-      _C4x[262] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(278236178658557637427200.L)*_n-real(883117636635223025254400.L))*
-        _n+real(1044896784492538437304320.L))-real(267854067344467568885760.L))-
-        real(208658980714224927375360.L))-real(24499146390814179983360.L))+
-        real(223500680859398512312320.L))-real(75165298228229899812864.L))-
-        real(33123728290571614158848.L))-real(16974304258141263495168.L))+
-        real(41187502861266538463232.L))-real(14885832030268663267328.L))+
-        real(852867963795436732416.L))/real(387931321346238556527165525.L);
-      _C4x[263] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(825152530344188549529600.L)*_n+real(16093135374109932257280.L))-
-        real(173091267703238940426240.L))-real(179661612431230988451840.L))+
-        real(192204175551686041927680.L))+real(19332614716294944522240.L))-
-        real(12574226638832801939456.L))-real(66506217074977723645952.L))+
-        real(34694260040284171665408.L))+real(3366563656193789657088.L))-
-        real(204926675133353951232.L))-real(2066579183102025138176.L))/
-        real(387931321346238556527165525.L);
-      _C4x[264] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(49148219012744698920960.L)*_n-real(258309901964713729720320.L))*_n+
-        real(97424668981259296309248.L))+real(55632385206458356072448.L))+
-        real(47499322809821964533760.L))-real(74201862753821044768768.L))+
-        real(2100464549311769739264.L))+real(825499977944081104896.L))+
-        real(19545780271046056738816.L))-real(10208649146497274740736.L))+
-        real(947277609177333891072.L))/real(387931321346238556527165525.L);
-      _C4x[265] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(3886406473063184990208.L)*_n+real(31651070108403767443456.L))+
-        real(93506396640812094980096.L))-real(43051750740610863071232.L))-
-        real(13802269528960448593920.L))-real(23100030040802622177280.L))+
-        real(25944758250810025967616.L))-real(1776504428600317968384.L))-
-        real(805184637733605212160.L))-real(977643675088462807040.L))/
-        real(387931321346238556527165525.L);
-      _C4x[266] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(102667449090387528908800.L)*
-        _n-real(4176143654067686604800.L))-real(1664558069512969125888.L))-
-        real(41901475237771467554816.L))+real(13676609102710294183936.L))+
-        real(1783429219606151036928.L))+real(9822399889695569870848.L))-
-        real(7008449331187379339264.L))+real(867123963816388067328.L))/
-        real(387931321346238556527165525.L);
-      _C4x[267] = (_n*(_n*(_n*(_n*(_n*(_n*(real(24680978487302704594944.L)*_n-
-        real(41852681246037032042496.L))-real(888324737424044326912.L))-
-        real(7405281786214815367168.L))+real(17163496346381762691072.L))-
-        real(3368486034509553205248.L))-real(656845125089254965248.L))-
-        real(480366195184442671104.L))/real(387931321346238556527165525.L);
-      _C4x[268] = (_n*(_n*(_n*(_n*((-real(5019745509032155152384.L)*_n-
-        real(20553178504582563627008.L))*_n+real(14273677180576945143808.L))+
-        real(307067548871203749888.L))+real(5280901475645194764288.L))-
-        real(4904366406848135299072.L))+real(748980239998893686784.L))/
-        real(387931321346238556527165525.L);
-      _C4x[269] = (_n*(_n*(_n*(_n*(real(5984633002620612509696.L)*_n-
-        real(2481313182312589950976.L))+real(11100632093381464424448.L))-
-        real(3532921645127981596672.L))-real(419664577389087686656.L))-
-        real(235081389196733054976.L))/real(387931321346238556527165525.L);
-      _C4x[270] = (_n*(_n*(_n*(real(3492920937966206976.L)*_n-
-        real(257661145165332480.L))+real(906922006895656960.L))-
-        real(1043443055627075584.L))+real(188380220089171968.L))/
-        real(115215717655550506839075.L);
-      _C4x[271] = (_n*(_n*(real(1945805193171959808.L)*_n-
-        real(857735694188019712.L))-real(61147943509426176.L))-
-        real(28926926391607296.L))/real(103975159835496798854775.L);
-      _C4x[272] = (_n*(real(1318364018376704.L)*_n-real(1784303872638976.L))+
-        real(370082037891072.L))/real(268669663657614467325.L);
-      _C4x[273] = (-real(4212251426816.L)*_n-real(1768612691968.L))/
-        real(17149127467507306425.L);
-      _C4x[274] = real(7370964992.L)/real(6344479270257975.L);
-      _C4x[275] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*((-real(218791673856.L)*_n-real(1400536825856.L))*_n-
-        real(11110140870656.L))-real(118739630555136.L))-
-        real(2031767011721216.L))-real(99991962219708416.L))+
-        real(4707313913727811584.L))-real(70478949986091401216.L))+
-        real(602274663517508337664.L))-real(3484589124637012525056.L))+
-        real(14798748875001633439744.L))-real(48264101444607599968256.L))+
-        real(124107689428990971346944.L))-real(255110250492925885546496.L))+
-        real(420181589047172046782464.L))-real(547341806785132008308736.L))+
-        real(538653841598066420875264.L))-real(339586117529215787073536.L))+
-        real(95508595555091940114432.L))/real(424877161474451752386895575.L);
-      _C4x[276] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((-real(84110928248832.L)*_n-real(856422384402432.L))*_n-
-        real(13896008693972992.L))-real(644993673175498752.L))+
-        real(28458089775888334848.L))-real(396398904996530225152.L))+
-        real(3124087334077357621248.L))-real(16497566162978070331392.L))+
-        real(63152800431693017120768.L))-real(182841201745263310405632.L))+
-        real(409656275676181580218368.L))-real(717066650034170056671232.L))+
-        real(978260610793222950617088.L))-real(1023600262039727392161792.L))+
-        real(792974277073986343927808.L))-real(426088031783042722824192.L))+
-        real(140518393460365153271808.L))-real(21224132345575986692096.L))/
-        real(424877161474451752386895575.L);
-      _C4x[277] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(52995609652625408.L)*_n-real(2330821839456043008.L))*_n+
-        real(96862625780142702592.L))-real(1261692576340291616768.L))+
-        real(9217173162693369004032.L))-real(44625020542874191659008.L))+
-        real(154415325899211661115392.L))-real(396509496805989713707008.L))+
-        real(766812972890940875210752.L))-real(1110348094436664575787008.L))+
-        real(1159940972984586586816512.L))-real(772801974612617842393088.L))+
-        real(144557494463902108352512.L))+real(322553584988565465464832.L))-
-        real(409948333609442619686912.L))+real(236086010518086615040000.L))-
-        real(58183397292182446276608.L))/real(424877161474451752386895575.L);
-      _C4x[278] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(244993523835664859136.L)*_n-real(2997692002079598444544.L))+
-        real(20391608393570038317056.L))-real(90887323143384695046144.L))+
-        real(285073430590796758777856.L))-real(648733217092759573233664.L))+
-        real(1072068205803073664188416.L))-real(1236738985646846057119744.L))+
-        real(851455338207468685623296.L))-real(42603007777238484516864.L))-
-        real(635384053865395209109504.L))+real(751510380834552289427456.L))-
-        real(440054114480934289932288.L))+real(127469275788092729458688.L))-
-        real(7692111469971112984576.L))-real(3116335338838743318528.L))/
-        real(424877161474451752386895575.L);
-      _C4x[279] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(37691298526665312829440.L)*_n-real(155231442352606952816640.L))+
-        real(442426812329801977692160.L))-real(891060280546618937180160.L))+
-        real(1241345557744393912320000.L))-real(1068836648786189342474240.L))+
-        real(259898604745432561090560.L))+real(648646631561154999091200.L))-
-        real(937118889747330231173120.L))+real(540955821564462366720000.L))-
-        real(57345853626480894935040.L))-real(85056859046449399201792.L))+
-        real(11519605159903650381824.L))+real(29600893246049550860288.L))-
-        real(12008192989533587374080.L))/real(424877161474451752386895575.L);
-      _C4x[280] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(610114148412857715261440.L)*_n-real(1084876624977513425141760.L))+
-        real(1248343393947934250762240.L))-real(692927849841223134085120.L))-
-        real(351602565555781978030080.L))+real(1009964965611276767068160.L))-
-        real(760650029796242017484800.L))+real(114236578390335962480640.L))+
-        real(153084531563546179272704.L))-real(5968475553252058857472.L))-
-        real(118330049176476000976896.L))+real(77440851961195664506880.L))-
-        real(15733189386938984955904.L))-real(167406443821915963392.L))/
-        real(424877161474451752386895575.L);
-      _C4x[281] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(1110888451586257091297280.L)*_n-real(228267823844477695426560.L))-
-        real(809765012940224766935040.L))+real(1021205736789361588961280.L))-
-        real(376908671342120754216960.L))-real(162628702779099284766720.L))+
-        real(80524447810108690268160.L))+real(159280245898590948425728.L))-
-        real(133892619361773928054784.L))+real(9139377171596455182336.L))+
-        real(14519956012961410056192.L))+real(5217790864403667615744.L))-
-        real(4502630072345316294656.L))/real(424877161474451752386895575.L);
-      _C4x[282] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(801154767786817817149440.L)-real(1052891185037563951841280.L)*
-        _n)*_n-real(24710033090930163056640.L))-
-        real(202701431218160963420160.L))-real(100408462362032253960192.L))+
-        real(209415990150798124253184.L))-real(37748933651953004576768.L))-
-        real(34391800801816047779840.L))-real(23005446981136840392704.L))+
-        real(38590994935648442384384.L))-real(12472969903138957950976.L))+
-        real(568230604185547046912.L))/real(424877161474451752386895575.L);
-      _C4x[283] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(183866786074538299883520.L)*_n-real(86129889566253152993280.L))-
-        real(229792121168218294321152.L))+real(138018537884415820824576.L))+
-        real(44203717666859661656064.L))+real(2878865064043642617856.L))-
-        real(67336421414647692787712.L))+real(26644422562569001107456.L))+
-        real(4835410630577492066304.L))+real(364583096642187558912.L))-
-        real(2031623612398046019584.L))/real(424877161474451752386895575.L);
-      _C4x[284] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(28133120349842308071424.L)-
-        real(254148764020971940085760.L)*_n)*_n+
-        real(51387655305315066314752.L))+real(66169496642467601055744.L))-
-        real(62302477160090634813440.L))-real(5607536798889572040704.L))-
-        real(1531160162804340621312.L))+real(19326267080011914674176.L))-
-        real(8920215537330925076480.L))+real(719566316570030899200.L))/
-        real(424877161474451752386895575.L);
-      _C4x[285] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(1371367456260262723584.L)*
-        _n+real(98855476420049331290112.L))-real(22542012433755831009280.L))-
-        real(13683990167698557370368.L))-real(26918299871060862959616.L))+
-        real(22620477115339345231872.L))-real(203981666805014855680.L))-
-        real(558312751139223764992.L))-real(1003367979456785022976.L))/
-        real(424877161474451752386895575.L);
-      _C4x[286] = (_n*(_n*(_n*(_n*(_n*(_n*(real(13649032136962154168320.L)*_n+
-        real(7286845967462937133056.L))-real(41512992559738646429696.L))+
-        real(7958046022913209925632.L))+real(1556136579095989321728.L))+
-        real(10090599823336240316416.L))-real(6306017721352668053504.L))+
-        real(694556629570890498048.L))/real(424877161474451752386895575.L);
-      _C4x[287] = (_n*(_n*(_n*(_n*((-real(34318875673746789629952.L)*_n-
-        real(5038999903868073017344.L))*_n-real(9798467436492636553216.L))+
-        real(16022896306852875730944.L))-real(2158207830123738038272.L))-
-        real(580641655067345158144.L))-real(518939859147967954944.L))/
-        real(424877161474451752386895575.L);
-      _C4x[288] = (_n*(_n*(_n*((real(11055183047499901304832.L)-
-        real(22707465323068388278272.L)*_n)*_n+real(860451088355301523456.L))+
-        real(5555287933242279198720.L))-real(4509884598563389833216.L))+
-        real(619420803280280748032.L))/real(424877161474451752386895575.L);
-      _C4x[289] = (_n*(_n*((real(10831353523562392584192.L)-
-        real(3462497935151689891840.L)*_n)*_n-real(2682702072802950774784.L))-
-        real(424003224041735323648.L))-real(272266502944032030720.L))/
-        real(424877161474451752386895575.L);
-      _C4x[290] = (_n*((real(675885624548392960.L)-real(31342333790257152.L)*
-        _n)*_n-real(684782710505340928.L))+real(111840867077062656.L))/
-        real(88571432452460236061475.L);
-      _C4x[291] = ((-real(1814487552229376.L)*_n-real(184753168842752.L))*_n-
-        real(96932582653952.L))/real(294257250672625368975.L);
-      _C4x[292] = (real(6775423107072.L)-real(35958875488256.L)*_n)/
-        real(6260792567502667425.L);
-      _C4x[293] = -real(133782044672.L)/real(854691993121895775.L);
-      _C4x[294] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (_n*(real(2131964723200.L)*_n+real(24479971409920.L))+
-        real(451349472870400.L))+real(24011791956705280.L))-
-        real(1226316517788876800.L))+real(19998392443941683200.L))-
-        real(186984969350854737920.L))+real(1189904350414530150400.L))-
-        real(5592550446948291706880.L))+real(20336547079811969843200.L))-
-        real(58858660298301951180800.L))+real(137897432698878857052160.L))-
-        real(263627444865503697305600.L))+real(410703808843100496855040.L))-
-        real(513379761053875621068800.L))+real(491058901877620159283200.L))-
-        real(304456519164124498755584.L))+real(84896529382303946768384.L))/
-        real(461823001602664948246625625.L);
-      _C4x[295] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(1106013134520320.L)*_n+real(55661334993305600.L))-
-        real(2674155356862545920.L))+real(40758301718510305280.L))-
-        real(353481019650652241920.L))+real(2067833778703570042880.L))-
-        real(8839289460222223974400.L))+real(28860589153690604011520.L))-
-        real(73837309397471152046080.L))+real(150021143457997531381760.L))-
-        real(242952722172486709411840.L))+real(311656736440190605721600.L))-
-        real(310802882367751727349760.L))+real(232136935433056802570240.L))-
-        real(121425473918829712113664.L))+real(39284712150209612742656.L))-
-        real(5854933060848548052992.L))/real(153941000534221649415541875.L);
-      _C4x[296] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(419177000924526673920.L)-real(29293344283479244800.L)*_n)*_n-
-        real(3387238778254707916800.L))+real(18291634271659071897600.L))-
-        real(71341510548198921338880.L))+real(209339536031828095795200.L))-
-        real(471571575583443485982720.L))+real(819026974308263673200640.L))-
-        real(1081582232633420587991040.L))+real(1035792310183770131005440.L))-
-        real(616336860337283058892800.L))+real(44994397208518286376960.L))+
-        real(335609199376606445961216.L))-real(378561771629292631883776.L))+
-        real(210708910623851559256064.L))-real(51372315888735647432704.L))/
-        real(461823001602664948246625625.L);
-      _C4x[297] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(40261740731122287902720.L)-real(8046011327061667348480.L)*_n)*_n-
-        real(143699953344005936250880.L))+real(379276263443149849886720.L))-
-        real(749084754366597745868800.L))+real(1093052863022791267450880.L))-
-        real(1112108645923022071398400.L))+real(628936239153881305579520.L))+
-        real(132828309812218890813440.L))-real(666598624758214741196800.L))+
-        real(680790619020651753635840.L))-real(368768436659319757340672.L))+
-        real(98646132229764678680576.L))-real(3571337468200873885696.L))-
-        real(2901711692913210032128.L))/real(461823001602664948246625625.L);
-      _C4x[298] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(573795873750841609420800.L)-real(241588440061028440473600.L)*_n)*
-        _n-real(987956266795360824852480.L))+real(1180739801442315927552000.L))-
-        real(822263252228152775147520.L))-real(17816496431764875509760.L))+
-        real(756066725788931126722560.L))-real(850710945026132001423360.L))+
-        real(412628670804891763998720.L))-real(3433399257963429888000.L))-
-        real(81288446987722203070464.L))+real(3779232372794687750144.L))+
-        real(29005051599847637909504.L))-real(10937220996365176274944.L))/
-        real(461823001602664948246625625.L);
-      _C4x[299] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(1070366992642500282286080.L)-real(1141187065421929339944960.L)*
-        _n)*_n-real(343608082124824274534400.L))-
-        real(602909781580891375534080.L))+real(982568553675396753653760.L))-
-        real(576452613681904846110720.L))+real(1636936486667428036608.L))+
-        real(147182896307962548060160.L))+real(21063555948631589650432.L))-
-        real(116453764391919912222720.L))+real(67170698799763284819968.L))-
-        real(12302923461141056192512.L))-real(343861884607178735616.L))/
-        real(461823001602664948246625625.L);
-      _C4x[300] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(169684103167341074841600.L)*_n-real(956643098881719848140800.L))+
-        real(850164249529518391296000.L))-real(167879308527440882565120.L))-
-        real(198598545032521728393216.L))+real(25655495276584715157504.L))+
-        real(171381322772776380006400.L))-real(110451500410401009434624.L))-
-        real(1576592512742613581824.L))+real(13067890290723662069760.L))+
-        real(5941846441313263681536.L))-real(4239571090109561307136.L))/
-        real(461823001602664948246625625.L);
-      _C4x[301] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(530604327587900345548800.L)*_n+real(131977168891895076618240.L))-
-        real(152481283706816437420032.L))-real(156530826148027205419008.L))+
-        real(182740982794412246433792.L))-real(8151355704847011676160.L))-
-        real(31591511062109027827712.L))-real(27756134547413545254912.L))+
-        real(35806094360712600092672.L))-real(10466361242425030082560.L))+
-        real(360431905313044561920.L))/real(461823001602664948246625625.L);
-      _C4x[302] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(15009248562197676687360.L)*_n-real(244298467285940249296896.L))+
-        real(82996432784741690769408.L))+real(55364604757274391478272.L))+
-        real(18126670064637664296960.L))-real(65429511443093297037312.L))+
-        real(19593221547206903857152.L))+real(5635226707924034256896.L))+
-        real(861250463051326423040.L))-real(1977642842096769433600.L))/
-        real(461823001602664948246625625.L);
-      _C4x[303] = (_n*(_n*(_n*(_n*(_n*(_n*((real(34865811169337222889472.L)-
-        real(25049300432913906532352.L)*_n)*_n+real(78359610398675725975552.L))-
-        real(49048535289216483983360.L))-real(10666388886959446556672.L))-
-        real(4015240746172931899392.L))+real(18841196561879051272192.L))-
-        real(7791611791309033963520.L))+real(544021638634159472640.L))/
-        real(461823001602664948246625625.L);
-      _C4x[304] = (_n*(_n*(_n*(_n*(_n*(_n*(real(94061782322562648244224.L)*_n-
-        real(4989223438082088370176.L))-real(10675229986370302771200.L))-
-        real(29550148949190528466944.L))+real(19274738267183420276736.L))+
-        real(948730317159236894720.L))-real(309505926629945245696.L))-
-        real(1011306433109246869504.L))/real(461823001602664948246625625.L);
-      _C4x[305] = (_n*(_n*(_n*(_n*(_n*(real(5623976056189811163136.L)*_n-
-        real(13014239125021214638080.L))+real(1057831365290118610944.L))+
-        real(301392554005406679040.L))+real(3402100564685314064384.L))-
-        real(1888115169291661213696.L))+real(185610085070664630272.L))/
-        real(153941000534221649415541875.L);
-      _C4x[306] = (_n*(_n*(_n*((-real(7204219494115185786880.L)*_n-
-        real(12030549499987697336320.L))*_n+real(14665794240663271768064.L))-
-        real(1176616011237764890624.L))-real(479912745127446052864.L))-
-        real(544003327069043818496.L))/real(461823001602664948246625625.L);
-      _C4x[307] = (_n*(_n*(_n*(real(2658511695217153802240.L)*_n+
-        real(349127854472439005184.L))+real(1921492373325488324608.L))-
-        real(1378850491311721545728.L))+real(171117741739182391296.L))/
-        real(153941000534221649415541875.L);
-      _C4x[308] = (_n*(_n*(real(2163491964727590912.L)*_n-
-        real(406434038878830592.L))-real(83541496652890112.L))-
-        real(62479567859744768.L))/real(96273296143978517458125.L);
-      _C4x[309] = (_n*(real(16548080031629312.L)*_n-real(14844900281417728.L))+
-        real(2205061056823296.L))/real(2238913863813453894375.L);
-      _C4x[310] = (-real(169771903483904.L)*_n-real(99720831696896.L))/
-        real(279013581812618874375.L);
-      _C4x[311] = real(17725128704.L)/real(20644734133379125.L);
-      _C4x[312] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*((-
-        real(101130373693440.L)*_n-real(5783393245593600.L))*_n+
-        real(318472188057354240.L))-real(5618759317869035520.L))+
-        real(57052017689131745280.L))-real(395968170390045327360.L))+
-        real(2039836029282051686400.L))-real(8177888081030770851840.L))+
-        real(26281076226218545643520.L))-real(68987825093823682314240.L))+
-        real(149570242640390840647680.L))-real(268964032818246687129600.L))+
-        real(399603705901395078021120.L))-real(482130558207117974568960.L))+
-        real(449988520993310109597696.L))-real(274992985051467289198592.L))+
-        real(76114129791031124688896.L))/real(498768841730878144106355675.L);
-      _C4x[313] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(2241681145882214400.L)*_n-real(37115504492921487360.L))+
-        real(351320319454127063040.L))-real(2255407036957364060160.L))+
-        real(10648804381055558615040.L))-real(38702343486057322905600.L))+
-        real(111280900920525465845760.L))-real(257219043916181510553600.L))+
-        real(481562073203945703997440.L))-real(730093179498015511019520.L))+
-        real(888424749518111008358400.L))-real(849993167067850400071680.L))+
-        real(615042225604755902693376.L))-real(314277697201676901941248.L))+
-        real(99997449109624468799488.L))-real(14731767056328604778496.L))/
-        real(498768841730878144106355675.L);
-      _C4x[314] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(1208159862249058467840.L)*_n-real(7201842428551354122240.L))+
-        real(31264908658453575106560.L))-real(103196829813193844981760.L))+
-        real(265175248273355990630400.L))-real(535862743249582911651840.L))+
-        real(849345767923583507496960.L))-real(1034756785032088938086400.L))+
-        real(914900521908322990817280.L))-real(483619396361886734745600.L))-
-        real(30086811366913097072640.L))+real(339039465302404374724608.L))-
-        real(349604981346582843621376.L))+real(189280885814646315941888.L))-
-        real(45757761311323696660480.L))/real(498768841730878144106355675.L);
-      _C4x[315] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(68207297251862139371520.L)*_n-real(204793910887769104711680.L))+
-        real(469636245011109846712320.L))-real(822769077513134895267840.L))+
-        real(1075520585575946413670400.L))-real(970210722875698430607360.L))+
-        real(430741825632232726855680.L))+real(263470288898092034949120.L))-
-        real(671076564935108393435136.L))+real(612166449974084599021568.L))-
-        real(309751817884944675373056.L))+real(76624121978862824325120.L))-
-        real(772181074205594353664.L))-real(2678503101150655414272.L))/
-        real(498768841730878144106355675.L);
-      _C4x[316] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(689117160334118501744640.L)*_n-real(1034688320756786606899200.L))+
-        real(1068813441805893469470720.L))-real(576057451075223483842560.L))-
-        real(237165358523154746572800.L))+real(803665001347227781693440.L))-
-        real(751650018237704810004480.L))+real(305662424875062576283648.L))+
-        real(32996127128452748804096.L))-real(74622946111822950825984.L))-
-        real(2476991729123855433728.L))+real(28132635482355740442624.L))-
-        real(9996125312177108156416.L))/real(498768841730878144106355675.L);
-      _C4x[317] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(841202287667440684892160.L)*_n-real(31822983215997014507520.L))-
-        real(759798172382769709056000.L))+real(899695869755677715988480.L))-
-        real(409829360079325838180352.L))-real(73794120883102103371776.L))+
-        real(129906354091232604454912.L))+real(42891890823690012590080.L))-
-        real(112236514082021582045184.L))+real(58190998383169428783104.L))-
-        real(9626186017934468448256.L))-real(453842001546316873728.L))/
-        real(498768841730878144106355675.L);
-      _C4x[318] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(652784685276097192919040.L)-real(986085308861541997608960.L)*_n)*
-        _n-real(11218993662206077304832.L))-real(197016909341114083835904.L))-
-        real(24384803175628869206016.L))+real(173276502711580330295296.L))-
-        real(88510208229772940541952.L))-real(9150026966014239965184.L))+
-        real(11338122476648465956864.L))+real(6455005389837431734272.L))-
-        real(3985621940807982383104.L))/real(498768841730878144106355675.L);
-      _C4x[319] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(212798284515636821360640.L)*_n-real(83194912498082880946176.L))-
-        real(191220929987421979803648.L))+real(150003812137954122399744.L))+
-        real(13784621358545381621760.L))-real(26425052721455829090304.L))-
-        real(31262825828751362752512.L))+real(32988168350057078194176.L))-
-        real(8796240449129393684480.L))+real(207835944042312499200.L))/
-        real(498768841730878144106355675.L);
-      _C4x[320] = (_n*(_n*(_n*(_n*(_n*(_n*((real(34136227676090491994112.L)-
-        real(231179334978353145839616.L)*_n)*_n+
-        real(56184392327783535083520.L))+real(31548513937789311516672.L))-
-        real(61608490929288156020736.L))+real(13586951464390546685952.L))+
-        real(5962442734200002969600.L))+real(1283059378418496831488.L))-
-        real(1912392858015719489536.L))/real(498768841730878144106355675.L);
-      _C4x[321] = (_n*(_n*(_n*(_n*(_n*(_n*(real(12469653863753758801920.L)*_n+
-        real(84140281217544571846656.L))-real(35861382419886548975616.L))-
-        real(13548577230077042884608.L))-real(6392824084577975795712.L))+
-        real(18166924514161565106176.L))-real(6806853172165810847744.L))+
-        real(407750788886380412928.L))/real(498768841730878144106355675.L);
-      _C4x[322] = (_n*(_n*(_n*(_n*(_n*(real(8591822783548697346048.L)*_n-
-        real(5956188858648178458624.L))-real(31027084247774816894976.L))+
-        real(16060879841227947638784.L))+real(1765484007083546247168.L))-
-        real(72168278273508245504.L))-real(1006690411404196839424.L))/
-        real(498768841730878144106355675.L);
-      _C4x[323] = (_n*(_n*(_n*((-real(11698685736190165909504.L)*_n-
-        real(208814656795250262016.L))*_n+real(1794788189999726592.L))+
-        real(3396748311320728698880.L))-real(1694233809987339026432.L))+
-        real(148744606619390705664.L))/real(166256280576959381368785225.L);
-      _C4x[324] = (_n*(_n*((real(4396636324659424395264.L)-
-        real(4641420323221227438080.L)*_n)*_n-real(131572048073775382528.L))-
-        real(122467555239752892416.L))-real(186285243621640765440.L))/
-        real(166256280576959381368785225.L);
-      _C4x[325] = (_n*(_n*(real(7834633575818330112.L)*_n+
-        real(48016071755227463680.L))-real(30789299598841085952.L))+
-        real(3463955104036552704.L))/real(4055031233584375155336225.L);
-      _C4x[326] = ((-real(3429529750010331136.L)*_n-real(929121136795451392.L))*
-        _n-real(825547048093745152.L))/real(1288808376565576599758025.L);
-      _C4x[327] = (real(233411205660672.L)-real(1720396395053056.L)*_n)/
-        real(301334668357628384325.L);
-      _C4x[328] = -real(5320214577152.L)/real(14381121797311898475.L);
-      _C4x[329] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(1565371771807334400.L)-real(82484461043712000.L)*_n)*_n-
-        real(17152002128231792640.L))+real(128922741271544463360.L))-
-        real(722206096937818521600.L))+real(3163382077496229888000.L))-
-        real(11169172104390534758400.L))+real(32431966406822886113280.L))-
-        real(78456742263564187729920.L))+real(159273085798213012684800.L))-
-        real(271775503544569823232000.L))+real(387575500707038704435200.L))-
-        real(453463335827235284189184.L))+real(414275146311301370740736.L))-
-        real(249993622774061171998720.L))+real(68748246262866822299648.L))/
-        real(535714681859091339966085725.L);
-      _C4x[330] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(796882849483079024640.L)-real(114000123919293480960.L)*_n)*_n-
-        real(4118491001867584143360.L))+real(16487786133727519703040.L))-
-        real(52615905091591864320000.L))+real(136249299448591464529920.L))-
-        real(289201256266363022868480.L))+real(505004876294475869061120.L))-
-        real(723386332535375926394880.L))+real(840882751108578017280000.L))-
-        real(775907246293505777074176.L))+real(546050816551694530248704.L))-
-        real(273352100268780401197056.L))+real(85712099236820973256704.L))-
-        real(12499681138703058599936.L))/real(535714681859091339966085725.L);
-      _C4x[331] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(48058037906451852165120.L)-real(13105596121129817210880.L)*_n)*
-        _n-real(138658708703314748375040.L))+real(319135941425592658821120.L))-
-        real(588087695732779379589120.L))+real(861042376467336564572160.L))-
-        real(976303724445006078935040.L))+real(800864636991573149614080.L))-
-        real(371874625913790432018432.L))-real(86417098974058726293504.L))+
-        real(336205176842650210271232.L))-real(323187478827126067560448.L))+
-        real(171038107936539149336576.L))-real(41070380884310049685504.L))/
-        real(535714681859091339966085725.L);
-      _C4x[332] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(550610802488938038558720.L)-real(270232313099228943482880.L)*_n)*
-        _n-real(869263158552465411932160.L))+real(1028319971570955017256960.L))-
-        real(822700223526103091773440.L))+real(259392162921900996034560.L))+
-        real(357753221499595668848640.L))-real(657992022141630754586624.L))+
-        real(547950795055018239066112.L))-real(260878304917920424132608.L))+
-        real(59650625796137226862592.L))+real(1128572339223560978432.L))-
-        real(2461327174030332002304.L))/real(535714681859091339966085725.L);
-      _C4x[333] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(923787631913692676751360.L)-real(1034710286547361380433920.L)*
-        _n)*_n-real(346245234157604422287360.L))-
-        real(401783047015916277596160.L))+real(808420641413856504053760.L))-
-        real(650455257567164922593280.L))+real(218313846409468265365504.L))+
-        real(56706846965005117554688.L))-real(66644315841830953418752.L))-
-        real(7453439157493586460672.L))+real(27102034522387626590208.L))-
-        real(9167794051686131040256.L))/real(535714681859091339966085725.L);
-      _C4x[334] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(226510654976894781358080.L)*_n-real(838505504646919335444480.L))+
-        real(786839317157396965490688.L))-real(267569023005024910835712.L))-
-        real(120372785324231963443200.L))+real(107128808817268633894912.L))+
-        real(59730306053177746653184.L))-real(106598962419766954819584.L))+
-        real(50397996986643551092736.L))-real(7524579274347948015616.L))-
-        real(519375075239597703168.L))/real(535714681859091339966085725.L);
-      _C4x[335] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(458442854818227859488768.L)*_n+real(96306110255016387280896.L))-
-        real(172464876600679899070464.L))-real(66052329368078015004672.L))+
-        real(167910599215137926676480.L))-real(68812287716852351631360.L))-
-        real(14295912336864684539904.L))+real(9528420821397873360896.L))+
-        real(6801015386323193692160.L))-real(3744921543288857559040.L))/
-        real(535714681859091339966085725.L);
-      _C4x[336] = (_n*(_n*(_n*(_n*(_n*(_n*((-real(11512968925967443558400.L)*_n-
-        real(206825135944362465689600.L))*_n+real(115844139308050768986112.L))+
-        real(28946038594593687076864.L))-real(20089451415499968610304.L))-
-        real(33662456270784521306112.L))+real(30237558827368692318208.L))-
-        real(7403759247694499938304.L))+real(95364480585493905408.L))/
-        real(535714681859091339966085725.L);
-      _C4x[337] = (_n*(_n*(_n*(_n*(_n*((real(49947882271217396219904.L)-
-        real(5203944850077889069056.L)*_n)*_n+real(42407517492739936616448.L))-
-        real(56575356892381181902848.L))+real(8581541322318195720192.L))+
-        real(5963407710798869430272.L))+real(1634138971069032169472.L))-
-        real(1841052091594565484544.L))/real(535714681859091339966085725.L);
-      _C4x[338] = (_n*(_n*(_n*(_n*(_n*(real(28145849041027147497472.L)*_n-
-        real(7883630470704981344256.L))-real(4911902270365057941504.L))-
-        real(2844621509791940870144.L))+real(5788871683336942125056.L))-
-        real(1983150924961272561664.L))+real(100445763893888811008.L))/
-        real(178571560619697113322028575.L);
-      _C4x[339] = (_n*(_n*(_n*((-real(450597459332782096384.L)*_n-
-        real(31486405223959270260736.L))*_n+real(13073372565100757516288.L))+
-        real(2317888471320775098368.L))+real(146565013145265373184.L))-
-        real(993300730654811488256.L))/real(535714681859091339966085725.L);
-      _C4x[340] = (_n*(_n*((-real(1162207852366183530496.L)*_n-
-        real(336827775939520757760.L))*_n+real(3355305437742864793600.L))-
-        real(1519433631680467828736.L))+real(118976779410317770752.L))/
-        real(178571560619697113322028575.L);
-      _C4x[341] = (_n*(_n*(real(1296975958388225605632.L)*_n+
-        real(24071140691780042752.L))-real(27946396176690970624.L))-
-        real(62889101902200438784.L))/real(59523853539899037774009525.L);
-      _C4x[342] = (_n*(real(15460645461047640064.L)*_n-
-        real(8947273598989500416.L))+real(914444779889098752.L))/
-        real(1384275663718582273814175.L);
-      _C4x[343] = (-real(14832869272715264.L)*_n-real(16076005412175872.L))/
-        real(25846223855796368985675.L);
-      _C4x[344] = real(11005853696.L)/real(17940058163291825.L);
-      _C4x[345] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(5091307533222543360.L)*_n-real(41198029324953845760.L))+
-        real(249300895402284810240.L))-real(1184179253160852848640.L))+
-        real(4554535589080203264000.L))-real(14483423173275046379520.L))+
-        real(38622461795400123678720.L))-real(87154634183041068564480.L))+
-        real(167194604351140009082880.L))-real(272599898398597840896000.L))+
-        real(375097460196470629072896.L))-real(427194329668202660888576.L))+
-        real(383001812805974799417344.L))-real(228565597964855928684544.L))+
-        real(62498405693515292999680.L))/real(572660521987304535825815775.L);
-      _C4x[346] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(514187426110352916480.L)*_n-real(2247933497525686763520.L))+
-        real(7881743693103004385280.L))-real(22590496521837808189440.L))+
-        real(53561338527583190384640.L))-real(105703579650568759541760.L))+
-        real(173801078079300556554240.L))-real(236949245019376960143360.L))+
-        real(264603634712238970896384.L))-real(236495556299583549079552.L))+
-        real(162398517249812954349568.L))-real(79831643364024523948032.L))+
-        real(24709794374579019317248.L))-real(3571337468200873885696.L))/
-        real(190886840662434845275271925.L);
-      _C4x[347] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(68255699287613405921280.L)*_n-real(176108899047462320209920.L))+
-        real(369147506618944727285760.L))-real(628108811718068073922560.L))+
-        real(857556726199951703408640.L))-real(911129946124723798671360.L))+
-        real(695535740765103257026560.L))-real(278250385181479415054336.L))-
-        real(128374707708691409272832.L))+real(329357279394947502440448.L))-
-        real(299229583097036172951552.L))+real(155386591547833448398848.L))-
-        real(37112952879006378622976.L))/real(572660521987304535825815775.L);
-      _C4x[348] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(618578444832325364613120.L)*_n-real(890387086357713345576960.L))+
-        real(959846801282704563240960.L))-real(677618176913105265623040.L))+
-        real(114598368788199443005440.L))+real(423167842280036137697280.L))-
-        real(633801719329703113785344.L))+real(489155075033436868575232.L))-
-        real(220332144402742995058688.L))+real(46463340388623300165632.L))+
-        real(2410711646300392128512.L))-real(2257144678447121956864.L))/
-        real(572660521987304535825815775.L);
-      _C4x[349] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(761367907818236144517120.L)*_n-real(141932181921238163128320.L))-
-        real(518471155546357606907904.L))+real(783900067938426616283136.L))-
-        real(553324818027658440867840.L))+real(148079874353063859847168.L))+
-        real(71265077790889964732416.L))-real(58293930961292620726272.L))-
-        real(11359238777021883482112.L))+real(25991697839449845006336.L))-
-        real(8436766389561498533888.L))/real(572660521987304535825815775.L);
-      _C4x[350] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(662012426056248019910656.L)-real(856864870222817214332928.L)*_n)*
-        _n-real(151202452659623967064064.L))-real(145443399821504500727808.L))+
-        real(82556297742728581611520.L))+real(72160251650795823431680.L))-
-        real(100190891075416646221824.L))+real(43663490536105119318016.L))-
-        real(5865058745918664212480.L))-real(555004094218279845888.L))/
-        real(572660521987304535825815775.L);
-      _C4x[351] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(162244546902089766273024.L)*
-        _n-real(135698369282461491265536.L))-real(98336804674514213404672.L))+
-        real(157744953895228324970496.L))-real(51631097725980996796416.L))-
-        real(17599659185393897570304.L))+real(7755604277847765549056.L))+
-        real(7016232510410146709504.L))-real(3519321627372776587264.L))/
-        real(572660521987304535825815775.L);
-      _C4x[352] = (_n*(_n*(_n*(_n*(_n*((real(83244152479985965203456.L)-
-        real(207256316991167648497664.L)*_n)*_n+
-        real(38488841588026346831872.L))-real(13386406132456695529472.L))-
-        real(35127278841657192087552.L))+real(27615403122651371143168.L))-
-        real(6240092707521290043392.L))+real(12356984641708621824.L))/
-        real(572660521987304535825815775.L);
-      _C4x[353] = (_n*(_n*(_n*(_n*(_n*(real(39426942372718181351424.L)*_n+
-        real(50524659025021289627648.L))-real(50882305733861696339968.L))+
-        real(4486579367125494792192.L))+real(5745527201912053563392.L))+
-        real(1921372350956712230912.L))-real(1767071000376643682304.L))/
-        real(572660521987304535825815775.L);
-      _C4x[354] = (_n*(_n*(_n*((-real(12922609861994402021376.L)*_n-
-        real(14663330997699015081984.L))*_n-real(10377016441700863705088.L))+
-        real(16490114063764429996032.L))-real(5203644908636423061504.L))+
-        real(217824752403331678208.L))/real(572660521987304535825815775.L);
-      _C4x[355] = (_n*(_n*((real(10363105915761611243520.L)-
-        real(31108224082047813025792.L)*_n)*_n+real(2665258414019276963840.L))+
-        real(343454172582539952128.L))-real(973879596736504135680.L))/
-        real(572660521987304535825815775.L);
-      _C4x[356] = (_n*((real(1095127986104170446848.L)-
-        real(228080158859782520832.L)*_n)*_n-real(454138721074839289856.L))+
-        real(31606851391048384512.L))/real(63628946887478281758423975.L);
-      _C4x[357] = (_n*(real(76084294790401753088.L)*_n-
-        real(15295746883276767232.L))-real(63038841724082323456.L))/
-        real(63628946887478281758423975.L);
-      _C4x[358] = (real(14181714112806912.L)-real(152607815888797696.L)*_n)/
-        real(27628722052747842708825.L);
-      _C4x[359] = -real(54965112406016.L)/real(91993525147884048975.L);
-      _C4x[360] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(430994768322594078720.L)-real(84197065396353761280.L)*_n)*_n-
-        real(1793048747701048442880.L))+real(6194168401149076439040.L))-
-        real(18035960932757604925440.L))+real(44720745236779090575360.L))-
-        real(95031583628155567472640.L))+real(173535935320979731906560.L))-
-        real(271872965336201579986944.L))+real(362497287114935439982592.L))-
-        real(403121983084712687566848.L))+real(355440888311252047101952.L))-
-        real(210033252183921664196608.L))+real(57141399491213982171136.L))/
-        real(609606362115517731685545825.L);
-      _C4x[361] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(31970970891211914608640.L)-real(10176476723924655144960.L)*_n)*
-        _n-real(83688392887351608606720.L))+real(183984060806886189957120.L))-
-        real(340890208974693445140480.L))+real(531787992272133968363520.L))-
-        real(694143741283918927626240.L))+real(748132698939334844219392.L))-
-        real(649995135516435961348096.L))+real(436690280250806542270464.L))-
-        real(211215428087395894951936.L))+real(64625616056591281291264.L))-
-        real(9266172890467132243968.L))/real(609606362115517731685545825.L);
-      _C4x[362] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(413825184882267751710720.L)-real(214034860114736295444480.L)*_n)*
-        _n-real(656543496537894058721280.L))+real(842133421975364865884160.L))-
-        real(842855810924450282471424.L))+real(599646862218377023193088.L))-
-        real(200074490509092341153792.L))-real(159298739193669591498752.L))+
-        real(320012267824187116093440.L))-real(277563905150600783855616.L))+
-        real(141861108416907690639360.L))-real(33738373088367507144704.L))/
-        real(609606362115517731685545825.L);
-      _C4x[363] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(877392490929897477242880.L)-real(889289452672089367511040.L)*_n)*
-        _n-real(540149494276991068667904.L))-real(5464164240765975789568.L))+
-        real(466041248043616759185408.L))-real(602995853494487514873856.L))+
-        real(436048845159616311459840.L))-real(186604799267254478831616.L))+
-        real(36143424521723768209408.L))+real(3262438927417256968192.L))-
-        real(2068807831079903821824.L))/real(609606362115517731685545825.L);
-      _C4x[364] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(32795003990588742696960.L)*_n-real(595091362362469753290752.L))+
-        real(740478006614137644253184.L))-real(463614711290422458580992.L))+
-        real(92322771143285224243200.L))+real(79305650728527359639552.L))-
-        real(50114832320037157601280.L))-real(14384992487995191853056.L))+
-        real(24853186435830339600384.L))-real(7789531146923225907200.L))/
-        real(609606362115517731685545825.L);
-      _C4x[365] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(537149830091282443141120.L)*
-        _n-real(59380568619727814918144.L))-real(155035323673074726862848.L))+
-        real(58420237132999633666048.L))+real(80876640692613733679104.L))-
-        real(93458624460192913293312.L))+real(37856146464015973875712.L))-
-        real(4547760312161134444544.L))-real(570468604583495073792.L))/
-        real(609606362115517731685545825.L);
-      _C4x[366] = (_n*(_n*(_n*(_n*(_n*((-real(94150496146393625788416.L)*_n-
-        real(121614752059864419139584.L))*_n+real(144694292247282918096896.L))-
-        real(36961746472760617467904.L))-real(19526442990342349258752.L))+
-        real(6085090205128816852992.L))+real(7130102002019737796608.L))-
-        real(3309332099903740968960.L))/real(609606362115517731685545825.L);
-      _C4x[367] = (_n*(_n*(_n*(_n*(_n*(real(53913608561960329150464.L)*_n+
-        real(43584033194830477656064.L))-real(6826182834845181280256.L))-
-        real(35830854175750795296768.L))+real(25155778723711209701376.L))-
-        real(5265097474396068511744.L))-real(48822101619058409472.L))/
-        real(609606362115517731685545825.L);
-      _C4x[368] = (_n*(_n*(_n*(_n*(real(56042554411652231462912.L)*_n-
-        real(44939383802842058850304.L))+real(1192635094428580577280.L))+
-        real(5386675108318181064704.L))+real(2152545577261133201408.L))-
-        real(1692733009650165743616.L))/real(609606362115517731685545825.L);
-      _C4x[369] = (_n*(_n*((-real(13699127493087568330752.L)*_n-
-        real(11904434636260707926016.L))*_n+real(15575442621543982563328.L))-
-        real(4554973193376618250240.L))+real(152019767703424204800.L))/
-        real(609606362115517731685545825.L);
-      _C4x[370] = (_n*(_n*(real(7950434773662726881280.L)*_n+
-        real(2855725742065350344704.L))+real(517630575411575390208.L))-
-        real(950421023617361903616.L))/real(609606362115517731685545825.L);
-      _C4x[371] = (_n*(real(152087537775491940352.L)*_n-
-        real(58176974110576345088.L))+real(3577681766573408256.L))/
-        real(9676291462151075106119775.L);
-      _C4x[372] = (-real(4223018003857408.L)*_n-real(81684179116359680.L))/
-        real(88233660749097949295925.L);
-      _C4x[373] = real(1187558457344.L)/real(2967533069286582225.L);
-      _C4x[374] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(684808837435647590400.L)*_n-real(2552815166218441850880.L))+
-        real(8054336620689201561600.L))-real(21746708875860844216320.L))+
-        real(50627258758617838387200.L))-real(102079961953517489356800.L))+
-        real(178494104901579152818176.L))-real(269944788277079582965760.L))+
-        real(349997380662696286879744.L))-real(381045535398903215554560.L))+
-        real(331009252972784611491840.L))-real(193876848169773843873792.L))+
-        real(52508313045980416049152.L))/real(646552202243730927545275875.L);
-      _C4x[375] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(41268460411269005967360.L)*_n-real(99928379768550771916800.L))+
-        real(205730769682747034173440.L))-real(360674194413173090549760.L))+
-        real(537133203577301083619328.L))-real(674570313658546050301952.L))+
-        real(704402023174814281236480.L))-real(596701093731048439676928.L))+
-        real(393105562445198468841472.L))-real(187388626932101321588736.L))+
-        real(56744443366763076255744.L))-real(8078202007073910161408.L))/
-        real(646552202243730927545275875.L);
-      _C4x[376] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(452376341730091125964800.L)*_n-real(674450171758867308871680.L))+
-        real(817648238648469693136896.L))-real(774073110235378693963776.L))+
-        real(513239718143080230027264.L))-real(134960678833126406881280.L))-
-        real(181737936974692298522624.L))+real(309195446049300686045184.L))-
-        real(257989271586097242046464.L))+real(130094334307908370563072.L))-
-        real(30835088148952852201472.L))/real(646552202243730927545275875.L);
-      _C4x[377] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(786923868284873405890560.L)*_n-real(413347858199903649923072.L))-
-        real(103348181187335221673984.L))+real(491556374863983069364224.L))-
-        real(568660700939824482222080.L))+real(388493395807836030631936.L))-
-        real(158460873658538353754112.L))+real(28015014648058300334080.L))+
-        real(3812288184847131738112.L))-real(1896979938133067956224.L))/
-        real(646552202243730927545275875.L);
-      _C4x[378] = (_n*(_n*(_n*(_n*(_n*(_n*((real(685831146636741636521984.L)-
-        real(639377792612952067538944.L)*_n)*_n-
-        real(382867698419535095791616.L))+real(48569158297785152307200.L))+
-        real(82759154214861239484416.L))-real(42404168936857687556096.L))-
-        real(16695139297225389113344.L))+real(23719951015907491315712.L))-
-        real(7214480465194481876992.L))/real(646552202243730927545275875.L);
-      _C4x[379] = (_n*(_n*(_n*(_n*(_n*(_n*(real(10632884446466437808128.L)*_n-
-        real(153880538970079591661568.L))+real(35977262383266109849600.L))+
-        real(86562091177696389234688.L))-real(86700573847391418974208.L))+
-        real(32852036501153549123584.L))-real(3497197262858948182016.L))-
-        real(572369679143757938688.L))/real(646552202243730927545275875.L);
-      _C4x[380] = (_n*(_n*(_n*(_n*((real(130175705428439072768000.L)-
-        real(136933609611924112146432.L)*_n)*_n-
-        real(24646700522200039948288.L))-real(20438808531519984893952.L))+
-        real(4550027383744652902400.L))+real(7166116325514310320128.L))-
-        real(3114691312233750724608.L))/real(646552202243730927545275875.L);
-      _C4x[381] = (_n*(_n*(_n*(_n*(real(45293223486842050969600.L)*_n-
-        real(712846732076804734976.L))-real(35931867530174037753856.L))+
-        real(22874573958974166532096.L))-real(4445918678380099665920.L))-
-        real(93706058264540610560.L))/real(646552202243730927545275875.L);
-      _C4x[382] = (_n*(_n*((-real(5576612242752010190848.L)*_n-
-        real(201813586968620040192.L))*_n+real(706097888679988035584.L))+
-        real(333624816480246824960.L))-real(231361244667523891200.L))/
-        real(92364600320532989649325125.L);
-      _C4x[383] = (_n*((real(697656587238061899776.L)-
-        real(624972980070106791936.L)*_n)*_n-real(190024448782494597120.L))+
-        real(4762250782797987840.L))/real(30788200106844329883108375.L);
-      _C4x[384] = (_n*(real(139418120787643596800.L)*_n+
-        real(31886793471382519808.L))-real(44017945317094719488.L))/
-        real(30788200106844329883108375.L);
-      _C4x[385] = (real(1220363417550848.L)-real(22658460747300864.L)*_n)/
-        real(4456245492378684307875.L);
-      _C4x[386] = -real(602006238527488.L)/real(697370271282346822875.L);
-      _C4x[387] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(10102049320864422297600.L)-real(3461193947640433213440.L)*_n)*_n-
-        real(25543753282757182095360.L))+real(56270297086653502586880.L))-
-        real(108320321891807992479744.L))+real(182253240008438844489728.L))-
-        real(267095265529608651407360.L))+real(337746271250343843069952.L))-
-        real(360774426108321832370176.L))+real(309235222378561570603008.L))-
-        real(179690737328083074809856.L))+real(48469212042443460968448.L))/
-        real(683498042371944123405005925.L);
-      _C4x[388] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(75219482769268754350080.L)-real(38704807234037927116800.L)*_n)*
-        _n-real(125571610340742553141248.L))+real(179439725154106169360384.L))-
-        real(217707839073190447939584.L))+real(220974451178196151828480.L))-
-        real(182972005946382935392256.L))+real(118430510698172516401152.L))-
-        real(55718058086227310018560.L))+real(16715417425868193005568.L))-
-        real(2364351806948461510656.L))/real(227832680790648041135001975.L);
-      _C4x[389] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        ((real(786548209383195382120448.L)-real(683101994568560085565440.L)*_n)*
-        _n-real(706579164741323777376256.L))+real(435947710988690745458688.L))-
-        real(80835957312130184642560.L))-real(197642203038780277915648.L))+
-        real(297600478942318968176640.L))-real(240298944129325015760896.L))+
-        real(119793824885388716539904.L))-real(28317236757638550650880.L))/
-        real(683498042371944123405005925.L);
-      _C4x[390] = (_n*(_n*(_n*(_n*(_n*(_n*((-real(298745284339035784871936.L)*
-        _n-real(181844661380492338135040.L))*_n+
-        real(503875109365855117377536.L))-real(532888963131919415902208.L))+
-        real(346139420624792697438208.L))-real(134895879266904234262528.L))+
-        real(21575928875943341326336.L))+real(4149217091527565639680.L))-
-        real(1741189315194603438080.L))/real(683498042371944123405005925.L);
-      _C4x[391] = (_n*(_n*(_n*(_n*(_n*(_n*(real(625481215297630861524992.L)*_n-
-        real(311507795764883547488256.L))+real(14633262856967473332224.L))+
-        real(83032103549410501197824.L))-real(35308470948718134165504.L))-
-        real(18427405318254776811520.L))+real(22613233148825232736256.L))-
-        real(6701726534440505573376.L))/real(683498042371944123405005925.L);
-      _C4x[392] = (_n*(_n*(_n*(_n*((real(15856161641610625417216.L)-
-        real(145577684510862143913984.L)*_n)*_n+
-        real(89830906421704545796096.L))-real(80109879564411900788736.L))+
-        real(28539215316375146856448.L))-real(2655897422812122447872.L))-
-        real(565224981345846951936.L))/real(683498042371944123405005925.L);
-      _C4x[393] = (_n*(_n*(_n*(_n*(real(115195355797583978037248.L)*_n-
-        real(14454755071549901897728.L))-real(20615553181563458945024.L))+
-        real(3163626486103896227840.L))+real(7142848699488014434304.L))-
-        real(2934711860625154244608.L))/real(683498042371944123405005925.L);
-      _C4x[394] = (_n*(_n*(_n*(real(4790677141391228796928.L)*_n-
-        real(35567790313061593645056.L))+real(20775776885963204067328.L))-
-        real(3755713909978132643840.L))-real(126347227058877235200.L))/
-        real(683498042371944123405005925.L);
-      _C4x[395] = (_n*((real(4453118791104489062400.L)-
-        real(3436000960308748222464.L)*_n)*_n+real(2477022964560338878464.L))-
-        real(1548407882056757936128.L))/real(683498042371944123405005925.L);
-      _C4x[396] = (_n*(real(1962353802634460135424.L)*_n-
-        real(499842059402672603136.L))+real(8401322357326610432.L))/
-        real(97642577481706303343572275.L);
-      _C4x[397] = (real(16341584613992300544.L)*_n-
-        real(18302119760210427904.L))/real(13948939640243757620510325.L);
-      _C4x[398] = real(601295421440.L)/real(2991617395646009559.L);
-      _C4x[399] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(12302261468031614976000.L)*_n-real(29364963243258072268800.L))+
-        real(61601167336968044937216.L))-real(113791045219677083009024.L))+
-        real(184980516859573583216640.L))-real(263547510579499997593600.L))+
-        real(325840558534654542479360.L))-real(342132586461387269603328.L))+
-        real(289733902048382012096512.L))-real(167154174258681930055680.L))+
-        real(44922684332020768702464.L))/real(720443882500157319264735975.L);
-      _C4x[400] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(_n*
-        (real(243623288494230249406464.L)*_n-real(389328658348144555196416.L))+
-        real(536118971670202735919104.L))-real(630561151899027369885696.L))+
-        real(623834587649588330496000.L))-real(506011220312639995379712.L))+
-        real(322317957901847466344448.L))-real(149846011534024084815872.L))+
-        real(44574446468981848014848.L))-real(6268281534700572377088.L))/
-        real(720443882500157319264735975.L);
-      _C4x[401] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(750855312428744679882752.L)*
-        _n-real(641572543317776256729088.L))+real(367180187548114218909696.L))-
-        real(35929255816224116310016.L))-real(208507853106049479344128.L))+
-        real(285695264331922768134144.L))-real(224294821062004405436416.L))+
-        real(110724821813907037356032.L))-real(26117839727919051571200.L))/
-        real(720443882500157319264735975.L);
-      _C4x[402] = (_n*(_n*(_n*(_n*(_n*((real(506293824663714237775872.L)-
-        real(243700933293988116430848.L)*_n)*_n-
-        real(497074568318784553091072.L))+real(308542884215791040856064.L))-
-        real(115095479601963567415296.L))+real(16449429199352500322304.L))+
-        real(4335508471147170627584.L))-real(1600412306732061032448.L))/
-        real(720443882500157319264735975.L);
-      _C4x[403] = (_n*(_n*(_n*(_n*((-real(249298506016595411730432.L)*_n-
-        real(11351149548067983720448.L))*_n+real(81144543681383241875456.L))-
-        real(28883265100711465058304.L))-real(19695196067752600141824.L))+
-        real(21546042558357308440576.L))-real(6242878164752444424192.L))/
-        real(720443882500157319264735975.L);
-      _C4x[404] = (_n*(_n*(_n*((real(91209757380984898060288.L)-
-        real(1707339911901640392704.L)*_n)*_n-real(73805944053491853950976.L))+
-        real(24819101837534087348224.L))-real(1979789974026208673792.L))-
-        real(552149717401957564416.L))/real(720443882500157319264735975.L);
-      _C4x[405] = (_n*(_n*((-real(6128787188242108645376.L)*_n-
-        real(20268943947737811910656.L))*_n+real(1927072923661279166464.L))+
-        real(7074899618938637778944.L))-real(2768490365032270397440.L))/
-        real(720443882500157319264735975.L);
-      _C4x[406] = (_n*((real(18855843921432353439744.L)-
-        real(34853732511257991315456.L)*_n)*_n-real(3172551820670635343872.L))-
-        real(149741728961717600256.L))/real(720443882500157319264735975.L);
-      _C4x[407] = (_n*(real(3945617037685545762816.L)*_n+
-        real(2583909558702116438016.L))-real(1479950648782536835072.L))/
-        real(720443882500157319264735975.L);
-      _C4x[408] = (real(23195812695638016.L)-real(2724235770884784128.L)*_n)/
-        real(639258103371923087191425.L);
-      _C4x[409] = -real(1197385342517248.L)/real(993297829878681822495.L);
-      _C4x[410] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*((real(66589585784217811288064.L)-
-        real(33158338822878951112704.L)*_n)*_n-
-        real(118540943658973948542976.L))+real(186824897379581061758976.L))-
-        real(259479024138307030220800.L))+real(314340303527549088038912.L))-
-        real(324959908376452773445632.L))+real(272188641204208305963008.L))-
-        real(156010562641436468051968.L))+real(41788543564670482513920.L))/
-        real(757389722628370515124466025.L);
-      _C4x[411] = (_n*(_n*(_n*(_n*(_n*(_n*((real(531198236319819837210624.L)-
-        real(398859949671889162469376.L)*_n)*_n-
-        real(607454052298520879169536.L))+real(587163963192969051242496.L))-
-        real(467422909274009760694272.L))+real(293427850902015676776448.L))-
-        real(134942701164455685783552.L))+real(39832484078664630140928.L))-
-        real(5571805808622731001856.L))/real(757389722628370515124466025.L);
-      _C4x[412] = (_n*(_n*(_n*(_n*(_n*((real(306240140184498280071168.L)-
-        real(579809277507653160927232.L)*_n)*_n+real(1257057495520674578432.L))-
-        real(215487041323008192937984.L))+real(273792953769367475060736.L))-
-        real(209793979769261249265664.L))+real(102697356910298604240896.L))-
-        real(24184008190617811156992.L))/real(757389722628370515124466025.L);
-      _C4x[413] = (_n*(_n*(_n*(_n*(_n*(real(501397294896890083540992.L)*_n-
-        real(462122628304144865165312.L))+real(275231659927247534424064.L))-
-        real(98399742034279384743936.L))+real(12350304583527310557184.L))+
-        real(4415205318043258322944.L))-real(1473395456991421267968.L))/
-        real(757389722628370515124466025.L);
-      _C4x[414] = (_n*(_n*(_n*((real(77833008168170371940352.L)-
-        real(30943485290391929880576.L)*_n)*_n-real(23130375511799578492928.L))-
-        real(20590958552582778257408.L))+real(20525847732382766989312.L))-
-        real(5830820561035016011776.L))/real(757389722628370515124466025.L);
-      _C4x[415] = (_n*(_n*(_n*(real(91136767717745964875776.L)*_n-
-        real(67857240372806990954496.L))+real(21606218822048907526144.L))-
-        real(1434843986948054319104.L))-real(535303420460773933056.L))/
-        real(757389722628370515124466025.L);
-      _C4x[416] = (_n*((real(834578222963094454272.L)-
-        real(19559284417295441461248.L)*_n)*_n+real(6973703617663878561792.L))-
-        real(2615033992351722766336.L))/real(757389722628370515124466025.L);
-      _C4x[417] = (_n*(real(743768959490749104128.L)*_n-
-        real(116456150644453015552.L))-real(7222774071354720256.L))/
-        real(32929987940363935440194175.L);
-      _C4x[418] = (real(16531983056844619776.L)*_n-real(8785618937002852352.L))/
-        real(4704283991480562205742025.L);
-      _C4x[419] = real(549755813888.L)/real(1740393633548117723175.L);
-      _C4x[420] = (_n*(_n*(_n*(_n*(_n*(_n*(_n*(real(71219613512572130557952.L)*
-        _n-real(122624092620436692533248.L))+real(187917440639110775570432.L))-
-        real(255030812295936052559872.L))+real(303279884892464494936064.L))-
-        real(309112190371165735223296.L))+real(256336938356576463355904.L))-
-        real(146052441621770310516736.L))+real(39002640660359117012992.L))/
-        real(794335562756583710984196075.L);
-      _C4x[421] = (_n*(_n*(_n*(_n*(_n*(_n*(real(174707351035972396515328.L)*_n-
-        real(194742529282177752891392.L))+real(184289690819822922760192.L))-
-        real(144217008200612487102464.L))+real(89333849771326314643456.L))-
-        real(40677270655763159711744.L))+real(11922648295654719225856.L))-
-        real(1659686836611026255872.L))/real(264778520918861236994732025.L);
-      _C4x[422] = (_n*(_n*(_n*(_n*(_n*(real(252397644512405722497024.L)*_n+
-        real(31981428882762287284224.L))-real(219470015896624149037056.L))+
-        real(262100072987028269039616.L))-real(196631068090212320018432.L))+
-        real(95556519428409146736640.L))-real(22473514614110528995328.L))/
-        real(794335562756583710984196075.L);
-      _C4x[423] = (_n*(_n*(_n*((real(245742594093529094422528.L)-
-        real(428598209718128243376128.L)*_n)*_n-
-        real(84273202879125803499520.L))+real(9060779635038981455872.L))+
-        real(4419716460320395362304.L))-real(1358831239578295205888.L))/
-        real(794335562756583710984196075.L);
-      _C4x[424] = (_n*(_n*(_n*(real(73626674659528185741312.L)*_n-
-        real(18021206944965917147136.L))-real(21189610875612953575424.L))+
-        real(19556403257026017230848.L))-real(5459515958774328197120.L))/
-        real(794335562756583710984196075.L);
-      _C4x[425] = (_n*((real(818572051655419756544.L)-
-        real(2708590336148043202560.L)*_n)*_n-real(43243651582941724672.L))-
-        real(22442932828756770816.L))/real(34536328815503639608008525.L);
-      _C4x[426] = ((real(297747462928717578240.L)-real(5366082936477057024.L)*
-        _n)*_n-real(107536332602428358656.L))/
-        real(34536328815503639608008525.L);
-      _C4x[427] = (-real(98209856336580050944.L)*_n-
-        real(7703147677873078272.L))/real(34536328815503639608008525.L);
-      _C4x[428] = -real(1109241755926003712.L)/real(651628845575540369962425.L);
-      _C4x[429] = (_n*(_n*(_n*(_n*(_n*((real(188372446548648574058496.L)-
-        real(126096309848139072798720.L)*_n)*_n-
-        real(250314737530861843906560.L))+real(292675693113007694413824.L))-
-        real(294460300997843107184640.L))+real(241959627176522243112960.L))-
-        real(137110455400029271097344.L))+real(36513110405442577629184.L))/
-        real(831281402884796906843926125.L);
-      _C4x[430] = (_n*(_n*(_n*(_n*((real(520863521641793354465280.L)-
-        real(561194652455965003087872.L)*_n)*_n-
-        real(401254993895625439838208.L))+real(245528842946193068654592.L))-
-        real(110784030556294460997632.L))+real(32261283623536299081728.L))-
-        real(4470993110870519709696.L))/real(831281402884796906843926125.L);
-      _C4x[431] = (_n*(_n*(_n*(_n*(real(57297393616934582353920.L)*_n-
-        real(221146988973022337040384.L))+real(250749421703545132941312.L))-
-        real(184658496486690617556992.L))+real(89175057563171090857984.L))-
-        real(20952301048981455110144.L))/real(831281402884796906843926125.L);
-      _C4x[432] = (_n*(_n*(_n*(real(9549604208874704863232.L)*_n-
-        real(3142626702968525684736.L))+real(278836078435249422336.L))+
-        real(190069461276707258368.L))-real(54584821553358176256.L))/
-        real(36142669690643343775822875.L);
-      _C4x[433] = (_n*((-real(587443175818952441856.L)*_n-
-        real(937028772502704226304.L))*_n+real(810391095806533828608.L))-
-        real(222775242785950793728.L))/real(36142669690643343775822875.L);
-      _C4x[434] = (_n*(real(713879932158309564416.L)*_n-
-        real(27755262291019300864.L))-real(21558511513897009152.L))/
-        real(36142669690643343775822875.L);
-      _C4x[435] = (real(291535807171969155072.L)*_n-
-        real(101844234847588974592.L))/real(36142669690643343775822875.L);
-      _C4x[436] = -real(2014305302085632.L)/real(9092495519658702836685.L);
-      _C4x[437] = (_n*(_n*(_n*(_n*(_n*(real(8186477613872805052416.L)*_n-
-        real(10670408855688912568320.L))+real(12283982877768699346944.L))-
-        real(12212564372665392955392.L))+real(9950978377727357222912.L))-
-        real(5610658021484573753344.L))+real(1490331036956839903232.L))/
-        real(37749010565783047943637225.L);
-      _C4x[438] = (_n*(_n*(_n*(_n*(real(21349350625296808673280.L)*_n-
-        real(16210790175313206706176.L))+real(9808141367520744439808.L))-
-        real(4388439207198911889408.L))+real(1270337665241790283776.L))-
-        real(175333063171392929792.L))/real(37749010565783047943637225.L);
-      _C4x[439] = (_n*(_n*((real(10427075990122364141568.L)-
-        real(9611077358625893646336.L)*_n)*_n-real(7554153085891571089408.L))+
-        real(3628161362092082855936.L))-real(851854033332710932480.L))/
-        real(37749010565783047943637225.L);
-      _C4x[440] = (_n*((real(185985153811519373312.L)-
-        real(2698532126922450665472.L)*_n)*_n+real(186397233177423773696.L))-
-        real(50524793503934840832.L))/real(37749010565783047943637225.L);
-      _C4x[441] = ((real(772751830912226820096.L)-real(944604126143104155648.L)*
-        _n)*_n-real(209538601630667112448.L))/
-        real(37749010565783047943637225.L);
-      _C4x[442] = (-real(3042181548288770048.L)*_n-real(4130451769182388224.L))/
-        real(7549802113156609588727445.L);
-      _C4x[443] = -real(19316123519745523712.L)/
-        real(7549802113156609588727445.L);
-      _C4x[444] = (_n*(_n*(_n*((real(11862734745972926054400.L)-
-        real(10452819550754832384000.L)*_n)*_n-real(11665022500206710620160.L))+
-        real(9431294787401170288640.L))-real(5293073605174126182400.L))+
-        real(1402664505371143438336.L))/real(39355351440922752111451575.L);
-      _C4x[445] = (_n*(_n*((real(3011956765289579806720.L)-
-        real(5030318121789612359680.L)*_n)*_n-real(1337197542359779246080.L))+
-        real(384950807649027358720.L))-real(52930736051741261824.L))/
-        real(13118450480307584037150525.L);
-      _C4x[446] = (_n*(_n*(real(9972455762875310407680.L)*_n-
-        real(7120731442828038635520.L))+real(3403775562370347171840.L))-
-        real(798772925871731769344.L))/real(39355351440922752111451575.L);
-      _C4x[447] = (_n*(real(22195990763495489536.L)*_n+
-        real(36331664093904633856.L))-real(9370513080930271232.L))/
-        real(7871070288184550422290315.L);
-      _C4x[448] = (real(147460236699085307904.L)*_n-
-        real(39499524219294711808.L))/real(7871070288184550422290315.L);
-      _C4x[449] = -real(101260622871658496.L)/real(201822315081655139033085.L);
-      _C4x[450] = (_n*(_n*(_n*(real(2292165577145369755648.L)*_n-
-        real(2231203726689375879168.L))+real(1791034284009158868992.L))-
-        real(1000872099887471132672.L))+real(264653680258706309120.L))/
-        real(8192338463212491255853185.L);
-      _C4x[451] = (_n*(_n*(real(1669110583097171116032.L)*_n-
-        real(735699027927989485568.L))+real(210709915765783396352.L))-
-        real(28871310573677051904.L))/real(8192338463212491255853185.L);
-      _C4x[452] = ((real(640165294932485996544.L)-
-        real(1344790611331525902336.L)*_n)*_n-real(150181466405179752448.L))/
-        real(8192338463212491255853185.L);
-      _C4x[453] = (real(2711166975677038592.L)*_n-real(669628969594650624.L))/
-        real(630179881785576250450245.L);
-      _C4x[454] = -real(260856934666600448.L)/real(57289080162325113677295.L);
-      _C4x[455] = (_n*((real(131041238357599322112.L)-
-        real(164338602202563084288.L)*_n)*_n-real(72938047765078867968.L))+
-        real(19247540382451367936.L))/real(654892818326187083801235.L);
-      _C4x[456] = ((real(14834857172558413824.L)-real(52043597293893451776.L)*
-        _n)*_n-real(2026056882363301888.L))/real(654892818326187083801235.L);
-      _C4x[457] = (real(46409594160052961280.L)*_n-
-        real(10885763249307910144.L))/real(654892818326187083801235.L);
-      _C4x[458] = -real(562949953421312.L)/real(591592428478940455105.L);
-      _C4x[459] = (_n*(real(13871086852301127680.L)*_n-
-        real(7692148163548807168.L))+real(2026056882363301888.L))/
-        real(75511750540755324128025.L);
-      _C4x[460] = (real(504403158265495552.L)*_n-real(68679894317400064.L))/
-        real(25170583513585108042675.L);
-      _C4x[461] = -real(1142225455491842048.L)/real(75511750540755324128025.L);
-      _C4x[462] = (real(274719577269600256.L)-real(1044835113549955072.L)*_n)/
-        real(11179661768371567468305.L);
-      _C4x[463] = -real(9007199254740992.L)/real(3726553922790522489435.L);
-      _C4x[464] = real(9007199254740992.L)/real(399032089736190248415.L);
-      break;
-    default:
-      STATIC_ASSERT(nC4_ == 24 || nC4_ == 27 || nC4_ == 30,
-                    "Bad value of nC4_");
+  // Geodesic.cpp contains explicit expressions for _C4x[l].  However this
+  // results in extraordinarily long compiler times with real = quad (7 mins)
+  // or mpreal (15 mins).  So instead we evaluate _C4x[l] by using the Horner
+  // recursion with the coefficient stored in an array by rawC4coeff.
+
+  void GeodesicExact::C4coeff() {
+    const real* cc = rawC4coeff();
+    // Coefficients for C[4,m]
+    for (int m = 0, k = 0, h = 0; m < nC4_; ++m) {
+      // eps^j coefficient
+      for (int j = m; j < nC4_; ++j) {
+        real t = 0;
+        // n^l coefficient
+        for (int l = nC4_ - j; l--;)
+          t = _n * t + cc[h++];
+        _C4x[k++] = t/cc[h++];
+      }
     }
+    return;
   }
 
 } // namespace GeographicLib
diff --git a/src/GeodesicExactC4.cpp b/src/GeodesicExactC4.cpp
new file mode 100644
index 0000000..298d20b
--- /dev/null
+++ b/src/GeodesicExactC4.cpp
@@ -0,0 +1,7867 @@
+/**
+ * \file GeodesicExactC4.cpp
+ * \brief Implementation for GeographicLib::GeodesicExact::rawC4coeff
+ *
+ * Copyright (c) Charles Karney (2014) <charles at karney.com> and licensed under
+ * the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ *
+ * This function is split from the rest of the implementation of
+ * GeographicLib::GeodesicExact in order to work around a problem with the
+ * Visual Studio 12 compiler reported on 2014-07-14
+ * http://connect.microsoft.com/VisualStudio/feedback/details/920594
+ **********************************************************************/
+
+#include <GeographicLib/GeodesicExact.hpp>
+
+namespace GeographicLib {
+
+  using namespace std;
+
+  // If the coefficient is greater that 2^63 - 1, express it as a pair [a, b]
+  // which is combined with a*2^52 + b.  The largest coefficient is
+  // 831281402884796906843926125 = 0x2af9eaf25d149c52a73ee6d =
+  // 0x2af9eaf25d * 2^52 + 0x149c52a73ee6d which is less than 2^90.
+  // Both a and b are less that 2^52 and so are exactly representable by
+  // doubles; then the computation of the full double coefficient involves only
+  // a single rounding operation.
+
+  // Generated by Maxima on 2014-07-22 08:10:46-04:00
+  // The coefficients n^k in C4[l] in the Fourier expansion of I4
+  const Math::real* GeodesicExact::rawC4coeff() {
+#if GEOGRAPHICLIB_GEODESICEXACT_ORDER == 24
+    static const real coeff[] = {
+      // _C4x[0]
+      real(0x71a68037fdf14LL),real(0x81ebac5d53b48LL),real(0x957440e8ac5fcLL),
+      real(0xad1ce56088670LL),real(0xca0c260c189e4LL),real(0xedd10e292f598LL),
+      real(0x11a912af9e18ccLL),real(0x1534f4af92bec0LL),
+      real(0x19c5b078ed00b4LL),real(0x1fc05a701dd7e8LL),
+      real(0x27bd1031afaf9cLL),real(0x32a7dc61183710LL),
+      real(0x41fc58560eb384LL),real(0x583759590a1238LL),
+      real(0x79bd058a3bfa6cLL),real(0xaecdc650561f60LL),
+      real(0x108312ea2251254LL),real(0x1abbd57b12fd488LL),
+      real(0x2fbd21c97d5693cLL),real(0x634bf45b6b1a7b0LL),
+      real(0x11110dffb6688d24LL),real(0x666653fe46734ed8LL),
+      reale(-5735LL,0x9da06096c6c0cLL),reale(14335LL,0xf5ef0e870f1e2LL),
+      reale(21503LL,0xf0e695ca96ad3LL),
+      // _C4x[1]
+      real(0xd0da1980ba0LL),real(0x10803fb20d70LL),real(0x151a70ced0c0LL),
+      real(0x1b569dc61a10LL),real(0x23ecd2ce6de0LL),real(0x2ff80cba60b0LL),
+      real(0x413672596700LL),real(0x5a7b8b75a550LL),real(0x8082f2984020LL),
+      real(0xbb859b75abf0LL),real(0x11a6bf1637d40LL),real(0x1b9a143813890LL),
+      real(0x2d2aacb8da260LL),real(0x4e2c5253a0f30LL),real(0x914a9e2ed3380LL),
+      real(0x128a302f4ef3d0LL),real(0x2b2226f5e6b4a0LL),
+      real(0x7a36190e0daa70LL),real(0x1e8d8643836a9c0LL),
+      real(0x129e3dd12414f710LL),reale(-2185LL,0x790024cbb96e0LL),
+      reale(3276LL,0xca7fc8ce69db0LL),real(-0x5999897e7da4e4fdLL),
+      reale(7167LL,0xfaf78743878f1LL),
+      // _C4x[2]
+      real(0x65e46db33460LL),real(0x82b39a7b3380LL),real(0xa9e8c6cf36a0LL),
+      real(0xe0317d0fa0c0LL),real(0x12cd0399df4e0LL),real(0x19b576ed17600LL),
+      real(0x23ecb07d1c720LL),real(0x33785d3e48b40LL),real(0x4bedad56b0560LL),
+      real(0x73f4d1eccb880LL),real(0xb8a5a1bdc07a0LL),real(0x1359aad161d5c0LL),
+      real(0x22a518d96d25e0LL),real(0x43a50f3643bb00LL),
+      real(0x95133a4d60b820LL),real(0x18b02de0f4e4040LL),
+      real(0x5ac287501571660LL),real(0x31a5fa2db58d3d80LL),
+      reale(-5088LL,0xf42d1707298a0LL),reale(6752LL,0x2ce8487308ac0LL),
+      reale(-2185LL,0x790024cbb96e0LL),real(-0x199994ff919cd3b6LL),
+      reale(21503LL,0xf0e695ca96ad3LL),
+      // _C4x[3]
+      real(0x1d8a60744340LL),real(0x26a12f47d0f0LL),real(0x3353c9ffe420LL),
+      real(0x4570fd193850LL),real(0x5fe8194aa900LL),real(0x87a7057de1b0LL),
+      real(0xc54ab4558de0LL),real(0x12897a64b8910LL),real(0x1d013b7f18ec0LL),
+      real(0x2fb033b96ea70LL),real(0x5384f3e45a7a0LL),real(0x9f10eb531c1d0LL),
+      real(0x154d17c994d480LL),real(0x36ab828088cb30LL),
+      real(0xc1d47f99841160LL),real(0x65b5717bb21c290LL),
+      real(-0x269fd1ef6edfa5c0LL),real(0x2dc2d3f3f9f963f0LL),
+      real(-0xf46c321c1b54e0LL),real(-0x14642b52c5fe94b0LL),
+      real(0x6b46a122c3b5c05LL),reale(3071LL,0xfdd7cc41833d5LL),
+      // _C4x[4]
+      real(0x3804d31f10c0LL),real(0x4b2ec20ad280LL),real(0x66f0ea418040LL),
+      real(0x903f2204b400LL),real(0xcfad72d447c0LL),real(0x134cb9fa41580LL),
+      real(0x1dd70e331b740LL),real(0x306dd8a084700LL),real(0x53a0a0b201ec0LL),
+      real(0x9cd7c33c89880LL),real(0x14a7b599a9ce40LL),
+      real(0x340e256f2c5a00LL),real(0xb4e7d2cf7515c0LL),
+      real(0x5cc8e678862db80LL),real(-0x22304c48df63bac0LL),
+      real(0x25f7d3a888bb6d00LL),real(0x3210c8a6905acc0LL),
+      real(-0x131873ea3222a180LL),real(0x4a33217f63b9c40LL),
+      real(0xaa39109cb79b1cLL),reale(3071LL,0xfdd7cc41833d5LL),
+      // _C4x[5]
+      real(0x6a525328e6e0LL),real(0x93f17033fb30LL),real(0xd36a04706f00LL),
+      real(0x137db4aaadad0LL),real(0x1de17febed720LL),real(0x300ece09a4c70LL),
+      real(0x5230537724340LL),real(0x98911a7bab410LL),real(0x13df6f0042d760LL),
+      real(0x317f809c6f75b0LL),real(0xa9d28ba9acb780LL),
+      real(0x55d121ad9d8f550LL),real(-0x1efee1555125f860LL),
+      real(0x21073529064696f0LL),real(0x486394f46ccebc0LL),
+      real(-0x11777145e6374170LL),real(0x54159fc268987e0LL),
+      real(-0x1fa4dd5835d2fd0LL),real(0x13d87fc86cca643LL),
+      reale(3071LL,0xfdd7cc41833d5LL),
+      // _C4x[6]
+      real(0x5c9c64c833ea0LL),real(0x87cba49bc6200LL),real(0xcee016a8ff560LL),
+      real(0x14a860e941a1c0LL),real(0x231567934bf020LL),
+      real(0x40a648fc642980LL),real(0x85b2123b2c36e0LL),
+      real(0x14a4159e5b98140LL),real(0x462d226dee7d1a0LL),
+      real(0x2316888f6f2f3100LL),reale(-3199LL,0xcb6e58663c860LL),
+      reale(3311LL,0xbf8f265e6c0c0LL),real(0x2372de10575f2320LL),
+      real(-0x70af5543c56e4780LL),real(0x24bbd6e6395ee9e0LL),
+      real(-0x116009bab4325fc0LL),real(0x75b7dfa9c5a24a0LL),
+      real(0x17de90e4beab49eLL),reale(21503LL,0xf0e695ca96ad3LL),
+      // _C4x[7]
+      real(0xcb641c2517300LL),real(0x1435342f6c1790LL),
+      real(0x2223c168d902a0LL),real(0x3e90a70fac72b0LL),
+      real(0x80a310c4f84640LL),real(0x13bcb7c20d40bd0LL),
+      real(0x42a5540b0e391e0LL),real(0x210e40977bd376f0LL),
+      reale(-2981LL,0x6b26210e33980LL),reale(3022LL,0x503caf61c4810LL),
+      real(0x24d397da2b859120LL),real(-0x68d822cc2f04ecd0LL),
+      real(0x23a043b28810ecc0LL),real(-0x125159fafe6e93b0LL),
+      real(0x9e1bc8a31f5a060LL),real(-0x46aed7b45d01890LL),
+      real(0x30c71f0f146542fLL),reale(21503LL,0xf0e695ca96ad3LL),
+      // _C4x[8]
+      real(0x21331eec152c80LL),real(0x3c94fa87392d00LL),
+      real(0x7bff534019c580LL),real(0x12eee208e5fe200LL),
+      real(0x3f965ae4945ee80LL),real(0x1f56cb06e4e85700LL),
+      reale(-2803LL,0xffb9171e60780LL),reale(2796LL,0xadb20bd4ec00LL),
+      real(0x251d0efe774e7080LL),real(-0x625b74d58e27ff00LL),
+      real(0x224674d7e8ab8980LL),real(-0x1260f3bdc69c0a00LL),
+      real(0xad7256a98d1b280LL),real(-0x63bd65ce944d500LL),
+      real(0x2df89c0cd0d4b80LL),real(0xa46618fc50ff08LL),
+      reale(21503LL,0xf0e695ca96ad3LL),
+      // _C4x[9]
+      real(0x77c3b2fb788360LL),real(0x12370e8b6ebba50LL),
+      real(0x3ce89570a2d35c0LL),real(0x1ddd463aa5801f30LL),
+      reale(-2653LL,0xf49e89f0f6020LL),reale(2613LL,0x24df88b461210LL),
+      real(0x24dea39341926e80LL),real(-0x5ce704fae2f44110LL),
+      real(0x20ecef343dc3cce0LL),real(-0x121947a4ab4bae30LL),
+      real(0xb2a76f84c78e740LL),real(-0x70dd3a5c9a20950LL),
+      real(0x43604f2667d29a0LL),real(-0x1fa7f2abdd82670LL),
+      real(0x169d55eb03244c1LL),reale(21503LL,0xf0e695ca96ad3LL),
+      // _C4x[10]
+      real(0x85cd94c7a43620LL),real(0x41534458719f180LL),
+      real(-0x1688b497e3eabf20LL),real(0x15fa3ad6bcd8bd40LL),
+      real(0x531c27984875fa0LL),real(-0xc9b33381ee39f00LL),
+      real(0x485a2b8a7ad1a60LL),real(-0x286be979df41b40LL),
+      real(0x199b6e19072f920LL),real(-0x10f769bc7a1af80LL),
+      real(0xb2b30e0b2b83e0LL),real(-0x6d4c30bc0953c0LL),
+      real(0x3405b9397b42a0LL),real(0xc1ffd0ada51beLL),
+      reale(3071LL,0xfdd7cc41833d5LL),
+      // _C4x[11]
+      real(-0x158a522ca96a9f40LL),real(0x14d4e49882e048f0LL),
+      real(0x51a6258bc6026a0LL),real(-0xc07af3677bdc6b0LL),
+      real(0x45ac09bc3b66080LL),real(-0x275e4ef59a8b450LL),
+      real(0x195f928e5402a60LL),real(-0x114aa7eeb31a3f0LL),
+      real(0xbf706c784da040LL),real(-0x817ec7d97ab990LL),
+      real(0x508b8ca80cde20LL),real(-0x26b120ea091930LL),
+      real(0x1c1ab3faf18ecdLL),reale(3071LL,0xfdd7cc41833d5LL),
+      // _C4x[12]
+      real(0x500e39e18e75c40LL),real(-0xb866fe4aaa63680LL),
+      real(0x4337db32e526ac0LL),real(-0x264cce8c21af200LL),
+      real(0x18fb7ba247a4140LL),real(-0x115709558576d80LL),
+      real(0xc5be96cd3dcfc0LL),real(-0x8cdca1395db900LL),
+      real(0x611fe1a7e00640LL),real(-0x3d26e46827e480LL),
+      real(0x1d93970a8fd4c0LL),real(0x70bf87cc17354LL),
+      reale(3071LL,0xfdd7cc41833d5LL),
+      // _C4x[13]
+      real(0x1c6d2d6120015ca0LL),real(-0x104cedef383403b0LL),
+      real(0xab9dd58c3e3d880LL),real(-0x78a4e83e5604750LL),
+      real(0x57aa7cf5406e460LL),real(-0x4067a93ceeb2cf0LL),
+      real(0x2ed62190d975c40LL),real(-0x20c076adcb21890LL),
+      real(0x14cfa9cb9e01c20LL),real(-0xa1e25734956e30LL),
+      real(0x76afbfe4ae6c4dLL),reale(21503LL,0xf0e695ca96ad3LL),
+      // _C4x[14]
+      real(0xa82410caed14920LL),real(-0x774e0539d2de300LL),
+      real(0x57ddc01c62bc8e0LL),real(-0x41de50dfff43e40LL),
+      real(0x31742450a1bdca0LL),real(-0x248524531975180LL),
+      real(0x19d013c6e35ec60LL),real(-0x1084c003a0434c0LL),
+      real(0x8103758ad86020LL),real(0x1f2409edf5e286LL),
+      reale(21503LL,0xf0e695ca96ad3LL),
+      // _C4x[15]
+      real(0x577cdb6aaee0d80LL),real(-0x4283c1e96325470LL),
+      real(0x32feef20b794020LL),real(-0x26ea2e388de1a50LL),
+      real(0x1d13f6131e5d6c0LL),real(-0x14b9aa66e270230LL),
+      real(0xd5657196ac0560LL),real(-0x6880b0118a9810LL),
+      real(0x4d0f1755168ee7LL),reale(21503LL,0xf0e695ca96ad3LL),
+      // _C4x[16]
+      real(0x33d84b92096e100LL),real(-0x286d35d824ffe00LL),
+      real(0x1f3d33e2e951300LL),real(-0x178f58435181400LL),
+      real(0x10e7992a3756500LL),real(-0xaed7fa8609aa00LL),
+      real(0x55d8ac87b09700LL),real(0x14e51e43945a10LL),
+      reale(21503LL,0xf0e695ca96ad3LL),
+      // _C4x[17]
+      real(0x4aad22c875ed20LL),real(-0x3a4801a1c6bad0LL),
+      real(0x2c487fb318d4c0LL),real(-0x1ff24d7cfd75b0LL),
+      real(0x14ba39245f1460LL),real(-0xa32e190328e90LL),
+      real(0x78c93074dfcffLL),reale(3071LL,0xfdd7cc41833d5LL),
+      // _C4x[18]
+      real(0x303f35e1bc93a0LL),real(-0x24e1f056b1d580LL),
+      real(0x1ab9fe0d1d4d60LL),real(-0x1164c583e996c0LL),
+      real(0x892da1e80cb20LL),real(0x2194519fdb596LL),
+      reale(3071LL,0xfdd7cc41833d5LL),
+      // _C4x[19]
+      real(0x4114538e4c0LL),real(-0x2f55bac3db0LL),real(0x1ee26e63c60LL),
+      real(-0xf3f108c690LL),real(0xb50b862ee7LL),real(0x19244124e56e27LL),
+      // _C4x[20]
+      real(0x33fcdea140LL),real(-0x21fe753a80LL),real(0x10cd7f3dc0LL),
+      real(0x421366044LL),real(0x205dc0bcbd6d7LL),
+      // _C4x[21]
+      real(0x1285360LL),real(-0x92a110LL),real(0x6d084fLL),
+      real(0x147638f7f9LL),
+      // _C4x[22]
+      real(0x4f2fa0LL),real(0x13852eLL),real(0xcb8314033LL),
+      // _C4x[23]
+      real(2113LL),real(0x209510dLL),
+      // _C4x[24]
+      real(-0xd0da1980ba0LL),real(-0x10803fb20d70LL),real(-0x151a70ced0c0LL),
+      real(-0x1b569dc61a10LL),real(-0x23ecd2ce6de0LL),real(-0x2ff80cba60b0LL),
+      real(-0x413672596700LL),real(-0x5a7b8b75a550LL),real(-0x8082f2984020LL),
+      real(-0xbb859b75abf0LL),real(-0x11a6bf1637d40LL),
+      real(-0x1b9a143813890LL),real(-0x2d2aacb8da260LL),
+      real(-0x4e2c5253a0f30LL),real(-0x914a9e2ed3380LL),
+      real(-0x128a302f4ef3d0LL),real(-0x2b2226f5e6b4a0LL),
+      real(-0x7a36190e0daa70LL),real(-0x1e8d8643836a9c0LL),
+      real(-0x129e3dd12414f710LL),reale(2184LL,0x86ffdb3446920LL),
+      reale(-3277LL,0x3580373196250LL),real(0x5999897e7da4e4fdLL),
+      reale(64511LL,0xd2b3c15fc4079LL),
+      // _C4x[25]
+      real(-0x2271f7278cc0LL),real(-0x2c3f5c6ec900LL),real(-0x399dc5a18140LL),
+      real(-0x4c2bebb96280LL),real(-0x6670101499c0LL),real(-0x8c75450f5400LL),
+      real(-0xc4e9f8733e40LL),real(-0x11b3ff75a0580LL),
+      real(-0x1a3e7cf3fd6c0LL),real(-0x2853a9e02df00LL),
+      real(-0x40b8bca6ccb40LL),real(-0x6da2a9d234880LL),
+      real(-0xc6fc7477c83c0LL),real(-0x18bdddb834aa00LL),
+      real(-0x37ff6cf7616840LL),real(-0x9a5f4811c06b80LL),
+      real(-0x25bde21729de0c0LL),real(-0x16ea24b2a28ff500LL),
+      reale(2841LL,0x69c686bdbaac0LL),reale(-5561LL,0x628c009235180LL),
+      reale(4369LL,0xdffb6688d240LL),real(-0x4cccbefeb4d67b22LL),
+      reale(64511LL,0xd2b3c15fc4079LL),
+      // _C4x[26]
+      real(-0xa4172dfa1c0LL),real(-0xd77fb109ed0LL),real(-0x11fc3eda7860LL),
+      real(-0x1879b9235cf0LL),real(-0x2209eb95db00LL),real(-0x308bcfa5f110LL),
+      real(-0x47510fa29da0LL),real(-0x6c88ffcf6f30LL),real(-0xac6dd3019440LL),
+      real(-0x120fcca63eb50LL),real(-0x206b8121592e0LL),
+      real(-0x3fc3a9ace7970LL),real(-0x8ea4f3b556d80LL),
+      real(-0x18488ccc5b2d90LL),real(-0x5db9d9787df820LL),
+      real(-0x37d6c7544511bb0LL),real(0x1a02f9f8abfbf940LL),
+      real(-0x2d9fe91163ac57d0LL),real(0x18b01234447992a0LL),
+      real(0x46ed1c414c80a10LL),real(-0x57c56c90ceabfa7LL),
+      reale(9215LL,0xf98764c489b7fLL),
+      // _C4x[27]
+      real(-0x14469ef39280LL),real(-0x1b74a6d65900LL),real(-0x25fc6724f380LL),
+      real(-0x35e25bf6c800LL),real(-0x4eb76c6a3c80LL),real(-0x771a92ddb700LL),
+      real(-0xbc1644489d80LL),real(-0x13946cde25600LL),
+      real(-0x22eaf36054680LL),real(-0x44349dbbbd500LL),
+      real(-0x976a625a56780LL),real(-0x1989ef99e16400LL),
+      real(-0x6150e2c16e3080LL),real(-0x38c68feccea3300LL),
+      real(0x1963a1a8e71b2e80LL),real(-0x2849f713f5ed7200LL),
+      real(0xd30bac57bb18580LL),real(0x105e1a36741daf00LL),
+      real(-0xc8c696e03b05b80LL),real(0x1feab31d626d154LL),
+      reale(9215LL,0xf98764c489b7fLL),
+      // _C4x[28]
+      real(-0x11dc9e54dea60LL),real(-0x193ec5647cdf0LL),
+      real(-0x24bda460ceb00LL),real(-0x3760182d9a010LL),
+      real(-0x5717ea0e54ba0LL),real(-0x907095ecddc30LL),
+      real(-0x10063188dee040LL),real(-0x1f228e862f9650LL),
+      real(-0x44adcde9a37ce0LL),real(-0xb7cbf8f2d0e270LL),
+      real(-0x2b3f803c770f580LL),real(-0x18c05d008644d490LL),
+      reale(2737LL,0x3ce4b1d74e1e0LL),reale(-4018LL,0x2086131467f50LL),
+      real(0x30ac41edd5123540LL),real(0x7e3ade121a8e0530LL),
+      real(-0x45ec5d28a0fecf60LL),real(0x3577aaf625fa910LL),
+      real(0x7292b77d2ccfc9LL),reale(64511LL,0xd2b3c15fc4079LL),
+      // _C4x[29]
+      real(-0x2678d0ed9f140LL),real(-0x39d0dbe263c00LL),
+      real(-0x5aa623a5216c0LL),real(-0x95d2f30c44880LL),
+      real(-0x108ea4db631840LL),real(-0x2005d27e0acd00LL),
+      real(-0x463ad5e0e22dc0LL),real(-0xba80ab02c40180LL),
+      real(-0x2b67c47d5d48f40LL),real(-0x186d6a49f7da1e00LL),
+      reale(2625LL,0x9832921f08b40LL),reale(-3628LL,0xf58d11b98a580LL),
+      real(0x17be252bac67e9c0LL),real(0x7a8f5366d9ba1100LL),
+      real(-0x38a15d77b043abc0LL),real(0x9cd4e0bf35fec80LL),
+      real(-0xceae5004f176d40LL),real(0x479bb2ae3c01ddaLL),
+      reale(64511LL,0xd2b3c15fc4079LL),
+      // _C4x[30]
+      real(-0xd56426d4f700LL),real(-0x15fa65017d450LL),
+      real(-0x26ba18ad11e20LL),real(-0x4a9605f1a58f0LL),
+      real(-0xa2b494aee2940LL),real(-0x1ad07f38fd2390LL),
+      real(-0x62deb836d71c60LL),real(-0x36d68c47bf27830LL),
+      real(0x167d3fa4abc50480LL),real(-0x1d9b2fd161b99ad0LL),
+      real(0x13a59aea9293560LL),real(0x10886ca52ccf3090LL),
+      real(-0x6e8a4c27dbf8dc0LL),real(0x1f02cd8f1f8a5f0LL),
+      real(-0x2216230a1ac48e0LL),real(0x5f13c815b08150LL),
+      real(0x1666b06ca8f56dLL),reale(9215LL,0xf98764c489b7fLL),
+      // _C4x[31]
+      real(-0x1138d3e7324700LL),real(-0x210a1008a4f200LL),
+      real(-0x47b7d2285e8500LL),real(-0xbbe3dba17a1400LL),
+      real(-0x2aeb63e9e4cb300LL),real(-0x1781d8a9c80b7600LL),
+      reale(2419LL,0xe4212c9be8f00LL),reale(-3064LL,0x283dcf5264800LL),
+      real(-0x116171a56015f00LL),real(0x6cc31b4079da8600LL),
+      real(-0x2af22cc657d11d00LL),real(0xf75e4ec12d0a400LL),
+      real(-0xeb60cc0dd754b00LL),real(0x472a49a74880200LL),
+      real(-0x4174f343c328900LL),real(0x1ed324af4f2fd18LL),
+      reale(64511LL,0xd2b3c15fc4079LL),
+      // _C4x[32]
+      real(-0x47f3709eaa4320LL),real(-0xbb640bc2e1ae70LL),
+      real(-0x2a7854a3ead7b40LL),real(-0x1701de8d91314210LL),
+      reale(2329LL,0x5f8472b9624a0LL),reale(-2856LL,0x183ee7d78d050LL),
+      real(-0x785bf95be998780LL),real(0x66690260b30024b0LL),
+      real(-0x272595745774a3a0LL),real(0x104f772bee315710LL),
+      real(-0xe11ad02f34b53c0LL),real(0x5a192e055800370LL),
+      real(-0x58d8bfb781fbbe0LL),real(0x17a156426e4c5d0LL),
+      real(0x5c88907e67c575LL),reale(64511LL,0xd2b3c15fc4079LL),
+      // _C4x[33]
+      real(-0x5fe482817c4c40LL),real(-0x3373730b4b79d00LL),
+      real(0x140f919171472640LL),real(-0x17f10e5417ef9980LL),
+      real(-0x1b454cf244cf340LL),real(0xdd42319af5c0200LL),
+      real(-0x530205145e450c0LL),real(0x25eec00584a7d80LL),
+      real(-0x1e9e562555aaa40LL),real(0xe85806d73b2100LL),
+      real(-0xde44387c5bb7c0LL),real(0x581f06023d3480LL),
+      real(-0x421ccd71c33140LL),real(0x245ff7208ef53aLL),
+      reale(9215LL,0xf98764c489b7fLL),
+      // _C4x[34]
+      real(0x13635f7860ae69c0LL),real(-0x169d904d9d4691d0LL),
+      real(-0x2254277308cd9e0LL),real(0xd20446e8d8a9710LL),
+      real(-0x4df2aedeefd1980LL),real(0x25e2aff2baec9f0LL),
+      real(-0x1d3856fa2b08920LL),real(0xf7cadc640f92d0LL),
+      real(-0xe3d2f6c9ad5cc0LL),real(0x6e412eaf297db0LL),
+      real(-0x62000ef613c860LL),real(0x201266fb021690LL),
+      real(0x7ee4c480c21e1LL),reale(9215LL,0xf98764c489b7fLL),
+      // _C4x[35]
+      real(-0x113775cb09582880LL),real(0x5790112bb17c4700LL),
+      real(-0x204e01ed2b929d80LL),real(0x1063af9e8d99cc00LL),
+      real(-0xc3ef805036ada80LL),real(0x701a56aa2d31100LL),
+      real(-0x63910631abdcf80LL),real(0x368e0c562512600LL),
+      real(-0x31ed34307286c80LL),real(0x170e89cb9dd1b00LL),
+      real(-0xf5f0efdd07a180LL),real(0x93fb623bde75e4LL),
+      reale(64511LL,0xd2b3c15fc4079LL),
+      // _C4x[36]
+      real(-0x1ecd4a3794400de0LL),real(0x101df33ec1bb0110LL),
+      real(-0xbc64ec7794b2980LL),real(0x71d5f4e2a637ff0LL),
+      real(-0x625888ecafc7520LL),real(0x3aa6879742ff4d0LL),
+      real(-0x3585f7f60d164c0LL),real(0x1d18174ef21abb0LL),
+      real(-0x18117eb39416c60LL),real(0x8df7a42ab2f090LL),
+      real(0x23413de9276581LL),reale(64511LL,0xd2b3c15fc4079LL),
+      // _C4x[37]
+      real(-0x19f69929deb8bc0LL),real(0x1054723730b1600LL),
+      real(-0xdce6aeb616e040LL),real(0x8c0069813d6480LL),
+      real(-0x7e59f70027c8c0LL),real(0x4bea01551feb00LL),
+      real(-0x42bb28790cad40LL),real(0x21dd61f97d4180LL),
+      real(-0x14f93d4343f5c0LL),real(0xd58968a8df35eLL),
+      reale(9215LL,0xf98764c489b7fLL),
+      // _C4x[38]
+      real(-0x5ec1dcd7666b480LL),real(0x3ed4935a3fd8cd0LL),
+      real(-0x38014f5e5d79960LL),real(0x240af6a53256570LL),
+      real(-0x2049d0fb0404a40LL),real(0x12efbc065d3f410LL),
+      real(-0xee9d804d5d8320LL),real(0x5ed209adebbcb0LL),
+      real(0x1798ea7fdd6773LL),reale(64511LL,0xd2b3c15fc4079LL),
+      // _C4x[39]
+      real(-0x3822c174e5c7e00LL),real(0x25fbaf973d78c00LL),
+      real(-0x222a860fbdb7a00LL),real(0x15dabd7a0984800LL),
+      real(-0x129f00215535600LL),real(0xa0e9e0ae9b8400LL),
+      real(-0x5ee97a6d2d5200LL),real(0x3eaf5acabd0e30LL),
+      reale(64511LL,0xd2b3c15fc4079LL),
+      // _C4x[40]
+      real(-0x50a85b2e2e4060LL),real(0x36bb9aa442c6f0LL),
+      real(-0x3029aafbbe0440LL),real(0x1dc29c0bd6ce90LL),
+      real(-0x16a422844d9020LL),real(0x9763b8d8ca030LL),
+      real(0x25b8d7edff7ebLL),reale(9215LL,0xf98764c489b7fLL),
+      // _C4x[41]
+      real(-0x33e9644cad5b40LL),real(0x22b6849ca6a500LL),
+      real(-0x1ce364ad2a4ec0LL),real(0x104aaed8cf4680LL),
+      real(-0x949f0f8a89e40LL),real(0x64bcf4df920c2LL),
+      reale(9215LL,0xf98764c489b7fLL),
+      // _C4x[42]
+      real(-0x2066cb6031fc0LL),real(0x14c85e7394470LL),real(-0xf6b8f35571e0LL),
+      real(0x6ad3f08040d0LL),real(0x1aa3b2832565LL),real(0x230f8ed873f29c63LL),
+      // _C4x[43]
+      real(-0x3769db6980LL),real(0x203de5a900LL),real(-0x11f0163080LL),
+      real(0xc63a320ccLL),real(0x6119423638485LL),
+      // _C4x[44]
+      real(-0x4ca72060LL),real(0x220f8a90LL),real(0x87f8721LL),
+      real(0xef8343fb2e1LL),
+      // _C4x[45]
+      real(-0x539b40LL),real(0x3a8f8aLL),real(0x262893c099LL),
+      // _C4x[46]
+      real(3401LL),real(0x1e8bbfc3LL),
+      // _C4x[47]
+      real(0x49e4c0b060LL),real(0x687ef6a180LL),real(0x96820442a0LL),
+      real(0xdd4138e7c0LL),real(0x14ccaecc4e0LL),real(0x201acdf4e00LL),
+      real(0x33093819720LL),real(0x53ed06eb440LL),real(0x8f8eb441960LL),
+      real(0x1013bf0bfa80LL),real(0x1e750d7baba0LL),real(0x3dc4346800c0LL),
+      real(0x88729901ade0LL),real(0x150e863aba700LL),real(0x3c89c1e8d8020LL),
+      real(0xd9efed463cd40LL),real(0x47e39644808260LL),
+      real(0x3d1b0c8706d5380LL),real(-0x2af704cef0cdeb60LL),
+      real(0x7c1ef17245e119c0LL),reale(-2185LL,0x790024cbb96e0LL),
+      real(0x333329ff2339a76cLL),reale(107519LL,0xb480ecf4f161fLL),
+      // _C4x[48]
+      real(0x3f9079b600LL),real(0x5c3030c280LL),real(0x88a1097700LL),
+      real(0xcf80e01b80LL),real(0x1440886f800LL),real(0x20a73015480LL),
+      real(0x36a4a027900LL),real(0x5f8b4acad80LL),real(0xb01798c3a00LL),
+      real(0x15a2eb8a6680LL),real(0x2e235b147b00LL),real(0x6d6a30f2bf80LL),
+      real(0x12c54474b7c00LL),real(0x40129870df880LL),real(0x13e41ecc817d00LL),
+      real(0xfcf67c8cf45180LL),real(-0xa65f288fe794200LL),
+      real(0x1cea83a477ce0a80LL),real(-0x240239aaff748100LL),
+      real(0x1547221396f36380LL),real(-0x4e04d247d427178LL),
+      reale(15359LL,0xf536fd4790329LL),
+      // _C4x[49]
+      real(0x6f3f0983c40LL),real(0xa6cf9192980LL),real(0x100e50e166c0LL),
+      real(0x197f658cec00LL),real(0x29f706a6f140LL),real(0x480b7a0eae80LL),
+      real(0x821ecd9c1bc0LL),real(0xfa1d1da0b100LL),real(0x2081a78802640LL),
+      real(0x4aefd4add3380LL),real(0xc730805b650c0LL),real(0x28f491e04e7600LL),
+      real(0xc2d07512dddb40LL),real(0x92e539684c6b880LL),
+      real(-0x5a2096cfc695fa40LL),reale(3598LL,0x9cd1e91b83b00LL),
+      reale(-3554LL,0xe2b69fe3a1040LL),real(0x31a5fa2db58d3d80LL),
+      real(0x3760835a5e313ac0LL),real(-0x1bed5cb9b61f7298LL),
+      reale(107519LL,0xb480ecf4f161fLL),
+      // _C4x[50]
+      real(0x181437e05500LL),real(0x25c7b1fe6a80LL),real(0x3d5ebd606800LL),
+      real(0x67dd27f0e580LL),real(0xb8ac7d2a7b00LL),real(0x15ce71e5cc080LL),
+      real(0x2c7c6a3654e00LL),real(0x6460c05d0bb80LL),real(0x1046637cd7a100LL),
+      real(0x340d46956b9680LL),real(0xef5f1bde883400LL),
+      real(0xacec6aed73c1180LL),real(-0x63ea680d7ea23900LL),
+      reale(3605LL,0xecc3861a0ec80LL),reale(-2760LL,0x37fb593bf1a00LL),
+      real(-0x212a787bd0571880LL),real(0x70c6a0884332ed00LL),
+      real(-0x31a5fa2db58d3d80LL),real(0x5033807138f7d98LL),
+      reale(107519LL,0xb480ecf4f161fLL),
+      // _C4x[51]
+      real(0x511612baa2a0LL),real(0x87a79de92a00LL),real(0xee2dd20af160LL),
+      real(0x1bbcfaf32f4c0LL),real(0x37ba524fb5020LL),real(0x7b9b8f2a45f80LL),
+      real(0x13a76fcf6fdee0LL),real(0x3d717a0fbe0a40LL),
+      real(0x112dc752f02bda0LL),real(0xbfa002cc4689500LL),
+      real(-0x694405622017f3a0LL),reale(3484LL,0x979f3cbb89fc0LL),
+      reale(-2089LL,0xb01dfba51eb20LL),real(-0x49f87439584d3580LL),
+      real(0x6c3e90c1455479e0LL),real(-0x1afff07538f04ac0LL),
+      real(-0x1a0f4cdf3b62760LL),real(-0x112f9b85f9ebf7cLL),
+      reale(107519LL,0xb480ecf4f161fLL),
+      // _C4x[52]
+      real(0x2957d7da1000LL),real(0x4c28ba8a3700LL),real(0x9714a6610e00LL),
+      real(0x14a5ff52a4500LL),real(0x33af2f78d8c00LL),real(0x9e87298409300LL),
+      real(0x2b4e15dbd10a00LL),real(0x1d4c6da210ea100LL),
+      real(-0xf6c4a6847e2f800LL),real(0x1da98c51a6b5ef00LL),
+      real(-0xe1270d810dcfa00LL),real(-0xd23a021f3080300LL),
+      real(0xd3b280b26948400LL),real(-0x22fd890d309b500LL),
+      real(0x119ef453c630200LL),real(-0x1959af9980da700LL),
+      real(0x5959078fa70870LL),reale(15359LL,0xf536fd4790329LL),
+      // _C4x[53]
+      real(0xacc0646b5180LL),real(0x1753663f74b00LL),real(0x3994d0061e480LL),
+      real(0xadc1fbdd72e00LL),real(0x2e87a44adab780LL),
+      real(0x1eaeb3451821100LL),real(-0xf937e414930b580LL),
+      real(0x1c27d8b21df37400LL),real(-0xaa5908f76fee280LL),
+      real(-0xe1c8d327ee92900LL),real(0xb2675f22d49b080LL),
+      real(-0x19e66cd66684600LL),real(0x1f3a47aa5ea8380LL),
+      real(-0x18da246c74e6300LL),real(0x10dd3b80dd1680LL),
+      real(0x3f21f272d2a30LL),reale(15359LL,0xf536fd4790329LL),
+      // _C4x[54]
+      real(0x1b709db1871200LL),real(0x51a2a024c26b00LL),
+      real(0x157c554050bb400LL),real(0xddb41f944653d00LL),
+      real(-0x6d182f563006aa00LL),reale(2991LL,0xf7eb0ae304f00LL),
+      real(-0x387b65599c618800LL),real(-0x64242336a83ddf00LL),
+      real(0x4282c6eaa3899a00LL),real(-0xa8fc3afb1e6cd00LL),
+      real(0x1040dddbf0493c00LL),real(-0x9184bc07b2bfb00LL),
+      real(0x281ea22622bde00LL),real(-0x3dc59bc648ee900LL),
+      real(0x13fb78815b4ca90LL),reale(107519LL,0xb480ecf4f161fLL),
+      // _C4x[55]
+      real(0x332d666e095e20LL),real(0x205e97ebfb32780LL),
+      real(-0xf80bf36cd359f20LL),real(0x19615ff8d71e0640LL),
+      real(-0x61aef235a414c60LL),real(-0xe1fda0393083b00LL),
+      real(0x83e2ad192fc7660LL),real(-0x18ece140ef0fc40LL),
+      real(0x26bbb213037c920LL),real(-0x11a4c9418dd9d80LL),
+      real(0x9ec708de66cbe0LL),real(-0xaee5994e9b7ec0LL),
+      real(0x1626e135e59ea0LL),real(0x610ef2b6b35c4LL),
+      reale(15359LL,0xf536fd4790329LL),
+      // _C4x[56]
+      real(-0x6b8bdbaa2666e600LL),reale(2706LL,0x6d4e4332c7e80LL),
+      real(-0x201eb2939ffc7500LL),real(-0x605f6d97c740b880LL),
+      real(0x32fb1ca66ccebc00LL),real(-0xb85f2dd585e0f80LL),
+      real(0x10b7dbe9dec0ed00LL),real(-0x6e454f6a0fd4680LL),
+      real(0x594f6f139205e00LL),real(-0x4c204810d601d80LL),
+      real(0x16a875347934f00LL),real(-0x1be72589c185480LL),
+      real(0xb5a396e2ccd788LL),reale(107519LL,0xb480ecf4f161fLL),
+      // _C4x[57]
+      real(-0x17ce935fc610ad40LL),real(-0x5d5bbde81a902580LL),
+      real(0x2dcc12fb45c89240LL),real(-0xc1c61e98a479e00LL),
+      real(0x10183633a5ddf1c0LL),real(-0x672de318faa1680LL),
+      real(0x64ee85310393140LL),real(-0x481cf983db0cf00LL),
+      real(0x2299f24f52810c0LL),real(-0x271fc56086d0780LL),
+      real(0x79dac155045040LL),real(0x20c44d35dada38LL),
+      reale(107519LL,0xb480ecf4f161fLL),
+      // _C4x[58]
+      real(0x29bb6acaa073ef00LL),real(-0xc930d526d728e80LL),
+      real(0xf55c2b3103d0c00LL),real(-0x63b9281a5449980LL),
+      real(0x6acdfd5dbb92900LL),real(-0x441c8fce3be0480LL),
+      real(0x2be797a45cb8600LL),real(-0x2aec3395f438f80LL),
+      real(0xec70ff5d376300LL),real(-0xedc27143c9fa80LL),
+      real(0x7039bcd0124e68LL),reale(107519LL,0xb480ecf4f161fLL),
+      // _C4x[59]
+      real(0x21490cd145715e0LL),real(-0xe087822f191900LL),
+      real(0xf91f2bb3d29820LL),real(-0x949428c90dc2c0LL),
+      real(0x7371ad50b34a60LL),real(-0x63c52e9a850c80LL),
+      real(0x301579a22c8ca0LL),real(-0x33552a69ca1640LL),
+      real(0xcc2c8c733bee0LL),real(0x35f5f30acfbecLL),
+      reale(15359LL,0xf536fd4790329LL),
+      // _C4x[60]
+      real(0xf8fa0142055000LL),real(-0x8f8aa7832e8a00LL),
+      real(0x7d6f3ddfb47c00LL),real(-0x62d1e182b7be00LL),
+      real(0x3bb149eddea800LL),real(-0x3be3b3e26a7200LL),
+      real(0x175d0d17dad400LL),real(-0x14371cfc4fa600LL),
+      real(0xa8f8f5855a060LL),reale(15359LL,0xf536fd4790329LL),
+      // _C4x[61]
+      real(0x39908ef33285d00LL),real(-0x2a7d467835cbe00LL),
+      real(0x1e0505551ade700LL),real(-0x1bf3204cf26d400LL),
+      real(0xe195527d96f100LL),real(-0xe0af5ccd52ea00LL),
+      real(0x41681113e87b00LL),real(0x1112b429bab2a0LL),
+      reale(107519LL,0xb480ecf4f161fLL),
+      // _C4x[62]
+      real(0x4b31e4eff4bc00LL),real(-0x4190c8b5d5de00LL),
+      real(0x27770ac0842800LL),real(-0x270a0d33995200LL),
+      real(0x10c9f01b859400LL),real(-0xd056352974600LL),
+      real(0x74f9dc1f6f260LL),reale(15359LL,0xf536fd4790329LL),
+      // _C4x[63]
+      real(0x13c972f90d64d60LL),real(-0x12d8369dbbbb080LL),
+      real(0xa013fa80d7c1a0LL),real(-0x95d1a2bb4de840LL),
+      real(0x30a495fb9aa5e0LL),real(0xc95efc891d64cLL),
+      reale(107519LL,0xb480ecf4f161fLL),
+      // _C4x[64]
+      real(0x1b1b08a8c6e00LL),real(-0x1a1dea5249180LL),real(0xc1b857255700LL),
+      real(-0x8a94db95d080LL),real(0x5209b9749ec8LL),
+      real(0x3a6f4368c13f04a5LL),
+      // _C4x[65]
+      real(0x45823cb069c0LL),real(-0x3dc56cd10180LL),real(0x15b4532d4340LL),
+      real(0x5946b207ad8LL),real(0xf72bf6e15a9abe5LL),
+      // _C4x[66]
+      real(0x3ecd5100LL),real(-0x2a455b80LL),real(0x1a0aa978LL),
+      real(0x18f301bf7f77LL),
+      // _C4x[67]
+      real(0x3a924a0LL),real(0xefc484LL),real(0x35f1be97217LL),
+      // _C4x[68]
+      real(10384LL),real(0x32e8ea45LL),
+      // _C4x[69]
+      real(-0x3da35ec00LL),real(-0x62f09c100LL),real(-0xa329fce00LL),
+      real(-0x11560fab00LL),real(-0x1e812bf000LL),real(-0x37d592b500LL),
+      real(-0x6af77a1200LL),real(-0xd82e3c9f00LL),real(-0x1d19ea9f400LL),
+      real(-0x43b761f2900LL),real(-0xad7cf6b5600LL),real(-0x1f71d9841300LL),
+      real(-0x6bcf7c0df800LL),real(-0x1d7abbebd1d00LL),
+      real(-0xc1b8d2e919a00LL),real(-0xd3e226aef40700LL),
+      real(0xc94a0b2634a0400LL),real(-0x3577aaf625fa9100LL),
+      real(0x6aef55ec4bf52200LL),real(-0x634bf45b6b1a7b00LL),
+      real(0x22221bff6cd11a48LL),reale(150527LL,0x964e188a1ebc5LL),
+      // _C4x[70]
+      real(-0xda1252c00LL),real(-0x16bd22f800LL),real(-0x2731e0a400LL),
+      real(-0x46214fc000LL),real(-0x830545dc00LL),real(-0x1017e988800LL),
+      real(-0x21987b95400LL),real(-0x4b78a99d000LL),real(-0xb9ccd9f8c00LL),
+      real(-0x202de3701800LL),real(-0x68b6655d0400LL),real(-0x1af3df037e000LL),
+      real(-0xa515b5f563c00LL),real(-0xa65924698da800LL),
+      real(0x8fc72c890104c00LL),real(-0x226e597c6e0df000LL),
+      real(0x3ee7237bf0721400LL),real(-0x3d1b0c8706d53800LL),
+      real(0x1e8d8643836a9c00LL),real(-0x634bf45b6b1a7b0LL),
+      reale(50175LL,0xdcc4b2d8b4e97LL),
+      // _C4x[71]
+      real(-0x1136c8f5600LL),real(-0x1e3b013df00LL),real(-0x37550c23000LL),
+      real(-0x6a508e10100LL),real(-0xd872daf0a00LL),real(-0x1d8dd6618300LL),
+      real(-0x468422b6a400LL),real(-0xbc9d06f02500LL),real(-0x24d784d09be00LL),
+      real(-0x90d122dffa700LL),real(-0x347ca809f91800LL),
+      real(-0x31861ec3b2ac900LL),real(0x276d051382ba8e00LL),
+      reale(-2164LL,0xaacb805bbb500LL),reale(3319LL,0x8d7da907400LL),
+      reale(-2192LL,0x2451a99991300LL),real(-0x47e396448082600LL),
+      real(0x3577aaf625fa9100LL),real(-0x1449fb28d544cb98LL),
+      reale(150527LL,0x964e188a1ebc5LL),
+      // _C4x[72]
+      real(-0x62d694dc000LL),real(-0xba60f7a0000LL),real(-0x173b38f24000LL),
+      real(-0x319b0ca1c000LL),real(-0x7361a893c000LL),real(-0x12be5bef38000LL),
+      real(-0x38b3402cc4000LL),real(-0xd6a4403694000LL),
+      real(-0x4a69cc1535c000LL),real(-0x42816c266fd0000LL),
+      real(0x315cb6a39d95c000LL),reale(-2450LL,0x306e3c9574000LL),
+      reale(3143LL,0x2391393fc4000LL),real(-0x466890d45f668000LL),
+      real(-0x50368754849c4000LL),real(0x594b313771cfc000LL),
+      real(-0x1cc16f4e99cdc000LL),real(0x1e8d8643836a9c0LL),
+      reale(150527LL,0x964e188a1ebc5LL),
+      // _C4x[73]
+      real(-0x5003ad66000LL),real(-0xa79ae296200LL),real(-0x17d9e9f5d400LL),
+      real(-0x3c8762ad2600LL),real(-0xb232a56ac800LL),real(-0x28dbf6ee52a00LL),
+      real(-0xda6199e36bc00LL),real(-0xba74c6aa46ee00LL),
+      real(0x825959cb764d000LL),real(-0x17232e4c4e57f200LL),
+      real(0x190bf0598fc65c00LL),real(-0x27c51cb844db600LL),
+      real(-0xf8735fc98339800LL),real(0xa28217eef524600LL),
+      real(-0xfc87c9cb4a8c00LL),real(-0x3228ffc0ed7e00LL),
+      real(-0x387bf611406670LL),reale(21503LL,0xf0e695ca96ad3LL),
+      // _C4x[74]
+      real(-0x1fe011d85800LL),real(-0x4f422fb05000LL),real(-0xe40060fc8800LL),
+      real(-0x32e664e9c2000LL),real(-0x1078ec0ef63800LL),
+      real(-0xd864902b71f000LL),real(0x8fab71292d19800LL),
+      real(-0x179bbec0170ac000LL),real(0x15c925f1e4f1e800LL),
+      real(0x2c36e0d96c07000LL),real(-0x100d07856dfe4800LL),
+      real(0x6d9c3efea16a000LL),real(-0x13ac4a3567f800LL),
+      real(0x15b22a4de1ed000LL),real(-0x1452d18e2b42800LL),
+      real(0x32eab893d697a0LL),reale(21503LL,0xf0e695ca96ad3LL),
+      // _C4x[75]
+      real(-0x115a7e31ff400LL),real(-0x3c90c47c29600LL),
+      real(-0x1311ab10640800LL),real(-0xf2246746703a00LL),
+      real(0x99b5e8c5c68e400LL),real(-0x179a6d9c8ead9e00LL),
+      real(0x12bd250608495000LL),real(0x63777cc9563be00LL),
+      real(-0xf1ef7972c204400LL),real(0x47367775d725a00LL),
+      real(-0x63378c7bb15800LL),real(0x22d63078c5cb600LL),
+      real(-0xf8707c83e76c00LL),real(-0xb0e06786eae00LL),
+      real(-0x5e4438ea922f0LL),reale(21503LL,0xf0e695ca96ad3LL),
+      // _C4x[76]
+      real(-0x9607df2a17c000LL),real(-0x739371b7f3d8000LL),
+      real(0x4688c366039fc000LL),reale(-2612LL,0x75993403fc000LL),
+      real(0x7056fbc7b1c24000LL),real(0x3af7506941670000LL),
+      real(-0x601cadbaecf24000LL),real(0x14affbea17164000LL),
+      real(-0x6daccbfd0bfc000LL),real(0x1036680bb42b8000LL),
+      real(-0x42f04a7d6e84000LL),real(0x246d9b6ab84c000LL),
+      real(-0x37cce3b53adc000LL),real(0xd43660c7def0c0LL),
+      reale(150527LL,0x964e188a1ebc5LL),
+      // _C4x[77]
+      real(0x48f7bc8748dd3400LL),reale(-2562LL,0x8060698c5b900LL),
+      real(0x601d0ed1c7f2b600LL),real(0x449204e4f86d4300LL),
+      real(-0x56194f80f81a8800LL),real(0xea108cfa6f6ed00LL),
+      real(-0xa7ad46bd016c600LL),real(0xef32c344e507700LL),
+      real(-0x30a1762ff0e4400LL),real(0x4a78ea25c4fa100LL),
+      real(-0x3c3cca9d1bd4200LL),real(0x22cbd76a022b00LL),
+      real(0x9df3abb037278LL),reale(150527LL,0x964e188a1ebc5LL),
+      // _C4x[78]
+      real(0x52462bb828351400LL),real(0x4a4d1c14e6172800LL),
+      real(-0x4ced32c430d22400LL),real(0xb52b1b0c2492000LL),
+      real(-0xd058359466b1c00LL),real(0xd07709dd3bd1800LL),
+      real(-0x30072e56aae5400LL),real(0x605c027d5629000LL),
+      real(-0x32e58b8ebb44c00LL),real(0x108221f23a90800LL),
+      real(-0x1a7ac7295958400LL),real(0x836be4086f28d0LL),
+      reale(150527LL,0x964e188a1ebc5LL),
+      // _C4x[79]
+      real(-0x44ebd4477ad4f200LL),real(0x9a6a6024b320f00LL),
+      real(-0xe915ce102d6a800LL),real(0xb28d5273bcee100LL),
+      real(-0x37fa968ec235e00LL),real(0x68974b850671300LL),
+      real(-0x2a735b9bf505400LL),real(0x20513dd7a7f6500LL),
+      real(-0x220360a9be2ca00LL),real(0x36d1c1a3f49700LL),
+      real(0x10369a2227fd98LL),reale(150527LL,0x964e188a1ebc5LL),
+      // _C4x[80]
+      real(-0x231ca125e5c8000LL),real(0x15ea7d5f05e0000LL),
+      real(-0x97f88531f38000LL),real(0xee839ade908000LL),
+      real(-0x572a9cdd748000LL),real(0x65a05d4f5f0000LL),
+      real(-0x4ce11756538000LL),real(0x177f524c958000LL),
+      real(-0x20e57338048000LL),real(0xc4518e260f380LL),
+      reale(21503LL,0xf0e695ca96ad3LL),
+      // _C4x[81]
+      real(-0xaedfc7febee000LL),real(0xe403ca9386ec00LL),
+      real(-0x5568aa53f7a800LL),real(0x76f3d9af940400LL),
+      real(-0x475f28b7bb7000LL),real(0x29018461d69c00LL),
+      real(-0x2ed89591f13800LL),real(0x74380445fb400LL),
+      real(0x21274712bcba0LL),reale(21503LL,0xf0e695ca96ad3LL),
+      // _C4x[82]
+      real(-0x58b4aa16ae3000LL),real(0x7fa0a14380e000LL),
+      real(-0x429ab6e3829000LL),real(0x383428ed0d4000LL),
+      real(-0x32e93ebd99f000LL),real(0x108fe88bbda000LL),
+      real(-0x13ba86ffa65000LL),real(0x868b4ab8e3340LL),
+      reale(21503LL,0xf0e695ca96ad3LL),
+      // _C4x[83]
+      real(-0x1c02d0336ef1800LL),real(0x1d91ba24525dc00LL),
+      real(-0x163d203e4811000LL),real(0xb8e8b252aa8400LL),
+      real(-0xd2485de6110800LL),real(0x2a40e341b4ac00LL),
+      real(0xbb70f2cbcf360LL),reale(150527LL,0x964e188a1ebc5LL),
+      // _C4x[84]
+      real(-0x15b0eba45ef8000LL),real(0xf79bdd24a10000LL),
+      real(-0xf32a8559288000LL),real(0x563281b24a8000LL),
+      real(-0x5920796c2f8000LL),real(0x29f7b73471c480LL),
+      reale(150527LL,0x964e188a1ebc5LL),
+      // _C4x[85]
+      real(-0x3317d68847dc00LL),real(0x19fc69dd236700LL),
+      real(-0x1c6d14df7ace00LL),real(0x6cfe4fac52d00LL),
+      real(0x1d99f24357808LL),reale(30105LL,0x847604e86c8c1LL),
+      // _C4x[86]
+      real(-0x30f8b0f5c00LL),real(0x12d79f66800LL),real(-0x115c7023400LL),
+      real(0x8d25cb7890LL),real(0xa7c6f527b4f7c7LL),
+      // _C4x[87]
+      real(-0x1fa8df9600LL),real(0x89ebf7900LL),real(0x24e4f9128LL),
+      real(0xb98f5d0044051LL),
+      // _C4x[88]
+      real(-0x1dbc000LL),real(0x10088c0LL),real(0x192c8c2464fLL),
+      // _C4x[89]
+      real(70576LL),real(0x6cd1db26bLL),
+      // _C4x[90]
+      real(0x6bb08e00LL),real(0xc7f67400LL),real(0x181eb1a00LL),
+      real(0x30a52a000LL),real(0x673602600LL),real(0xe8536cc00LL),
+      real(0x230e6ab200LL),real(0x5c19c1f800LL),real(0x10ca075be00LL),
+      real(0x37f6c332400LL),real(0xdf0e61c4a00LL),real(0x47dfa8095000LL),
+      real(0x236014b495600LL),real(0x2f60ae04237c00LL),
+      real(-0x38c125ca4a81e00LL),real(0x13dd33a066e0a800LL),
+      real(-0x389cd322becd1200LL),real(0x5ba892ca8a3fd400LL),
+      real(-0x4c61cfa8c88a8600LL),real(0x18d2fd16dac69ec0LL),
+      reale(193535LL,0x781b441f4c16bLL),
+      // _C4x[91]
+      real(0x741543000LL),real(0xe4714b800LL),real(0x1d7c5d8000LL),
+      real(0x406b2a4800LL),real(0x9671f6d000LL),real(0x17cd936d800LL),
+      real(0x429614e2000LL),real(0xd3b41886800LL),real(0x31f7c0917000LL),
+      real(0xf21fb6ecf800LL),real(0x6ee892beec000LL),real(0x889688d5b28800LL),
+      real(-0x944ac482b6bf000LL),real(0x2e4469f00aa71800LL),
+      real(-0x73c7760d5050a000LL),reale(2642LL,0x7d1cf3a18a800LL),
+      reale(-2186LL,0x92f4aa56eb000LL),real(0x3d1b0c8706d53800LL),
+      real(-0xb7512595147fa80LL),reale(193535LL,0x781b441f4c16bLL),
+      // _C4x[92]
+      real(0x4f8563d800LL),real(0xa96c658000LL),real(0x180da872800LL),
+      real(0x3b0b3acd000LL),real(0x9f94c3e7800LL),real(0x1e8177ec2000LL),
+      real(0x6e3ee471c800LL),real(0x1fbe99a5b7000LL),real(0xdb641b5c91800LL),
+      real(0xfc08a38932c000LL),real(-0xfb6a7929bd39800LL),
+      real(0x466e762d282a1000LL),reale(-2431LL,0x7283aad43b800LL),
+      reale(2721LL,0xe81cb8f96000LL),real(-0x4dc0eea70f08f800LL),
+      real(-0x1b9eda123c275000LL),real(0x2eba54dfb9ee5800LL),
+      real(-0xf46c321c1b54e00LL),reale(193535LL,0x781b441f4c16bLL),
+      // _C4x[93]
+      real(0x6d40f58000LL),real(0x10545cac800LL),real(0x2adf04bd000LL),
+      real(0x7eec6985800LL),real(0x1ba16d402000LL),real(0x7a072d7ae800LL),
+      real(0x322ca20e07000LL),real(0x3657aa17207800LL),
+      real(-0x3263434d5c54000LL),real(0xcd0703e8db70800LL),
+      real(-0x17ea571d4aa2f000LL),real(0x141161dbf7ec9800LL),
+      real(-0x57d62fedaaa000LL),real(-0xce7cd449810d800LL),
+      real(0x99132fccc31b000LL),real(-0x27598ad75934800LL),
+      real(0x18a5cd1eccf980LL),reale(27647LL,0xec962e4d9d27dLL),
+      // _C4x[94]
+      real(0x45bda664400LL),real(0xc8c97088800LL),real(0x2a5a46b84c00LL),
+      real(0xb467fe915000LL),real(0x471c8a3c15400LL),real(0x49361b74ae1800LL),
+      real(-0x3fb304ab7e4a400LL),real(0xedcc81cc3d0e000LL),
+      real(-0x1834aac92fbf9c00LL),real(0xe864613c6aba800LL),
+      real(0x759492ec34a6c00LL),real(-0xea1e49c1b0f9000LL),
+      real(0x5db63d617b37400LL),real(0x31083890113800LL),
+      real(-0xa60c227ea8400LL),real(-0x3b3da9a3dab180LL),
+      reale(27647LL,0xec962e4d9d27dLL),
+      // _C4x[95]
+      real(0x19fde85a2f000LL),real(0x6b4aa2bef4800LL),real(0x28c46a7eab6000LL),
+      real(0x2827ed076a87800LL),real(-0x210a7394d5283000LL),
+      real(0x72396f4bbfb2a800LL),reale(-2621LL,0xb23f88e224000LL),
+      real(0x40dce91ee367d800LL),real(0x52592d2deb84b000LL),
+      real(-0x5a9bf1fdd05df800LL),real(0x10e48562d1f92000LL),
+      real(0x1d4b91258bb3800LL),real(0xaa81c5529799000LL),
+      real(-0x6eadf18b1729800LL),real(0xd0db43634fa080LL),
+      reale(193535LL,0x781b441f4c16bLL),
+      // _C4x[96]
+      real(0x73aaee373e800LL),real(0x6d942f05126000LL),
+      real(-0x55d059f7fa72800LL),real(0x114ee97e0f335000LL),
+      real(-0x16053fa9ce763800LL),real(0x4d23952dbcc4000LL),
+      real(0xdda0de6f17eb800LL),real(-0xa56bf33e63ad000LL),
+      real(0x90dadc83efa800LL),real(-0xbf52dd8df9e000LL),
+      real(0x2172ab2d7549800LL),real(-0x85ae20f708f000LL),
+      real(-0x10c904999a7800LL),real(-0xae78582fbfa00LL),
+      reale(27647LL,0xec962e4d9d27dLL),
+      // _C4x[97]
+      real(-0x296aa6e320b86000LL),real(0x7d9f9f72af514800LL),
+      reale(-2285LL,0x1022817ab000LL),real(0x8d22edc50949800LL),
+      real(0x6581767b41ffc000LL),real(-0x371ad32683bb1800LL),
+      real(-0x915b5d6cd33000LL),real(-0xbce7db3a027c800LL),
+      real(0xd0ebaf65b57e000LL),real(-0x1274db255bb7800LL),
+      real(0x2970a5137d6f000LL),real(-0x30b8535f9002800LL),
+      real(0x8fa21d365c3780LL),reale(193535LL,0x781b441f4c16bLL),
+      // _C4x[98]
+      reale(-2097LL,0x6253f1b27a00LL),real(-0xa96847f4d191400LL),
+      real(0x644f115411ee9e00LL),real(-0x2912ee32dfa61000LL),
+      real(-0x81eeabcb01be00LL),real(-0xfba8345c9670c00LL),
+      real(0x9bbda8340726600LL),real(-0x11537009b3f0800LL),
+      real(0x51c2ea8aa8c0a00LL),real(-0x2bb89caf7310400LL),
+      real(-0x162bd9b163d200LL),real(-0xac0895744a3c0LL),
+      reale(193535LL,0x781b441f4c16bLL),
+      // _C4x[99]
+      real(0x6016f6408271a000LL),real(-0x1e7546e7a0d1b000LL),
+      real(0x18e4e98f72c8000LL),real(-0x113f96068e695000LL),
+      real(0x6af41cd57176000LL),real(-0x2590480c1d6f000LL),
+      real(0x61253410a664000LL),real(-0x1c92661c6269000LL),
+      real(0xfa686d5b4d2000LL),real(-0x188238347643000LL),
+      real(0x60544135abb900LL),reale(193535LL,0x781b441f4c16bLL),
+      // _C4x[100]
+      real(0x99754be5293000LL),real(-0x273b2ae73028000LL),
+      real(0xa610233e31d000LL),real(-0x8ee7336f99e000LL),
+      real(0xd7a1a110827000LL),real(-0x2f0d74b9c14000LL),
+      real(0x4f375451ab1000LL),real(-0x4002b6db48a000LL),
+      real(0x20d804cbbb000LL),real(0xa41d3b221400LL),
+      reale(27647LL,0xec962e4d9d27dLL),
+      // _C4x[101]
+      real(0x788485be348000LL),real(-0xbf417480965000LL),
+      real(0xbdad05e3bd6000LL),real(-0x306dcc448df000LL),
+      real(0x6c08266aea4000LL),real(-0x364dbd52879000LL),
+      real(0x13468d692f2000LL),real(-0x1f6575294f3000LL),
+      real(0x97982d7211100LL),reale(27647LL,0xec962e4d9d27dLL),
+      // _C4x[102]
+      real(0x45af61c2ad1f800LL),real(-0x1b140a5252fd000LL),
+      real(0x348e789bd7f6800LL),real(-0x137ac7aed3be000LL),
+      real(0x11da35dc2ded800LL),real(-0x12097ef153ff000LL),
+      real(0x186b19645c4800LL),real(0x7935fe20ccb00LL),
+      reale(193535LL,0x781b441f4c16bLL),
+      // _C4x[103]
+      real(0x780536a0606000LL),real(-0x28779739e97000LL),
+      real(0x3a9fdf130c4000LL),real(-0x2860390cb81000LL),
+      real(0xcce73d3902000LL),real(-0x1322aa5844b000LL),
+      real(0x6bd0a3ad69900LL),reale(27647LL,0xec962e4d9d27dLL),
+      // _C4x[104]
+      real(0x1e9f26efa689000LL),real(-0x100c94382c2c000LL),
+      real(0xabead3c2e1f000LL),real(-0xc04c79a6f96000LL),
+      real(0x18fb8548735000LL),real(0x76d40a3ef6c00LL),
+      reale(193535LL,0x781b441f4c16bLL),
+      // _C4x[105]
+      real(0x481bf9079c000LL),real(-0x3c015f7917000LL),real(0x133447522e000LL),
+      real(-0x195b19983d000LL),real(0xa0f15f7a8700LL),
+      reale(3518LL,0xd3a367a37a66dLL),
+      // _C4x[106]
+      real(0xa4d4b674a00LL),real(-0xbdc38ed8400LL),real(0x20274dfee00LL),
+      real(0x93ecaa9440LL),real(0x436914c918b5d6dLL),
+      // _C4x[107]
+      real(0x560fab000LL),real(-0x6488cc800LL),real(0x2bcf67580LL),
+      real(0x4f869592664b5LL),
+      // _C4x[108]
+      real(0x7f44f800LL),real(0x23b17a00LL),real(0x1358168b64fd9LL),
+      // _C4x[109]
+      real(567424LL),real(0x1467591741LL),
+      // _C4x[110]
+      real(-0x176bb000LL),real(-0x339cb800LL),real(-0x78298000LL),
+      real(-0x12a324800LL),real(-0x31dd75000LL),real(-0x92088d800LL),
+      real(-0x1dded72000LL),real(-0x7091426800LL),real(-0x1ffab8af000LL),
+      real(-0xbdf5200f800LL),real(-0x6d0cb854c000LL),real(-0xacf22c5668800LL),
+      real(0xfa276dd8697000LL),real(-0x6c92e41ed151800LL),
+      real(0x18f8d3300c4da000LL),real(-0x382fdb2c1baea800LL),
+      real(0x4f13f21826f5d000LL),real(-0x3d1b0c8706d53800LL),
+      real(0x131873ea3222a180LL),reale(236543LL,0x59e86fb479711LL),
+      // _C4x[111]
+      real(-0x287496000LL),real(-0x615720000LL),real(-0xfbb32a000LL),
+      real(-0x2c5b51c000LL),real(-0x8b2715e000LL),real(-0x1f40dc58000LL),
+      real(-0x869fe272000LL),real(-0x2f027b014000LL),real(-0x19275e39a6000LL),
+      real(-0x24c57351390000LL),real(0x305c8c1f55c6000LL),
+      real(-0x12c56d86cea0c000LL),real(0x3c958c9a69892000LL),
+      real(-0x75427b7d716c8000LL),reale(2264LL,0x2021045b7e000LL),
+      real(-0x686da1b1a7d04000LL),real(0x2b2226f5e6b4a000LL),
+      real(-0x7a36190e0daa700LL),reale(236543LL,0x59e86fb479711LL),
+      // _C4x[112]
+      real(-0x6982d8000LL),real(-0x1200880800LL),real(-0x367aead000LL),
+      real(-0xbc0ef21800LL),real(-0x306255a2000LL),real(-0x100b9fcf2800LL),
+      real(-0x8171cf3d7000LL),real(-0xb08a440213800LL),
+      real(0xd5be3a4ba94000LL),real(-0x4af12ff99ea4800LL),
+      real(0xd4237986197f000LL),real(-0x15530c89262c5800LL),
+      real(0x12c48ba350cca000LL),real(-0x590f07b7ee96800LL),
+      real(-0x53e376c2a7ab000LL),real(0x5b3d559eedc8800LL),
+      real(-0x1b37127cacfe280LL),reale(33791LL,0xe845c6d0a3a27LL),
+      // _C4x[113]
+      real(-0x323b5354000LL),real(-0xa77c1e58000LL),real(-0x297150a3c000LL),
+      real(-0xd25b36ef0000LL),real(-0x64c6f9d464000LL),
+      real(-0x816d981c288000LL),real(0x91bbe6aceeb4000LL),
+      real(-0x2ea0d03ef98a0000LL),real(0x748c356a9df8c000LL),
+      reale(-2464LL,0xbb08388f48000LL),real(0x55038197b9ea4000LL),
+      real(0x24c2f502435b0000LL),real(-0x557a28e333384000LL),
+      real(0x319d6c472db18000LL),real(-0xa981b88bf66c000LL),
+      real(0x2452a78bb4ce00LL),reale(236543LL,0x59e86fb479711LL),
+      // _C4x[114]
+      real(-0x45be4df1f000LL),real(-0x154928d5d8800LL),
+      real(-0x9c093f54d6000LL),real(-0xbe1dac855c3800LL),
+      real(0xc8c35d9371b3000LL),real(-0x3b27b3be7f71e800LL),
+      reale(2105LL,0xa27ce5e51c000LL),reale(-2267LL,0xddae18aab6800LL),
+      real(0x215c4ca42d605000LL),real(0x52b0fbc40a45b800LL),
+      real(-0x52abb6acf6af2000LL),real(0x14cab8bdb5a70800LL),
+      real(0x422bb90412d7000LL),real(0xaa8f3f42195800LL),
+      real(-0x18c864fb5207380LL),reale(236543LL,0x59e86fb479711LL),
+      // _C4x[115]
+      real(-0x1f7df788da000LL),real(-0x249f1260a08000LL),
+      real(0x2485dbf6336a000LL),real(-0x9fd55d1961bc000LL),
+      real(0x13ee6db114d4e000LL),real(-0x114ab28a688b0000LL),
+      real(-0x1759d6f434ee000LL),real(0xe5435dae775c000LL),
+      real(-0x883ae4654d0a000LL),real(0x6d085594a8000LL),
+      real(-0x3b594ff4c6000LL),real(0x18b250a1c574000LL),
+      real(-0xc2af3f725e2000LL),real(0x11b5d0e5824b00LL),
+      reale(33791LL,0xe845c6d0a3a27LL),
+      // _C4x[116]
+      real(0x2c14f5cef5da000LL),real(-0xb44f7f3a7637800LL),
+      real(0x144dd8529649b000LL),real(-0xdf6b3f6a9dda800LL),
+      real(-0x611b67a2b3c4000LL),real(0xe4e2f0fafbb2800LL),
+      real(-0x51c03e2adea3000LL),real(-0xd7c7b9cb0f0800LL),
+      real(-0x16096a592762000LL),real(0x1c9393e7a4dc800LL),
+      real(-0x381de14f961000LL),real(-0xdc6f16ca46800LL),
+      real(-0xd4311572ebf80LL),reale(33791LL,0xe845c6d0a3a27LL),
+      // _C4x[117]
+      reale(2256LL,0x5da9961330000LL),real(-0x4ad304d1312a0000LL),
+      real(-0x4061e93f2b8f0000LL),real(0x5b0abf1dff380000LL),
+      real(-0x11e106d1afa10000LL),real(-0x36aeeaeb6e60000LL),
+      real(-0xfcdce3949630000LL),real(0x8af39fd661c0000LL),
+      real(0x3d8b99e8cb0000LL),real(0x2f252d98fde0000LL),
+      real(-0x29a890537770000LL),real(0x62af9738c95800LL),
+      reale(236543LL,0x59e86fb479711LL),
+      // _C4x[118]
+      real(-0x4e0fa2600780a000LL),real(0x4e911c6aabd6b000LL),
+      real(-0x693532675088000LL),real(0x218ccc46e845000LL),
+      real(-0x117da33185e06000LL),real(0x4517905378bf000LL),
+      real(-0x10ba1c1d3344000LL),real(0x5399b73b0419000LL),
+      real(-0x1d57ddd62302000LL),real(-0x2b67cba006d000LL),
+      real(-0x17851f6bed3f00LL),reale(236543LL,0x59e86fb479711LL),
+      // _C4x[119]
+      real(-0x11e2c065bec000LL),real(0x1160c7104de0000LL),
+      real(-0x2505ead2add4000LL),real(0x375d7cf9da8000LL),
+      real(-0x7d85d31b2fc000LL),real(0xc6e2597bcf0000LL),
+      real(-0x1c3d1fca5e4000LL),real(0x26eff911138000LL),
+      real(-0x32d040ac10c000LL),real(0xa3358a5620200LL),
+      reale(33791LL,0xe845c6d0a3a27LL),
+      // _C4x[120]
+      real(-0xd8a9f7e5e7f8000LL),real(0x75ff062faeb000LL),
+      real(-0x57d41a79bb5a000LL),real(0x470a22b15ed1000LL),
+      real(-0x941305430fc000LL),real(0x2571b5b524d7000LL),
+      real(-0x15ee8622281e000LL),real(-0x810fd11a43000LL),
+      real(-0x3b143f8fcc100LL),reale(236543LL,0x59e86fb479711LL),
+      // _C4x[121]
+      real(-0x6b41dfbb0208000LL),real(0x3281e67a9bd0000LL),
+      real(-0x11e76a3ab618000LL),real(0x2fa8791e0ae0000LL),
+      real(-0xef00faafea8000LL),real(0x82642584ff0000LL),
+      real(-0xce6c8b206b8000LL),real(0x33a2c6e1f0cc00LL),
+      reale(236543LL,0x59e86fb479711LL),
+      // _C4x[122]
+      real(-0x4776cd8c606000LL),real(0x6d8a47bfe9f000LL),
+      real(-0x187da0ea944000LL),real(0x2b758d37739000LL),
+      real(-0x22fd5e6d302000LL),real(0x107133def3000LL),real(0x56ef801cd100LL),
+      reale(33791LL,0xe845c6d0a3a27LL),
+      // _C4x[123]
+      real(-0x25dd48c154000LL),real(0x596953f850000LL),
+      real(-0x2b40cdd44c000LL),real(0x104815a268000LL),
+      real(-0x1ab27f0a04000LL),real(0x7e701f145600LL),
+      reale(3071LL,0xfdd7cc41833d5LL),
+      // _C4x[124]
+      real(-0xf4977948ac000LL),real(0xfebd5b2ac3000LL),
+      real(-0xf90c852576000LL),real(0x1257a8b1e1000LL),real(0x5e1a6b95fb00LL),
+      reale(21503LL,0xf0e695ca96ad3LL),
+      // _C4x[125]
+      real(-0xecd417f0000LL),real(0x4df40da0000LL),real(-0x78cb3050000LL),
+      real(0x28d58610800LL),real(0x5263fcf5c8de3f7LL),
+      // _C4x[126]
+      real(-0xa82231000LL),real(0x12ebf1800LL),real(0x5cce6880LL),
+      real(0x4f869592664b5LL),
+      // _C4x[127]
+      real(-0x63fa000LL),real(0x259cf00LL),real(0x62c2748ec71LL),
+      // _C4x[128]
+      real(0xe17e80LL),real(0xd190230980fLL),
+      // _C4x[129]
+      real(0xa16f000LL),real(0x1b5f0000LL),real(0x50671000LL),
+      real(0x103c32000LL),real(0x3aee73000LL),real(0xf7d074000LL),
+      real(0x4f19f75000LL),real(0x214230b6000LL),real(0x15d36ff77000LL),
+      real(0x2803a29af8000LL),real(-0x43d629aab87000LL),
+      real(0x232131018d3a000LL),real(-0x9e155c86fb85000LL),
+      real(0x1c3aabf38857c000LL),real(-0x361b1ee81aa83000LL),
+      real(0x44dcb2f8dc1be000LL),real(-0x325282c98d281000LL),
+      real(0xf46c321c1b54e00LL),reale(279551LL,0x3bb59b49a6cb7LL),
+      // _C4x[130]
+      real(0x9a2c0000LL),real(0x1df854000LL),real(0x684c68000LL),
+      real(0x1a2757c000LL),real(0x7eb6a10000LL),real(0x3232f0a4000LL),
+      real(0x1ec960fb8000LL),real(0x3439f07dcc000LL),real(-0x50f0148aea0000LL),
+      real(0x25bf6de530f4000LL),real(-0x9635a567bcf8000LL),
+      real(0x1735ee17e1e1c000LL),real(-0x25a38fef60750000LL),
+      real(0x2834884b55944000LL),real(-0x1b3dfda8c79a8000LL),
+      real(0xa981b88bf66c000LL),real(-0x1cc16f4e99cdc00LL),
+      reale(93183LL,0xbe91de6de243dLL),
+      // _C4x[131]
+      real(0x3bee10e000LL),real(0xe6dcd7c000LL),real(0x42cbc6ea000LL),
+      real(0x1923069d8000LL),real(0xe8a206ec6000LL),real(0x170dd449e34000LL),
+      real(-0x2102346c3b5e000LL),real(0xe0052eca6690000LL),
+      real(-0x318a0eacb0b82000LL),real(0x690a1407d3eec000LL),
+      reale(-2183LL,0x49fe19ea5a000LL),real(0x61bf435eea348000LL),
+      real(-0xe133a8622dca000LL),real(-0x2748b26bf705c000LL),
+      real(0x220d7d12f9812000LL),real(-0x98dbd66bee38400LL),
+      reale(279551LL,0x3bb59b49a6cb7LL),
+      // _C4x[132]
+      real(0x8fcb3bf8000LL),real(0x33bb5d994000LL),real(0x1c6cd111b0000LL),
+      real(0x2a77da91fcc000LL),real(-0x38ac5a4a0098000LL),
+      real(0x160f7571fbc04000LL),real(-0x45e92df7f7ee0000LL),
+      real(0x7f01d3c372a3c000LL),real(-0x7edcf27daed28000LL),
+      real(0x27dfe4585e674000LL),real(0x38a548f303090000LL),
+      real(-0x4b87231069354000LL),real(0x24d2adef05648000LL),
+      real(-0x6a5625dbc71c000LL),real(-0x18371a5d233400LL),
+      reale(279551LL,0x3bb59b49a6cb7LL),
+      // _C4x[133]
+      real(0x6d0001099000LL),real(0x9a74d7ec5c000LL),real(-0xc18676170e1000LL),
+      real(0x45ad31c7f8a2000LL),real(-0xc7369375e55b000LL),
+      real(0x1364b97f822e8000LL),real(-0xe19539447ad5000LL),
+      real(-0x26bf9b041ad2000LL),real(0xce71cc8200b1000LL),
+      real(-0x8c822446468c000LL),real(0x12e554ec5f37000LL),
+      real(0xa6c4f3e59ba000LL),real(0x30bb36a52bd000LL),
+      real(-0x34440d2d335600LL),reale(39935LL,0xe3f55f53aa1d1LL),
+      // _C4x[134]
+      real(-0x108032160840000LL),real(0x5885fb25bf70000LL),
+      real(-0xe5dec7019ee0000LL),real(0x13305b31e4ed0000LL),
+      real(-0x9278e6008580000LL),real(-0x855a0cffe9d0000LL),
+      real(0xd3d848f453e0000LL),real(-0x4a9f485fda70000LL),
+      real(-0xfb7b0fc02c0000LL),real(-0x691c2e87310000LL),
+      real(0x177c9a6d86a0000LL),real(-0x9585db4a3b0000LL),
+      real(0xa77dc54c8f000LL),reale(39935LL,0xe3f55f53aa1d1LL),
+      // _C4x[135]
+      real(-0xfbf5c5edd078000LL),real(0x1202fde81d5f0000LL),
+      real(-0x454a07e84fa8000LL),real(-0xbd470dafdb40000LL),
+      real(0xb3ba7d182928000LL),real(-0x155dacd6cc70000LL),
+      real(-0xdc21a82d608000LL),real(-0x1d2df304ada0000LL),
+      real(0x167a9a9742c8000LL),real(-0x7d81f52ed0000LL),
+      real(-0x7ffde3fc68000LL),real(-0xe287c62fa3000LL),
+      reale(39935LL,0xe3f55f53aa1d1LL),
+      // _C4x[136]
+      real(-0xdb139b99ca0000LL),real(-0x5dbaf74a92790000LL),
+      real(0x3b504b033ef80000LL),real(0x39f346109690000LL),
+      real(0x1c11de49bba0000LL),real(-0x10aa5a9917350000LL),
+      real(0x49bc5039b7c0000LL),real(0x92ae304aad0000LL),
+      real(0x32f3e8ddd3e0000LL),real(-0x233311e51f10000LL),
+      real(0x4483a6a16dd000LL),reale(279551LL,0x3bb59b49a6cb7LL),
+      // _C4x[137]
+      real(0x28c5c3199aad2000LL),real(0x80d5fb17a810000LL),
+      real(0x9c623a70694e000LL),real(-0xf23c0600f3f4000LL),
+      real(0x6928769f1ca000LL),real(-0x1e8f96869bf8000LL),
+      real(0x4f9253e0b846000LL),real(-0x11e4e806cbfc000LL),
+      real(-0x2dad19c0f3e000LL),real(-0x1f2fac1e88dc00LL),
+      reale(279551LL,0x3bb59b49a6cb7LL),
+      // _C4x[138]
+      real(0xf488f4012440000LL),real(-0xb16a4f02dfc8000LL),
+      real(-0x103bba4a90d0000LL),real(-0x4da08c72a3d8000LL),
+      real(0x45a11acaf220000LL),real(-0x25f21bc63e8000LL),
+      real(0x12fccd9d4510000LL),real(-0x13e0eb3687f8000LL),
+      real(0x356c2e9517d800LL),reale(279551LL,0x3bb59b49a6cb7LL),
+      // _C4x[139]
+      real(-0x3fff5b5aa54000LL),real(-0x6a2cbaeaf348000LL),
+      real(0x2b55e8782dc4000LL),real(-0x69f22faba30000LL),
+      real(0x26e11f54b9dc000LL),real(-0x105d41b83118000LL),
+      real(-0x12eb1ab4e0c000LL),real(-0x9530f9646a800LL),
+      reale(279551LL,0x3bb59b49a6cb7LL),
+      // _C4x[140]
+      real(0x2dbd6ef2050000LL),real(-0x356ee7ee5e8000LL),
+      real(0x65e2c9482e0000LL),real(-0x1247a684858000LL),
+      real(0x13c46949570000LL),real(-0x1b548eba6c8000LL),
+      real(0x5c900466be800LL),reale(39935LL,0xe3f55f53aa1d1LL),
+      // _C4x[141]
+      real(0x588efe4c176000LL),real(-0xcc317e9b08000LL),
+      real(0x2e65271667a000LL),real(-0x1cb46908f84000LL),
+      real(-0x7bc8d2682000LL),real(-0x36524dd3a400LL),
+      reale(39935LL,0xe3f55f53aa1d1LL),
+      // _C4x[142]
+      real(0x5a0e4ebdc0000LL),real(-0x1d4e9158b0000LL),real(0xfe56696e0000LL),
+      real(-0x195347b590000LL),real(0x66855efe5000LL),
+      reale(3630LL,0x89164e7bf8313LL),
+      // _C4x[143]
+      real(0x94a2566a8000LL),real(-0x7736ce990000LL),real(0x345f5a38000LL),
+      real(0x11f45dc9000LL),real(0x36c560e36413be89LL),
+      // _C4x[144]
+      real(0x1946d60000LL),real(-0x2993250000LL),real(0xc21a91000LL),
+      real(0x22cae1700cc0f3LL),
+      // _C4x[145]
+      real(0x2e25f5000LL),real(0xf2951a00LL),real(0x1b45118f2c973bLL),
+      // _C4x[146]
+      real(0x1316c00LL),real(0x45dab658805LL),
+      // _C4x[147]
+      real(-143LL<<20),real(-0x1f950000LL),real(-0x7df20000LL),
+      real(-0x248bf0000LL),real(-0xcf3b40000LL),real(-0x615b090000LL),
+      real(-0x47e90f60000LL),real(-0x95a9db330000LL),real(0x123032a3880000LL),
+      real(-0xaf0fe765fd0000LL),real(0x3a2548493060000LL),
+      real(-0xc8bdaa520270000LL),real(0x1e1c7325e6c40000LL),
+      real(-0x3353672f26710000LL),real(0x3c89c1e8d8020000LL),
+      real(-0x2a606e22fd9b0000LL),real(0xc94a0b2634a0400LL),
+      reale(322559LL,0x1d82c6ded425dLL),
+      // _C4x[148]
+      real(-0x2eaf40000LL),real(-0xcf0180000LL),real(-0x45b31c0000LL),
+      real(-0x1eeb47LL<<20),real(-0x156868840000LL),real(-0x29667c3c80000LL),
+      real(0x4a029719540000LL),real(-0x2867692d1aLL<<20),
+      real(0xbfc5c91f6ec0000LL),real(-0x243d93fc11780000LL),
+      real(0x4a699e0854c40000LL),real(-0x69d85e75b6dLL<<20),
+      real(0x66f7a9fb575c0000LL),real(-0x4146a01c75280000LL),
+      real(0x18371a5d23340000LL),real(-0x3f90a5347c68800LL),
+      reale(322559LL,0x1d82c6ded425dLL),
+      // _C4x[149]
+      real(-0xd7e2520000LL),real(-0x5b0edcf0000LL),real(-0x3b8edf740000LL),
+      real(-0x6befb7d790000LL),real(0xb301172bea0000LL),
+      real(-0x5978c2137030000LL),real(0x17de1f39f1080000LL),
+      real(-0x3f35c80b0f2d0000LL),real(0x6ce3ff0d91260000LL),
+      real(-0x7761d1ce42b70000LL),real(0x468057c8ed840000LL),
+      real(0x1bcb7dfb99f0000LL),real(-0x26d98474089e0000LL),
+      real(0x1d375a3e49150000LL),real(-0x7d9dd8c3269dc00LL),
+      reale(322559LL,0x1d82c6ded425dLL),
+      // _C4x[150]
+      real(-0x121bdc9LL<<20),real(-0x1ef8211cLL<<20),real(0x3001ff791LL<<20),
+      real(-0x1624466f42LL<<20),real(0x55944c23ebLL<<20),
+      real(-0xc71654db68LL<<20),real(0x11c056e4d45LL<<20),
+      real(-0xdb34af9f8eLL<<20),real(0xeea56899fLL<<20),
+      real(0x9412b68a4cLL<<20),real(-0x93d752a107LL<<20),
+      real(0x3ee3b30826LL<<20),real(-0x9a03d5cadLL<<20),
+      real(-0x7382e0581c000LL),reale(46079LL,0xdfa4f7d6b097bLL),
+      // _C4x[151]
+      real(0x4d670674dLL<<20),real(-0x212a526a59c0000LL),
+      real(0x74d620fb6d80000LL),real(-0xef8ba34c8740000LL),
+      real(0x116e3dbfd5eLL<<20),real(-0x7cf99a74ecc0000LL),
+      real(-0x6f74068a7180000LL),real(0xc30e342965c0000LL),
+      real(-0x6299996391LL<<20),real(0x2142ebd6040000LL),
+      real(0x937704e6f80000LL),real(0x402c43bf2c0000LL),
+      real(-0x2f872ef9963000LL),reale(46079LL,0xdfa4f7d6b097bLL),
+      // _C4x[152]
+      real(0x91dbaae447LL<<20),real(-0x10852008f6aLL<<20),
+      real(0xf5d2e8872dLL<<20),real(-0x19e277ff48LL<<20),
+      real(-0xba0387bf1dLL<<20),real(0xa9c28a7b5aLL<<20),
+      real(-0x1e0b075737LL<<20),real(-0x1365648a24LL<<20),
+      real(-0xc040d09c1LL<<20),real(0x157e47e59eLL<<20),
+      real(-0x731193f5bLL<<20),real(0x6042659ec2000LL),
+      reale(46079LL,0xdfa4f7d6b097bLL),
+      // _C4x[153]
+      real(0x565424989aa80000LL),real(0x19becd8256b40000LL),
+      real(-0x5ce84822f7eLL<<20),real(0x32b09223748c0000LL),
+      real(0x58cb61831980000LL),real(-0x21b97054d1c0000LL),
+      real(-0xe18452e77fLL<<20),real(0x73cbed27abc0000LL),
+      real(0x8bb5bd3c880000LL),real(-0xdb0f0aaec0000LL),
+      real(-0x63c3eeba719000LL),reale(322559LL,0x1d82c6ded425dLL),
+      // _C4x[154]
+      real(-0x59ec90b7ba5LL<<20),real(0x1b2e993a518LL<<20),
+      real(0xb181e937d5LL<<20),real(0x848206ddd2LL<<20),
+      real(-0xf0573a4eb1LL<<20),real(0x178a3aa28cLL<<20),
+      real(0x54cb88cc9LL<<20),real(0x347f03cf46LL<<20),
+      real(-0x1d8e5249bdLL<<20),real(0x2fd680f7c84000LL),
+      reale(322559LL,0x1d82c6ded425dLL),
+      // _C4x[155]
+      real(0x81cc8b1dcdLL<<20),real(0xfbb72a664ee0000LL),
+      real(-0xa9b81eb4ea40000LL),real(-0x1a9b4c3da160000LL),
+      real(-0x2fae19e7f980000LL),real(0x4780d431da60000LL),
+      real(-0x94b9eca98c0000LL),real(-0x26a006435e0000LL),
+      real(-0x238b221440f800LL),reale(322559LL,0x1d82c6ded425dLL),
+      // _C4x[156]
+      real(-0x50279d0e5080000LL),real(-0x1377536973LL<<20),
+      real(-0x5dbd91fdb180000LL),real(0x31c729210eLL<<20),
+      real(0x29488a66580000LL),real(0x14b8aba5efLL<<20),
+      real(-0x119aee903b80000LL),real(0x28435aa5d4b000LL),
+      reale(322559LL,0x1d82c6ded425dLL),
+      // _C4x[157]
+      real(-0xf7ed31ddbc0000LL),real(0x2a1cd053860000LL),
+      real(-0x15bd5c44a80000LL),real(0x58222c9a6a0000LL),
+      real(-0x1a74fbea940000LL),real(-0x33adc5ff20000LL),
+      real(-0x1e088e877c800LL),reale(46079LL,0xdfa4f7d6b097bLL),
+      // _C4x[158]
+      real(-0x49904931bLL<<20),real(0x587ea7004LL<<20),real(-0x713785ddLL<<20),
+      real(0x159398e02LL<<20),real(-0x19125a29fLL<<20),real(0x490d94cd2c000LL),
+      reale(46079LL,0xdfa4f7d6b097bLL),
+      // _C4x[159]
+      real(-0x860dfb0dLL<<20),real(0x30520b04740000LL),
+      real(-0x16c930c6e80000LL),real(-0x1551cc2040000LL),
+      real(-0x9e5c3c48b000LL),reale(46079LL,0xdfa4f7d6b097bLL),
+      // _C4x[160]
+      real(-0x44bcafdLL<<20),real(0x4022926LL<<20),real(-0x5be7eafLL<<20),
+      real(0x142b356fa000LL),real(0x3f32837c872a7963LL),
+      // _C4x[161]
+      real(-0x5e69ccb80000LL),real(-0x129b18c0000LL),real(-0x7e0a2d5000LL),
+      real(0x3b1ebd1165abdce9LL),
+      // _C4x[162]
+      real(-127523LL<<20),real(0x7f04dc000LL),real(0x1f771442bd4c09LL),
+      // _C4x[163]
+      real(0x16e04c00LL),real(0x7ee24536c1115LL),
+      // _C4x[164]
+      real(0x11ee0000LL),real(0x5b1c0000LL),real(0x2380a0000LL),
+      real(0x126f180000LL),real(0xf233a60000LL),real(0x234385140000LL),
+      real(-0x4d5c1f23e0000LL),real(0x35017da21LL<<20),
+      real(-0x144a92180a20000LL),real(0x51fe4e56b0c0000LL),
+      real(-0xeb59f3d2e860000LL),real(0x1f060a0805080000LL),
+      real(-0x305340db42ea0000LL),real(0x35b1d648f5040000LL),
+      real(-0x2452a78bb4ce0000LL),real(0xa981b88bf66c000LL),
+      reale(365566LL,0xff4ff27401803LL),
+      // _C4x[165]
+      real(54009LL<<20),real(0x67acb80000LL),real(0x500d1aLL<<20),
+      real(0xadfe97880000LL),real(-0x160da3e85LL<<20),real(0xdd0128d3580000LL),
+      real(-0x4c49107c44LL<<20),real(0x1114fafcba280000LL),
+      real(-0x2a9587ee883LL<<20),real(0x4c17a3da25f80000LL),
+      real(-0x61c2e73ffa2LL<<20),real(0x584c43ef70c80000LL),
+      real(-0x35101f0ee01LL<<20),real(0x12f378ce74980000LL),
+      real(-0x306e34ba4668000LL),reale(365566LL,0xff4ff27401803LL),
+      // _C4x[166]
+      real(0x22cb56LL<<20),real(0x4712bf8LL<<20),real(-0x86448846LL<<20),
+      real(0x4d78a5544LL<<20),real(-0x1846aa1b42LL<<20),
+      real(0x4d6026db5LL<<24),real(-0xa68352f15eLL<<20),
+      real(0xf43495185cLL<<20),real(-0xe824a7465aLL<<20),
+      real(0x705265a6a8LL<<20),real(0x1aafe4620aLL<<20),
+      real(-0x54b54f2f8cLL<<20),real(0x39c1702c0eLL<<20),
+      real(-0xf0a5fe0ce50000LL),reale(52223LL,0xdb549059b7125LL),
+      // _C4x[167]
+      real(-0x111ca21ceLL<<20),real(0x92841d41680000LL),
+      real(-0x29f2152631LL<<20),real(0x77700c12df80000LL),
+      real(-0xdd22256234LL<<20),real(0x102165ee69880000LL),
+      real(-0x97d2f2eab7LL<<20),real(-0x25f0afa39e80000LL),
+      real(0x9732beeb66LL<<20),real(-0x7cbf10f6a580000LL),
+      real(0x2f60975b43LL<<20),real(-0x618af655c80000LL),
+      real(-0x8a9d0d3688000LL),reale(52223LL,0xdb549059b7125LL),
+      // _C4x[168]
+      real(-0x1b3fbdf6d2c80000LL),real(0x45996b8ba21LL<<20),
+      real(-0x6e75aa49fe180000LL),real(0x6210f2c5834LL<<20),
+      real(-0x10bc4d28ff680000LL),real(-0x41cde5aa8b9LL<<20),
+      real(0x4ab1c7ac75480000LL),real(-0x1ca79717ce6LL<<20),
+      real(-0x32aa32794080000LL),real(0x330fe43f6dLL<<20),
+      real(0x1ffca3e30a80000LL),real(-0x12cf88fa6ff0000LL),
+      reale(365566LL,0xff4ff27401803LL),
+      // _C4x[169]
+      real(-0x71eca5b57e5LL<<20),real(0x46cc55ae2a580000LL),
+      real(0x1cee45fc03cLL<<20),real(-0x5663e4f0ecd80000LL),
+      real(0x35a7c7b51ddLL<<20),real(-0x974f15cf080000LL),
+      real(-0x7645cd0962LL<<20),real(-0x6f217f1c2380000LL),
+      real(0x8684ad181fLL<<20),real(-0x26e1e6e8c680000LL),
+      real(0x1689b847558000LL),reale(365566LL,0xff4ff27401803LL),
+      // _C4x[170]
+      real(0x8ddebe343aLL<<20),real(-0xc011c31e9LL<<24),
+      real(0x3ab0cb9fe6LL<<20),real(0x1a9916d434LL<<20),
+      real(0x60678eb72LL<<20),real(-0x1ff9f88048LL<<20),
+      real(0xb64aaec9eLL<<20),real(0x224f2ebbcLL<<20),real(0x3674d12aLL<<20),
+      real(-0xde9c5a4230000LL),reale(52223LL,0xdb549059b7125LL),
+      // _C4x[171]
+      real(0x392e4b99f4LL<<20),real(0x9d011c37ef80000LL),
+      real(0xd34e66de87LL<<20),real(-0xc0a473ee4980000LL),
+      real(-0xa24391f86LL<<20),real(-0x2950151b280000LL),
+      real(0x3428e530adLL<<20),real(-0x18bf1d836b80000LL),
+      real(0x216a7bfadc8000LL),reale(365566LL,0xff4ff27401803LL),
+      // _C4x[172]
+      real(0x1200bdf8116c0000LL),real(-0x5ba1b11ae080000LL),
+      real(-0x23e6c3f55fc0000LL),real(-0x3e50001d0bLL<<20),
+      real(0x3d5fd0e699c0000LL),real(-0x31f0d677580000LL),
+      real(-0x1b9c6065cc0000LL),real(-0x25c0cef2988000LL),
+      reale(365566LL,0xff4ff27401803LL),
+      // _C4x[173]
+      real(-0x6472fe3LL<<20),real(-0xe3d4e1d7080000LL),real(0x46aa4c61eLL<<20),
+      real(0x916a2a5c80000LL),real(0x3227324dfLL<<20),
+      real(-0x236ac124680000LL),real(0x45bace6718000LL),
+      reale(52223LL,0xdb549059b7125LL),
+      // _C4x[174]
+      real(-0x1a16956LL<<20),real(-0x227092628LL<<20),real(0x53eaa5526LL<<20),
+      real(-0x1172940b4LL<<20),real(-0x3268c87eLL<<20),
+      real(-0x23cc4ec070000LL),reale(52223LL,0xdb549059b7125LL),
+      // _C4x[175]
+      real(0x1f4bce9766LL<<20),real(-0x5fdd5e580000LL),real(0xa3f440b43LL<<20),
+      real(-0x9fca1971c80000LL),real(0x195ba7c1ef8000LL),
+      reale(365566LL,0xff4ff27401803LL),
+      // _C4x[176]
+      real(0x1558506bdd80000LL),real(-0x7a4a6b91fLL<<20),
+      real(-0xc1fc716b80000LL),real(-0x6677b4e9b0000LL),
+      reale(365566LL,0xff4ff27401803LL),
+      // _C4x[177]
+      real(0x932fdbLL<<20),real(-0xb7410080000LL),real(0x234f1b38000LL),
+      real(0x99262e0aeeff091LL),
+      // _C4x[178]
+      real(-0x32ad0aLL<<20),real(-0x168d9710000LL),real(0x38232f25bccb5275LL),
+      // _C4x[179]
+      real(0xecd8000LL),real(0x4f56c0c24f87LL),
+      // _C4x[180]
+      real(-1615LL<<20),real(-0x396880000LL),real(-212534LL<<20),
+      real(-0x85c63380000LL),real(0x146d5b23LL<<20),real(-0xfb41142e80000LL),
+      real(0x6ce077adcLL<<20),real(-0x1f78e2983980000LL),
+      real(0x68e848a615LL<<20),real(-0x10644b59f3480000LL),
+      real(0x1f453d0a1eeLL<<20),real(-0x2d579881dff80000LL),
+      real(0x3002653e387LL<<20),real(-0x1f95c95817a80000LL),
+      real(0x914a9e2ed338000LL),reale(408574LL,0xe11d1e092eda9LL),
+      // _C4x[181]
+      real(-58786LL<<20),real(-0x22a868LL<<20),real(0x4eac072LL<<20),
+      real(-0x37a6160cLL<<20),real(0x15ee16526LL<<20),real(-0x5aee1acfLL<<24),
+      real(0x10b01e88baLL<<20),real(-0x23f7de64d4LL<<20),
+      real(0x39a4332b6eLL<<20),real(-0x443f573578LL<<20),
+      real(0x3a056acd82LL<<20),real(-0x215eb2969cLL<<20),
+      real(0xb8d166f36LL<<20),real(-0x1ce0b816070000LL),
+      reale(19455LL,0xf256b84994845LL),
+      // _C4x[182]
+      real(0x12c71299eLL<<20),real(-0xc4ddd05ba80000LL),
+      real(0x46ff5325c9LL<<20),real(-0x1091808b66b80000LL),
+      real(0x2ad630e8614LL<<20),real(-0x4e92a508ecc80000LL),
+      real(0x6510e717cdfLL<<20),real(-0x54aeb3c027d80000LL),
+      real(0x20abba2fc8aLL<<20),real(0x11cde6b42e180000LL),
+      real(-0x22ba072788bLL<<20),real(0x160a1506db080000LL),
+      real(-0x59b3a2379f58000LL),reale(408574LL,0xe11d1e092eda9LL),
+      // _C4x[183]
+      real(0x8611fdfe7cLL<<20),real(-0x1c4d2ef1e48LL<<20),
+      real(0x40757ac5854LL<<20),real(-0x636fb3adbaLL<<24),
+      real(0x60fcc033fecLL<<20),real(-0x28ce9785af8LL<<20),
+      real(-0x1fc3eed6a3cLL<<20),real(0x3fd2e7b543LL<<24),
+      real(-0x2dbfcefc5a4LL<<20),real(0xfbe0aa2258LL<<20),
+      real(-0x1aa48ff1ccLL<<20),real(-0x3ee3b308260000LL),
+      reale(408574LL,0xe11d1e092eda9LL),
+      // _C4x[184]
+      real(0x52d38896f8bLL<<20),real(-0x69d66f818ca80000LL),
+      real(0x4656ca873fcLL<<20),real(0xca9586e4a280000LL),
+      real(-0x486f0b6e413LL<<20),real(0x3e51674541f80000LL),
+      real(-0x11c29dd7982LL<<20),real(-0x538c73053380000LL),
+      real(0x250fa482cfLL<<20),real(0x21f35b25c980000LL),
+      real(-0x110150274e88000LL),reale(408574LL,0xe11d1e092eda9LL),
+      // _C4x[185]
+      real(0x4be3b7611eLL<<20),real(0x7df9c8e65LL<<24),
+      real(-0xb7d5e385beLL<<20),real(0x4ff746711cLL<<20),
+      real(0xf1de11b06LL<<20),real(-0xbdd4407d8LL<<20),
+      real(-0x123b4a6356LL<<20),real(0x10f0c4fcb4LL<<20),
+      real(-0x44ea62792LL<<20),real(0x16fdaafdd0000LL),
+      reale(58367LL,0xd70428dcbd8cfLL),
+      // _C4x[186]
+      real(-0x9726f4fc34LL<<20),real(0xff4317f5080000LL),
+      real(0x1bbfa05d89LL<<20),real(0xf6d36e74980000LL),
+      real(-0x1da1c48f9aLL<<20),real(0x736575d3280000LL),
+      real(0x282d7a403LL<<20),real(0x7ce6feab80000LL),real(-0xd59ae9d0e8000LL),
+      reale(58367LL,0xd70428dcbd8cfLL),
+      // _C4x[187]
+      real(0x47bc345c88LL<<20),real(0xfc7910c13LL<<24),
+      real(-0x8a99ea3268LL<<20),real(-0x1daff62ceLL<<24),
+      real(-0xb75ae4cd8LL<<20),real(0x327b674f1LL<<24),
+      real(-0x14b41287c8LL<<20),real(0x17347d5efc0000LL),
+      reale(408574LL,0xe11d1e092eda9LL),
+      // _C4x[188]
+      real(-0x39cd187bbLL<<20),real(-0x43663bd8c80000LL),
+      real(-0xa53ccf9f2LL<<20),real(0x73d8c049880000LL),real(0x29510997LL<<20),
+      real(-0x2376b9f280000LL),real(-0x5829503048000LL),
+      reale(58367LL,0xd70428dcbd8cfLL),
+      // _C4x[189]
+      real(-0x605a433c5eLL<<20),real(0xee9760038LL<<20),
+      real(0x31be2bbeeLL<<20),real(0x16998498fcLL<<20),
+      real(-0xd95bd4266LL<<20),real(0x173060290f0000LL),
+      reale(408574LL,0xe11d1e092eda9LL),
+      // _C4x[190]
+      real(-0x154417c7baLL<<20),real(0x21c835beaa80000LL),
+      real(-0x47f00f48dLL<<20),real(-0x131fb47ac80000LL),
+      real(-0x11435a10568000LL),reale(408574LL,0xe11d1e092eda9LL),
+      // _C4x[191]
+      real(0x193584d8cLL<<20),real(0xaee4c7138LL<<20),real(-0x90b2b09bcLL<<20),
+      real(0x14347a15e20000LL),reale(408574LL,0xe11d1e092eda9LL),
+      // _C4x[192]
+      real(-0x12b4039bLL<<20),real(-0x2ab303780000LL),real(-0x1a402b7d8000LL),
+      reale(5306LL,0x2ad1d52b570cdLL),
+      // _C4x[193]
+      real(-0x8e52aaLL<<20),real(0x18513690000LL),real(0x8f68f0ea15ed989LL),
+      // _C4x[194]
+      real(-0x59168000LL),real(0xa0b835899f381LL),
+      // _C4x[195]
+      real(46189LL<<20),real(0x1fe0ccLL<<20),real(-0x55d6a55LL<<20),
+      real(0x4928642aLL<<20),real(-0x2363dbf97LL<<20),real(0xb840ca888LL<<20),
+      real(-0x2baa055459LL<<20),real(0x7de38a60e6LL<<20),
+      real(-0x11a7161219bLL<<20),real(0x1f11977c044LL<<20),
+      real(-0x2a7db4d305dLL<<20),real(0x2b3c8b159a2LL<<20),
+      real(-0x1bcb7dfb99fLL<<20),real(0x7e5725605ea0000LL),
+      reale(451582LL,0xc2ea499e5c34fLL),
+      // _C4x[196]
+      real(-0x1dc61f3LL<<24),real(0x177c584b4LL<<20),real(-0xa68e4dda8LL<<20),
+      real(0x310ee42c7cLL<<20),real(-0xa5e7161a2LL<<24),
+      real(0x1a2ee772944LL<<20),real(-0x3250f74ee98LL<<20),
+      real(0x49d6b12a10cLL<<20),real(-0x51be070751LL<<24),
+      real(0x4214c5c39d4LL<<20),real(-0x24a245ec788LL<<20),
+      real(0xc5a70e199cLL<<20),real(-0x1e525ae3edc0000LL),
+      reale(451582LL,0xc2ea499e5c34fLL),
+      // _C4x[197]
+      real(-0x1c2fcb0feaLL<<20),real(0x78cd035154LL<<20),
+      real(-0x16d0a12eceeLL<<20),real(0x32382092d1LL<<24),
+      real(-0x50f9872fef2LL<<20),real(0x5d34c6740ccLL<<20),
+      real(-0x457e5bc2bf6LL<<20),real(0x1415a511e88LL<<20),
+      real(0x15730500606LL<<20),real(-0x20401dde7bcLL<<20),
+      real(0x1361c2c3102LL<<20),real(-0x4d7d212a0a40000LL),
+      reale(451582LL,0xc2ea499e5c34fLL),
+      // _C4x[198]
+      real(-0x2640ec7ff08LL<<20),real(0x49172ca078cLL<<20),
+      real(-0x60a332f31aLL<<24),real(0x4f6133ce734LL<<20),
+      real(-0x13c00fbdc38LL<<20),real(-0x29139b5a224LL<<20),
+      real(0x3ba48bedf3LL<<24),real(-0x26443e5f67cLL<<20),
+      real(0xc0b73ade98LL<<20),real(-0x100cb5f7d4LL<<20),
+      real(-0x3d5727afac0000LL),reale(451582LL,0xc2ea499e5c34fLL),
+      // _C4x[199]
+      real(-0xd6b297dd67LL<<20),real(0x629dad8e08LL<<20),
+      real(0x4cbffd5477LL<<20),real(-0xa54ccd42faLL<<20),
+      real(0x72d04d3dd5LL<<20),real(-0x1671c74cfcLL<<20),
+      real(-0xddab04a4dLL<<20),real(0x37935a302LL<<20),real(0x4f2336311LL<<20),
+      real(-0x233169f0960000LL),reale(64511LL,0xd2b3c15fc4079LL),
+      // _C4x[200]
+      real(0x9db3395b4LL<<24),real(-0x9d7319ec68LL<<20),
+      real(0x2d4332da7LL<<24),real(0x170f6ac248LL<<20),real(-0x63f39826LL<<24),
+      real(-0x136411b108LL<<20),real(0xecea038dLL<<24),
+      real(-0x35a24d258LL<<20),real(0x4a8ec1980000LL),
+      reale(64511LL,0xd2b3c15fc4079LL),
+      // _C4x[201]
+      real(-0xbcd2f1d94LL<<20),real(0x160523aeb8LL<<20),
+      real(0x1643235e04LL<<20),real(-0x1a2a58ca3LL<<24),
+      real(0x3f66def9cLL<<20),real(0x28e5854e8LL<<20),real(0xb430db34LL<<20),
+      real(-0xcaee985680000LL),reale(64511LL,0xd2b3c15fc4079LL),
+      // _C4x[202]
+      real(0x1042c27c41LL<<24),real(-0x577f944588LL<<20),
+      real(-0x268f031eaLL<<24),real(-0x13c26a3db8LL<<20),
+      real(0x2ff20d26bLL<<24),real(-0x11540a97e8LL<<20),
+      real(0xfe28858a80000LL),reale(451582LL,0xc2ea499e5c34fLL),
+      // _C4x[203]
+      real(-0xea32c51c9LL<<20),real(-0x4d6b22d794LL<<20),
+      real(0x2863098f21LL<<20),real(0x3eb4014b6LL<<20),real(-0x3d11ab75LL<<20),
+      real(-0x267d9727d20000LL),reale(451582LL,0xc2ea499e5c34fLL),
+      // _C4x[204]
+      real(0x271f287fLL<<24),real(0xf600a494LL<<20),real(0x16c0b9cef8LL<<20),
+      real(-0xbe2389024LL<<20),real(0x11a4af29a40000LL),
+      reale(451582LL,0xc2ea499e5c34fLL),
+      // _C4x[205]
+      real(0x1e33a6057eLL<<20),real(-0x21167e86cLL<<20),
+      real(-0xeff2cdd6LL<<20),real(-0x123578c1740000LL),
+      reale(451582LL,0xc2ea499e5c34fLL),
+      // _C4x[206]
+      real(0x2603b6b8LL<<20),real(-0x1b1fbe44LL<<20),real(0x35b1e4040000LL),
+      reale(5864LL,0xb6105765cc00bLL),
+      // _C4x[207]
+      real(-0x1196b3LL<<20),real(-0xcdcede0000LL),real(0x9e817610332f06fLL),
+      // _C4x[208]
+      real(274LL<<20),real(0x8757c14b789bLL),
+      // _C4x[209]
+      real(0x1671deLL<<24),real(-0x1500c668LL<<20),real(0xb37afc9LL<<24),
+      real(-0x40e6c22f8LL<<20),real(0x113a17194LL<<24),
+      real(-0x382ee86c88LL<<20),real(0x90789ecdfLL<<24),
+      real(-0x128f7f11918LL<<20),real(0x1e91fe774aLL<<24),
+      real(-0x27d2630dea8LL<<20),real(0x2730923e75LL<<24),
+      real(-0x18b4e1c3338LL<<20),real(0x6f2df7ee67c0000LL),
+      reale(494590LL,0xa4b77533898f5LL),
+      // _C4x[210]
+      real(0x3a2fdc86LL<<24),real(-0x133458534LL<<24),real(0x4983cdbc2LL<<24),
+      real(-0xd4d77511LL<<28),real(0x1dcdf50ddeLL<<24),
+      real(-0x342b8eadecLL<<24),real(0x472c5d4b1aLL<<24),
+      real(-0x4a78d3d788LL<<24),real(0x39b15b6bb6LL<<24),
+      real(-0x1f0000c9a4LL<<24),real(0xa393147f2LL<<24),
+      real(-0x18b4e1c33380000LL),reale(494590LL,0xa4b77533898f5LL),
+      // _C4x[211]
+      real(0xb3c06cd6dLL<<24),real(-0x1cd91850ed8LL<<20),
+      real(0x37ca1889e4LL<<24),real(-0x50c8876bea8LL<<20),
+      real(0x546435a5dbLL<<24),real(-0x3839a481d78LL<<20),
+      real(0xa846bfd72LL<<24),real(0x1777a57c6b8LL<<20),
+      real(-0x1dd3659b37LL<<24),real(0x112d2a31fe8LL<<20),
+      real(-0x43bae67ca340000LL),reale(494590LL,0xa4b77533898f5LL),
+      // _C4x[212]
+      real(0xb24820b1LL<<28),real(-0xcdaa7f9LL<<32),real(0x8d98303fLL<<28),
+      real(-0x715b264LL<<28),real(-0x69a997fbLL<<28),real(0x7cf953f8LL<<28),
+      real(-0x492e000dLL<<28),real(0x1532a074LL<<28),real(-0x1477807LL<<28),
+      real(-0x84ab32d6LL<<20),reale(70655LL,0xce6359e2ca823LL),
+      // _C4x[213]
+      real(0x2b3869c18LL<<24),real(0x6bde35689LL<<24),real(-0x9bd70f74eLL<<24),
+      real(0x59f59768bLL<<24),real(-0x989546f4LL<<24),real(-0xe250b353LL<<24),
+      real(0x1ea69be6LL<<24),real(0x4ec2b9afLL<<24),real(-0x1ff3696ed80000LL),
+      reale(70655LL,0xce6359e2ca823LL),
+      // _C4x[214]
+      real(-0x37574f34acLL<<24),real(0x84fafcb78LL<<24),
+      real(0xb233d7bfcLL<<24),real(-0x6f2a193LL<<28),real(-0x89bedbe1cLL<<24),
+      real(0x5a25b4328LL<<24),real(-0x12508eb74LL<<24),real(-0x31e34911LL<<20),
+      reale(494590LL,0xa4b77533898f5LL),
+      // _C4x[215]
+      real(0xd6416fd2LL<<24),real(0x1a7ce273bLL<<24),real(-0x164414e34LL<<24),
+      real(0x18514f7dLL<<24),real(0x26a24e46LL<<24),real(0xde21c9fLL<<24),
+      real(-0xbfafa69580000LL),reale(70655LL,0xce6359e2ca823LL),
+      // _C4x[216]
+      real(-0x2bf157d5LL<<28),real(-0x2808e738LL<<28),real(-0x1ac7b8a3LL<<28),
+      real(0x2cec47ecLL<<28),real(-0xe84ff89LL<<28),real(0xa955cbd6LL<<20),
+      reale(494590LL,0xa4b77533898f5LL),
+      // _C4x[217]
+      real(-0x4e628a606LL<<24),real(0x1f0426c698LL<<20),real(0x5a0f914dLL<<24),
+      real(0x6ca5b688LL<<20),real(-0x25d6eb7f040000LL),
+      reale(494590LL,0xa4b77533898f5LL),
+      // _C4x[218]
+      real(-0x1c84ad12LL<<24),real(0x167f4f58cLL<<24),real(-0xa6243226LL<<24),
+      real(0xd66f0f6680000LL),reale(494590LL,0xa4b77533898f5LL),
+      // _C4x[219]
+      real(-0x8af151LL<<24),real(-0x17c4bd28LL<<20),real(-0x2ab725b4c0000LL),
+      reale(70655LL,0xce6359e2ca823LL),
+      // _C4x[220]
+      real(-475508LL<<28),real(0xcc9558LL<<20),real(0x7759dcb5574d50a7LL),
+      // _C4x[221]
+      real(-14618LL<<20),real(0x2c95e8ad321065LL),
+      // _C4x[222]
+      real(-0x37b8e9dLL<<24),real(0x16298b8aLL<<24),real(-0x6829a96fLL<<24),
+      real(0x17ac60b08LL<<24),real(-0x448421b01LL<<24),real(0xa08605c86LL<<24),
+      real(-0x132e21a1d3LL<<24),real(0x1de177c384LL<<24),
+      real(-0x2559d5b465LL<<24),real(0x23ba1a5382LL<<24),
+      real(-0x1626957137LL<<24),real(0x62d3870cceLL<<20),
+      reale(537598LL,0x8684a0c8b6e9bLL),
+      // _C4x[223]
+      real(-0xa4a255b8LL<<24),real(0x2198941c4LL<<24),real(-0x55f3d536LL<<28),
+      real(0xaea2f0a7cLL<<24),real(-0x11ad0f2508LL<<24),
+      real(0x16acb091b4LL<<24),real(-0x169cc955bLL<<28),
+      real(0x10e39cbc6cLL<<24),real(-0x8d594f058LL<<24),
+      real(0x2dbb02fa4LL<<24),real(-0x6d0cb854cLL<<20),
+      reale(179199LL,0x822c35983cf89LL),
+      // _C4x[224]
+      real(-0x4e6bc3424LL<<24),real(0x8833a59eLL<<28),real(-0xb3dd28c1cLL<<24),
+      real(0xac3fc9f68LL<<24),real(-0x667eb7414LL<<24),real(0x77b80cfLL<<28),
+      real(0x37cf913f4LL<<24),real(-0x3ef425588LL<<24),real(0x230a4ebfcLL<<24),
+      real(-0x88b062ecLL<<24),reale(76799LL,0xca12f265d0fcdLL),
+      // _C4x[225]
+      real(-0x50e951d9eLL<<28),real(0x2dc21adf0cLL<<24),
+      real(0x9a9f67018LL<<24),real(-0x307f93b19cLL<<24),
+      real(0x3187e8171LL<<28),real(-0x1ad4690cc4LL<<24),
+      real(0x72d4f7c08LL<<24),real(-0x4284616cLL<<24),real(-0x360b8f27cLL<<20),
+      reale(537598LL,0x8684a0c8b6e9bLL),
+      // _C4x[226]
+      real(0x3701f1b322LL<<24),real(-0x3de4b7ca4cLL<<24),
+      real(0x1e0551a306LL<<24),real(-0x3ff2ae88LL<<24),
+      real(-0x5ea04db96LL<<24),real(0x4663a33cLL<<24),real(0x21c3a104eLL<<24),
+      real(-0xcbb56a5acLL<<20),reale(537598LL,0x8684a0c8b6e9bLL),
+      // _C4x[227]
+      real(0x45b00e8LL<<24),real(0x1879e031cLL<<24),real(0x380b7efLL<<28),
+      real(-0x135dac8bcLL<<24),real(0xb2b97ef8LL<<24),real(-0x20bc2b14LL<<24),
+      real(-0xea38f04LL<<20),reale(76799LL,0xca12f265d0fcdLL),
+      // _C4x[228]
+      real(0x1c800d54cLL<<24),real(-0x125e2539LL<<28),real(-0x431e66cLL<<24),
+      real(0x22c53a38LL<<24),real(0xfcf4ddcLL<<24),real(-0xb47cb7cLL<<24),
+      reale(76799LL,0xca12f265d0fcdLL),
+      // _C4x[229]
+      real(-0x24c667a9LL<<28),real(-0x204f7245cLL<<24),real(0x29ae5e638LL<<24),
+      real(-0xc2f052f4LL<<24),real(0x6b6905bcLL<<20),
+      reale(537598LL,0x8684a0c8b6e9bLL),
+      // _C4x[230]
+      real(0x16cedd0f7LL<<24),real(0x68f5252aLL<<24),real(0x100a803dLL<<24),
+      real(-0x24d58931aLL<<20),reale(537598LL,0x8684a0c8b6e9bLL),
+      // _C4x[231]
+      real(0x3221baeLL<<28),real(-0x14bb46dLL<<28),real(0x1728fcfLL<<24),
+      reale(76799LL,0xca12f265d0fcdLL),
+      // _C4x[232]
+      real(-163369LL<<28),real(-533806LL<<28),reale(14529LL,0xb09bccfe817bfLL),
+      // _C4x[233]
+      real(173LL<<24),real(0x88d5e64011771LL),
+      // _C4x[234]
+      real(0x25fe13c8LL<<24),real(-0x9850ba5cLL<<24),real(0x1e97df6aLL<<28),
+      real(-0x504eaa764LL<<24),real(0xae1c91d78LL<<24),
+      real(-0x139186d8ecLL<<24),real(0x1d12b9b75LL<<28),
+      real(-0x2313cf5ff4LL<<24),real(0x20bd27f328LL<<24),
+      real(-0x1401d14d7cLL<<24),real(0x589a55c4dcLL<<20),
+      reale(580606LL,0x6851cc5de4441LL),
+      // _C4x[235]
+      real(0x818a2ec5LL<<28),real(-0x12b6c5f08LL<<28),real(0x230938ccbLL<<28),
+      real(-0x351e2e0f6LL<<28),real(0x40a325c81LL<<28),
+      real(-0x3dd759604LL<<28),real(0x2cbf53447LL<<28),
+      real(-0x16dd817d2LL<<28),real(0x7467aa7dLL<<28),
+      real(-0x1126211dd8LL<<20),reale(580606LL,0x6851cc5de4441LL),
+      // _C4x[236]
+      real(0x3dcb4a886LL<<28),real(-0x4b489ee77cLL<<24),
+      real(0x42904411c8LL<<24),real(-0x232f8a41b4LL<<24),
+      real(-0x2305ff7dLL<<28),real(0x18aab34994LL<<24),
+      real(-0x196f7c6368LL<<24),real(0xdc5682b5cLL<<24),
+      real(-0x354402037cLL<<20),reale(580606LL,0x6851cc5de4441LL),
+      // _C4x[237]
+      real(0x1f56ae64eLL<<28),real(0x132b344d4LL<<28),real(-0x30d2fad16LL<<28),
+      real(0x2c89c35f8LL<<28),real(-0x168935c9aLL<<28),real(0x5932509cLL<<28),
+      real(-0xe61cfeLL<<28),real(-0x31e34911LL<<24),
+      reale(580606LL,0x6851cc5de4441LL),
+      // _C4x[238]
+      real(-0x7cff45cc8LL<<24),real(0x32d4ac134LL<<24),real(0x57cb65dLL<<28),
+      real(-0xc68d9d14LL<<24),real(-0x6973598LL<<24),real(0x4ada9e24LL<<24),
+      real(-0x1a98e3004LL<<20),reale(82943LL,0xc5c28ae8d7777LL),
+      // _C4x[239]
+      real(0x159a60cfLL<<28),real(0x721fec4LL<<28),real(-0x12aa2317LL<<28),
+      real(0x9ad4f32LL<<28),real(-0x199ce6dLL<<28),real(-0x13522ba8LL<<20),
+      reale(82943LL,0xc5c28ae8d7777LL),
+      // _C4x[240]
+      real(-0xeb80f55LL<<28),real(-0x1858908cLL<<24),real(0x1e2afdd8LL<<24),
+      real(0x112cd7fcLL<<24),real(-0xa9ad115cLL<<20),
+      reale(82943LL,0xc5c28ae8d7777LL),
+      // _C4x[241]
+      real(-0x2464749LL<<32),real(0x26669d6LL<<32),real(-0xa3d513LL<<32),
+      real(0x3def9d8LL<<24),reale(580606LL,0x6851cc5de4441LL),
+      // _C4x[242]
+      real(0x6f0d556LL<<28),real(0x17e5b6fLL<<28),real(-0x239e6b67LL<<24),
+      reale(580606LL,0x6851cc5de4441LL),
+      // _C4x[243]
+      real(-211348LL<<28),real(202566LL<<24),real(0x39b1009e5dec691dLL),
+      // _C4x[244]
+      real(-34717LL<<24),real(0x4013d857859e5adLL),
+      // _C4x[245]
+      real(-0xd0075fc8LL<<24),real(0x25c0dd3cLL<<28),real(-0x5b54718b8LL<<24),
+      real(0xb9680eedLL<<28),real(-0x13c5e421a8LL<<24),real(0x1c32b269eLL<<28),
+      real(-0x20fde01a98LL<<24),real(0x1e23fc24fLL<<28),
+      real(-0x123032a388LL<<24),real(0x50074535fLL<<24),
+      reale(623614LL,0x4a1ef7f3119e7LL),
+      // _C4x[246]
+      real(-0x150a734fLL<<32),real(0x24bdd9aeeLL<<28),real(-0x34a1435b4LL<<28),
+      real(0x3d2daa4aaLL<<28),real(-0x38737aa78LL<<28),real(0x27ba57866LL<<28),
+      real(-0x13e34173cLL<<28),real(0x63c69222LL<<28),real(-0xe8cf54faLL<<24),
+      reale(623614LL,0x4a1ef7f3119e7LL),
+      // _C4x[247]
+      real(-0x4707eab9dLL<<28),real(0x3a445131eLL<<28),
+      real(-0x1b0e43927LL<<28),real(-0x6498a9ecLL<<28),real(0x1875e934fLL<<28),
+      real(-0x178373ef6LL<<28),real(0xc71a15c5LL<<28),real(-0x2fcf2605aLL<<24),
+      reale(623614LL,0x4a1ef7f3119e7LL),
+      // _C4x[248]
+      real(0x3b7e4894LL<<28),real(-0x6d6c0f9aLL<<28),real(0x5b1f61b8LL<<28),
+      real(-0x2b621ef6LL<<28),real(0x9eb72dcLL<<28),real(0x300baeLL<<28),
+      real(-0x68c8a16LL<<24),reale(89087LL,0xc172236bddf21LL),
+      // _C4x[249]
+      real(0x244e10b28LL<<24),real(0x96e2042LL<<28),real(-0xb152f2e8LL<<24),
+      real(-0x13d4edfLL<<28),real(0x481c9f08LL<<24),real(-0x1864aaafLL<<24),
+      reale(89087LL,0xc172236bddf21LL),
+      // _C4x[250]
+      real(0x9eed74LL<<32),real(-0x11ba229LL<<32),real(0x8618baLL<<32),
+      real(-0x140563LL<<32),real(-0x161c61LL<<28),
+      reale(89087LL,0xc172236bddf21LL),
+      // _C4x[251]
+      real(-0x10a43e28LL<<28),real(0xb17829LL<<32),real(0x7eabb48LL<<28),
+      real(-0x45c00a9LL<<28),reale(623614LL,0x4a1ef7f3119e7LL),
+      // _C4x[252]
+      real(0x2120deLL<<32),real(-531601LL<<32),real(109557LL<<28),
+      reale(36683LL,0x318959e11f277LL),
+      // _C4x[253]
+      real(0x1ca55aLL<<28),real(-0x2045e4cLL<<24),
+      reale(36683LL,0x318959e11f277LL),
+      // _C4x[254]
+      real(3464LL<<24),real(0x16f0fb486be35c9LL),
+      // _C4x[255]
+      real(0x2cf5a88LL<<32),real(-0x657473dLL<<32),real(0xc2a0b46LL<<32),
+      real(-0x13d53ee7LL<<32),real(0x1b4a4a44LL<<32),real(-0x1f149bb1LL<<32),
+      real(0x1bdd82c2LL<<32),real(-0x10a1185bLL<<32),real(0x48c0ca8e2LL<<24),
+      reale(666622LL,0x2bec23883ef8dLL),
+      // _C4x[256]
+      real(0xca51764LL<<32),real(-0x113d3e28LL<<32),real(0x1340502cLL<<32),
+      real(-0x1134cafLL<<36),real(0xbd0b734LL<<32),real(-0x5cee2b8LL<<32),
+      real(0x1cc39fcLL<<32),real(-0x4284616cLL<<24),
+      reale(222207LL,0x63f9612d6a52fLL),
+      // _C4x[257]
+      real(0x73aa5faLL<<32),real(-0x2e45af9LL<<32),real(-0x15592c4LL<<32),
+      real(0x36c5691LL<<32),real(-0x31c2d02LL<<32),real(0x19d71fbLL<<32),
+      real(-0x62bf9592LL<<24),reale(95231LL,0xbd21bbeee46cbLL),
+      // _C4x[258]
+      real(-0x69663bLL<<36),real(0x515854LL<<36),real(-0x24a3fdLL<<36),
+      real(506378LL<<36),real(26273LL<<36),real(-0x60175cLL<<28),
+      reale(95231LL,0xbd21bbeee46cbLL),
+      // _C4x[259]
+      real(0x52f54cLL<<36),real(-0x43dbd7LL<<36),real(-866586LL<<36),
+      real(0x1e41a3LL<<36),real(-0x9d2313dLL<<28),
+      reale(666622LL,0x2bec23883ef8dLL),
+      // _C4x[260]
+      real(-28101LL<<40),real(195944LL<<36),real(-1645LL<<40),
+      real(-637602LL<<28),reale(39213LL,0x11a47a8f8b3bdLL),
+      // _C4x[261]
+      real(4972LL<<36),real(4498LL<<36),real(-577583LL<<28),
+      reale(5601LL,0xddf2ecefef51bLL),
+      // _C4x[262]
+      real(-28003LL<<36),real(14196LL<<28),reale(39213LL,0x11a47a8f8b3bdLL),
+      // _C4x[263]
+      real(-88024LL<<24),real(0x6a44bb11ad2310dLL),
+      // _C4x[264]
+      real(-0x6e9fd12LL<<32),real(0xca0272cLL<<32),real(-0x13c7b4d6LL<<32),
+      real(0x1a5f9bc8LL<<32),real(-0x1d54411aLL<<32),real(0x19dc2e64LL<<32),
+      real(-0xf47ecdeLL<<32),real(0x4284616cLL<<28),
+      reale(709630LL,0xdb94f1d6c533LL),
+      // _C4x[265]
+      real(-0x736f1dLL<<36),real(0x7c69888LL<<32),real(-0x6c179eLL<<36),
+      real(0x489ecb8LL<<32),real(-0x231fdfLL<<36),real(0xabf3e8LL<<32),
+      real(-0x18a7ad8LL<<28),reale(101375LL,0xb8d15471eae75LL),
+      // _C4x[266]
+      real(-0xe8e70dLL<<36),real(-0xb96fb4LL<<36),real(0x1748505LL<<36),
+      real(-0x1431b3aLL<<36),real(0xa52337LL<<36),real(-0x27462ddLL<<32),
+      reale(709630LL,0xdb94f1d6c533LL),
+      // _C4x[267]
+      real(0x1ddbcaLL<<36),real(-0xcc71e8LL<<32),real(162197LL<<36),
+      real(234248LL<<32),real(-0x2443f8LL<<28),
+      reale(41742LL,0xf1bf9b3df7503LL),
+      // _C4x[268]
+      real(-224895LL<<36),real(-64554LL<<36),real(111531LL<<36),
+      real(-559300LL<<32),reale(41742LL,0xf1bf9b3df7503LL),
+      // _C4x[269]
+      real(24269LL<<36),real(-46648LL<<32),real(-93624LL<<28),
+      reale(5963LL,0x471b5f51fec25LL),
+      // _C4x[270]
+      real(4571LL<<36),real(-33945LL<<32),reale(5963LL,0x471b5f51fec25LL),
+      // _C4x[271]
+      real(-8LL<<28),real(0x5f43434b6401e1LL),
+      // _C4x[272]
+      real(801009LL<<36),real(-0x127c0a8LL<<32),real(0x17f756LL<<36),
+      real(-0x1a17998LL<<32),real(0x16aa7bLL<<36),real(-0xd46988LL<<32),
+      real(0x39873f8LL<<28),reale(44272LL,0xd1dabbec63649LL),
+      // _C4x[273]
+      real(0x303beeLL<<36),real(-0x28dbf8LL<<36),real(0x1aeb02LL<<36),
+      real(-840924LL<<36),real(254646LL<<36),real(-580027LL<<32),
+      reale(44272LL,0xd1dabbec63649LL),
+      // _C4x[274]
+      real(-815566LL<<36),real(0x152c178LL<<32),real(-0x11aa77LL<<36),
+      real(0x8e8828LL<<32),real(-0x21c8758LL<<28),
+      reale(44272LL,0xd1dabbec63649LL),
+      // _C4x[275]
+      real(-711108LL<<36),real(125720LL<<36),real(17108LL<<36),
+      real(-136206LL<<32),reale(44272LL,0xd1dabbec63649LL),
+      // _C4x[276]
+      real(-10703LL<<36),real(243304LL<<32),real(-0x121118LL<<28),
+      reale(6324LL,0xb043d1b40e32fLL),
+      // _C4x[277]
+      real(-118LL<<36),real(-309LL<<32),real(0x14ce0db25fc00bf5LL),
+      // _C4x[278]
+      real(-8968LL<<28),real(0x6ef59e61feaaea7LL),
+      // _C4x[279]
+      real(-0x124a17LL<<36),real(0x172094LL<<36),real(-0x18b441LL<<36),
+      real(0x152ccaLL<<36),real(-806379LL<<36),real(0x351a62LL<<32),
+      reale(46802LL,0xb1f5dc9acf78fLL),
+      // _C4x[280]
+      real(-51319LL<<40),real(531468LL<<36),real(-250040LL<<36),
+      real(75012LL<<36),real(-169764LL<<32),reale(15600LL,0xe5fc9ede45285LL),
+      // _C4x[281]
+      real(0x1460d6LL<<36),real(-0x10745cLL<<36),real(537586LL<<36),
+      real(-0x1f0644LL<<32),reale(46802LL,0xb1f5dc9acf78fLL),
+      // _C4x[282]
+      real(728LL<<36),real(140LL<<36),real(-940LL<<32),
+      real(0x15fe66403955fe03LL),
+      // _C4x[283]
+      real(763LL<<36),real(-3618LL<<32),real(0x15fe66403955fe03LL),
+      // _C4x[284]
+      real(-712LL<<32),real(0x3351994085c8a607LL),
+      // _C4x[285]
+      real(4810LL<<40),real(-80808LL<<36),real(4277LL<<40),real(-39480LL<<36),
+      real(169764LL<<32),reale(2596LL,0x737a284739077LL),
+      // _C4x[286]
+      real(4758LL<<40),real(-2212LL<<40),real(658LL<<40),real(-23688LL<<32),
+      reale(2596LL,0x737a284739077LL),
+      // _C4x[287]
+      real(-473LL<<40),real(3736LL<<36),real(-14100LL<<32),
+      real(0x172ebece12ebf011LL),
+      // _C4x[288]
+      real(4LL<<44),real(-378LL<<36),reale(2596LL,0x737a284739077LL),
+      // _C4x[289]
+      real(-7864LL<<32),real(0x3617bd362c26857dLL),
+      // _C4x[290]
+      real(-4797LL<<40),real(4018LL<<40),real(-2303LL<<40),real(9870LL<<36),
+      reale(2729LL,0x9a383778d2ed9LL),
+      // _C4x[291]
+      real(-1992LL<<40),real(588LL<<40),real(-1316LL<<36),
+      reale(2729LL,0x9a383778d2ed9LL),
+      // _C4x[292]
+      real(1516LL<<40),real(-357LL<<40),reale(2729LL,0x9a383778d2ed9LL),
+      // _C4x[293]
+      real(-4LL<<36),real(0x1f5feefdb1f0c4fLL),
+      // _C4x[294]
+      real(3784LL<<40),real(-2156LL<<40),real(9212LL<<36),
+      reale(2862LL,0xc0f646aa6cd3bLL),
+      // _C4x[295]
+      real(11LL<<44),real(-392LL<<36),real(0x3ba4052178e24469LL),
+      // _C4x[296]
+      real(-5308LL<<36),reale(2862LL,0xc0f646aa6cd3bLL),
+      // _C4x[297]
+      real(-184LL<<40),real(49LL<<40),real(0x1105ae1d9428c3f7LL),
+      // _C4x[298]
+      real(-2LL<<40),real(0x5ac8f5f3162ebfdLL),
+      // _C4x[299]
+      real(2LL<<40),real(0xc5e28ed2c935abLL),
+    };
+#elif GEOGRAPHICLIB_GEODESICEXACT_ORDER == 27
+    static const real coeff[] = {
+      // _C4x[0]
+      real(0x104574695550b58LL),real(0x124efd1ef41bc1cLL),
+      real(0x14b36c04f5f7ca0LL),real(0x1787788b9792f24LL),
+      real(0x1ae5caaf52545e8LL),real(0x1ef111702bafd2cLL),
+      real(0x23d6fb7cfc3d530LL),real(0x29d483e08118c34LL),
+      real(0x313c47ee86cd878LL),real(0x3a800de5bbb223cLL),
+      real(0x463f6a859617dc0LL),real(0x555ed8909112544LL),
+      real(0x692d2b9362db308LL),real(0x83a245a495f5b4cLL),
+      real(0xa7cc0a01a036650LL),real(0xda93e49d10b2a54LL),
+      real(0x1243757f6f15c598LL),real(0x193422259e6ad85cLL),
+      real(0x24309a0ea1d47ee0LL),real(0x36b22ea791accb64LL),
+      real(0x588e3327aee70028LL),reale(2530LL,0x27feb6f2ec96cLL),
+      reale(5262LL,0xb996ed2c7b770LL),reale(14472LL,0x7e5f0c3a53874LL),
+      reale(86834LL,0xf63a495df52b8LL),reale(-303923LL,0xa233ff3725e7cLL),
+      reale(759805LL,0xea7e01f6213caLL),reale(0x1163fcLL,0xdfbd02f131dafLL),
+      // _C4x[1]
+      real(0x16b98c18c43f0LL),real(0x1be76827efc80LL),real(0x2291674649910LL),
+      real(0x2b3d2747a6820LL),real(0x36a8d2fdcc830LL),real(0x45e795ad137c0LL),
+      real(0x5a8eeaa036550LL),real(0x77007a4bcbf60LL),real(0x9ee5aa2960470LL),
+      real(0xd8045ac825300LL),real(0x12bb93df5b3990LL),
+      real(0x1a9b1c398546a0LL),real(0x26d2a92f5c98b0LL),
+      real(0x3a7858f998ee40LL),real(0x5b6e62f9c0b5d0LL),
+      real(0x959d5c24529de0LL),real(0x102f2d0b50524f0LL),
+      real(0x1e1472bfb1ba980LL),real(0x3d69bf9cb587a10LL),
+      real(0x8ee1210e8c36520LL),real(0x194d332fe8d44930LL),
+      real(0x6534ccbfa35124c0LL),reale(15788LL,0x2cc4c78572650LL),
+      reale(-115780LL,0xd079e2d63c60LL),reale(173669LL,0xec7492bbea570LL),
+      reale(-75981LL,0x688cffcdc979fLL),reale(379902LL,0xf53f00fb109e5LL),
+      // _C4x[2]
+      real(0xab22c89592500LL),real(0xd46ccddd414a0LL),real(0x10a4eb8f1ddb40LL),
+      real(0x15184ab619d7e0LL),real(0x1b0f2efb81a980LL),
+      real(0x232d3128e64f20LL),real(0x2e6a3ee43c47c0LL),
+      real(0x3e471bedb3b260LL),real(0x552919f15d6e00LL),
+      real(0x7700089e6e39a0LL),real(0xaa7eb4de50d440LL),
+      real(0xfb834e2f281ce0LL),real(0x1801af760623280LL),
+      real(0x263a4a7c48d9420LL),real(0x401905d594140c0LL),
+      real(0x72c2e250398d760LL),real(0xe012c263c05b700LL),
+      real(0x1edcfb1205061ea0LL),real(0x51c797f92b334d40LL),
+      reale(4810LL,0x460394707a1e0LL),reale(42101LL,0xccb76963dbb80LL),
+      reale(-269614LL,0x8d55c47b99920LL),reale(357865LL,0x4c16ffd0cb9c0LL),
+      reale(-115780LL,0xd079e2d63c60LL),reale(-21709LL,0x42716da882b52LL),
+      reale(0x1163fcLL,0xdfbd02f131dafLL),
+      // _C4x[3]
+      real(0x14ba9dec234d90LL),real(0x1a15f878f54920LL),
+      real(0x2134b5fb572db0LL),real(0x2acf89c87d75c0LL),
+      real(0x37fb978513cbd0LL),real(0x4a626dbdd79a60LL),
+      real(0x64a2becb8c9bf0LL),real(0x8afd5ca732eb00LL),
+      real(0xc4970cf56e1210LL),real(0x11deb4357fc9ba0LL),
+      real(0x1add3c5ff77a230LL),real(0x2a08c939311e040LL),
+      real(0x451c5af5bb5c050LL),real(0x7909ad73ef1ece0LL),
+      real(0xe685850971be070LL),real(0x1edeb97922aff580LL),
+      real(0x4f3a8e20463e7690LL),reale(4494LL,0x6f4eb7a652e20LL),
+      reale(37733LL,0xf376431ecf6b0LL),reale(-229274LL,0x2c20251e2cac0LL),
+      reale(271637LL,0x92a93446bd4d0LL),reale(-5668LL,0x733614463ff60LL),
+      reale(-121043LL,0x5370b100e84f0LL),reale(39799LL,0x5b8561a065b3fLL),
+      reale(0x1163fcLL,0xdfbd02f131dafLL),
+      // _C4x[4]
+      real(0x25018b34093680LL),real(0x2f66db340747c0LL),
+      real(0x3d8eaf55c4d300LL),real(0x512efdf6054640LL),
+      real(0x6cf4c335af0f80LL),real(0x952f237cecdcc0LL),
+      real(0xd10b7e4cd0dc00LL),real(0x12cf85d69a3fb40LL),
+      real(0x1bf83185acb2880LL),real(0x2b3ea99410c91c0LL),
+      real(0x462f30f09fee500LL),real(0x7931c8e1f8c9040LL),
+      real(0xe34caff0bb50180LL),real(0x1def0c2db115e6c0LL),
+      real(0x4b7080401d466e00LL),reale(4194LL,0xbf682a6ae8540LL),
+      reale(34423LL,0x2600aa7441a80LL),reale(-202944LL,0x1726442785bc0LL),
+      reale(225378LL,0x7bd3e279ef700LL),reale(18574LL,0x52c9633395a40LL),
+      reale(-113351LL,0x39957cff380LL),reale(27528LL,0x198b9d86370c0LL),
+      reale(3947LL,0xb3131e15c994LL),reale(0x1163fcLL,0xdfbd02f131dafLL),
+      // _C4x[5]
+      real(0x40c53da188eed0LL),real(0x54ed187b34c440LL),
+      real(0x7146df082c9bb0LL),real(0x9a154e844696a0LL),
+      real(0xd666e59b550690LL),real(0x13262a46ef0dd00LL),
+      real(0x1c3f2cd359b1b70LL),real(0x2b4dcc62e91c360LL),
+      real(0x45a57497f9cc650LL),real(0x771c08f5a9775c0LL),
+      real(0xdd1a4961392f330LL),real(0x1ccccddd60de2020LL),
+      real(0x47bbc762b5878e10LL),reale(3937LL,0xc2066e54dee80LL),
+      reale(31838LL,0x13ce9b56b82f0LL),reale(-183991LL,0xf715b65f90ce0LL),
+      reale(196055LL,0x20a74184cbdd0LL),reale(26856LL,0x50de39af9a740LL),
+      reale(-103682LL,0x6d7b35dec2ab0LL),reale(31195LL,0x5686bd94fe9a0LL),
+      reale(-11740LL,0x133929ff3b590LL),reale(7362LL,0xc12f75a94f319LL),
+      reale(0x1163fcLL,0xdfbd02f131dafLL),
+      // _C4x[6]
+      real(0x73457ae9fefc80LL),real(0x9bfefa36a68d60LL),
+      real(0xd7e57b2fb0d740LL),real(0x132c60dd72bf720LL),
+      real(0x1c1d29144004a00LL),real(0x2ad464b0fcdcce0LL),
+      real(0x446dc104a967cc0LL),real(0x7436e717eb8b6a0LL),
+      real(0xd626d1c40bc9780LL),real(0x1badddc640275c60LL),
+      real(0x445f879c8f67c240LL),reale(3719LL,0x5820c25fe6620LL),
+      reale(29754LL,0xa45b204c52500LL),reale(-169505LL,0x1dd84d2a87be0LL),
+      reale(175522LL,0xa8a2f18c5e7c0LL),reale(30060LL,0x7f96216b245a0LL),
+      reale(-95557LL,0x358f8202b3280LL),reale(31150LL,0x37da9e0a66b60LL),
+      reale(-14735LL,0xdfc58b1922d40LL),reale(6239LL,0x114e25ea99520LL),
+      real(0x4f113ff5b79764b6LL),reale(0x1163fcLL,0xdfbd02f131dafLL),
+      // _C4x[7]
+      real(0xd73a52d8bd1790LL),real(0x13078939da8f2e0LL),
+      real(0x1bc62bcb4923530LL),real(0x2a1bb9d3adccf00LL),
+      real(0x42f03cdd160e0d0LL),real(0x711670ab4ed8b20LL),
+      real(0xcf3f2963eb3be70LL),real(0x1aa1c278c7668b40LL),
+      real(0x416120b2cbe67210LL),reale(3532LL,0x3a6649f1d3360LL),
+      reale(28031LL,0x35f5ca2c79fb0LL),reale(-157971LL,0x2ee4d7f0ae780LL),
+      reale(160182LL,0x9c904f3daeb50LL),reale(31228LL,0xe702b02a70ba0LL),
+      reale(-88908LL,0xcbba43faf8f0LL),reale(30210LL,0xe03f62b8103c0LL),
+      reale(-15534LL,0x85f09531b6c90LL),reale(8379LL,0xc089c57da33e0LL),
+      reale(-3747LL,0xcd57a8beaea30LL),reale(2585LL,0x396e1f38f6dbbLL),
+      reale(0x1163fcLL,0xdfbd02f131dafLL),
+      // _C4x[8]
+      real(0x1b54ebcbbde1f00LL),real(0x2947b9527677980LL),
+      real(0x415d003e7b1b800LL),real(0x6df9566e0623680LL),
+      real(0xc8ad7ddfed65100LL),real(0x19abdc3c4555e380LL),
+      real(0x3eb74cbd79d9ca00LL),reale(3370LL,0x20d152b7a6080LL),
+      reale(26575LL,0x8086d641a0300LL),reale(-148507LL,0xf151c949f8d80LL),
+      reale(148190LL,0x3f5dc7314dc00LL),reale(31472LL,0x41aaeb33d4a80LL),
+      reale(-83407LL,0xcfc991b83500LL),reale(29065LL,0x630b32b837780LL),
+      reale(-15586LL,0xd89b5e1b1ee00LL),reale(9192LL,0xabf11a369f480LL),
+      reale(-5287LL,0xc9ec3b4bfe700LL),reale(2436LL,0x784ea73c0a180LL),
+      real(0x2209232c3cc4cca8LL),reale(0x1163fcLL,0xdfbd02f131dafLL),
+      // _C4x[9]
+      real(0x3fcae6c51cf8fd0LL),real(0x6afa1c71c2ac100LL),
+      real(0xc2892977602fa30LL),real(0x18cb840e0ff332e0LL),
+      real(0x3c56602ddecd9290LL),reale(3228LL,0x26f051b5c20c0LL),
+      reale(25324LL,0xf8a24438674f0LL),reale(-140559LL,0xa4d28ee2ee6a0LL),
+      reale(138496LL,0xa2474d581bd50LL),reale(31265LL,0x7dd7c9350e080LL),
+      reale(-78782LL,0xbf80f036e87b0LL),reale(27920LL,0xd85d0c9896a60LL),
+      reale(-15348LL,0x42ae88954f010LL),reale(9468LL,0xaa167d507e040LL),
+      reale(-5982LL,0x32ead41741270LL),reale(3570LL,0xf062f37e99e20LL),
+      real(-0x68dc53d94dbff530LL),real(0x4ae92c9a7a683bf5LL),
+      reale(0x1163fcLL,0xdfbd02f131dafLL),
+      // _C4x[10]
+      real(0xbcd4fd6df5b2600LL),real(0x17fed2a1d906c020LL),
+      real(0x3a338f7e05a82540LL),reale(3102LL,0x8ee9d52fa7060LL),
+      reale(24235LL,0xac0c2ca98fc80LL),reale(-133762LL,0x247e0b2cd04a0LL),
+      reale(130458LL,0x34533ae1a43c0LL),reale(30833LL,0xcd61b102f94e0LL),
+      reale(-74831LL,0x4c5ab3c209300LL),reale(26842LL,0xad19affdd3920LL),
+      reale(-14997LL,0x9ca46173c8240LL),reale(9500LL,0x408e4569f0960LL),
+      reale(-6295LL,0x71c3db0aea980LL),reale(4143LL,0x97d5a30101da0LL),
+      reale(-2535LL,0xa955f7e7ba0c0LL),real(0x4b644b6e4da18de0LL),
+      real(0x11925bb6ba64765aLL),reale(0x1163fcLL,0xdfbd02f131dafLL),
+      // _C4x[11]
+      real(0x3845a63e874b7f90LL),reale(2990LL,0x790a9d44cfaa0LL),
+      reale(23275LL,0xc0709755ecab0LL),reale(-127864LL,0xae9467a7b3640LL),
+      reale(123656LL,0x74905ab09b3d0LL),reale(30291LL,0xc8698ff57f9e0LL),
+      reale(-71411LL,0xd141077f90ef0LL),reale(25848LL,0x521bca14dd980LL),
+      reale(-14606LL,0x539211082b010LL),reale(9413LL,0x816443bfd6920LL),
+      reale(-6416LL,0xcea11270f6b30LL),reale(4438LL,0xfed32587f3cc0LL),
+      reale(-3003LL,0x5445fd3251450LL),real(0x74ba3cd78aa5e860LL),
+      real(-0x3812b2b32b2f8090LL),real(0x28bab2d4ac11f317LL),
+      reale(0x1163fcLL,0xdfbd02f131dafLL),
+      // _C4x[12]
+      reale(22421LL,0x80a7495217980LL),reale(-122682LL,0xda49329f8b540LL),
+      reale(117806LL,0x7498b0aecaf00LL),reale(29700LL,0x9de1e174ab0c0LL),
+      reale(-68414LL,0xbd79cb11f0480LL),reale(24937LL,0xf2aac2170b440LL),
+      reale(-14210LL,0xb0aaeb2f34a00LL),reale(9268LL,0x742c2dd2c8fc0LL),
+      reale(-6434LL,0xdd790f94c4f80LL),reale(4585LL,0x3348b70941340LL),
+      reale(-3267LL,0xc4259dd2ce500LL),reale(2252LL,0x1340649a90ec0LL),
+      real(-0x589f5d02f1d02580LL),real(0x2adce3e44e715240LL),
+      real(0xa36591ccc5a22bcLL),reale(0x1163fcLL,0xdfbd02f131dafLL),
+      // _C4x[13]
+      reale(112706LL,0xdfd869d806ed0LL),reale(29093LL,0xf8d3fc140cbc0LL),
+      reale(-65761LL,0x84ad3ebfe66b0LL),reale(24105LL,0xa651ba0482d20LL),
+      reale(-13823LL,0x2bd795d3b3c90LL),reale(9095LL,0xad3608e2bd280LL),
+      reale(-6395LL,0xdbeb183113c70LL),reale(4646LL,0x4bdec656d47e0LL),
+      reale(-3414LL,0x89f66294fb250LL),reale(2482LL,0x54f2fd0561940LL),
+      real(-0x6c7d891fb0df15d0LL),real(0x44efe2727b65d2a0LL),
+      real(-0x2183dc0de2efcff0LL),real(0x189262ba581c6bf1LL),
+      reale(0x1163fcLL,0xdfbd02f131dafLL),
+      // _C4x[14]
+      reale(-63392LL,0x8f5b768236180LL),reale(23343LL,0xc5a3f9fbbcce0LL),
+      reale(-13454LL,0xd872db320c540LL),reale(8911LL,0x777a0315423a0LL),
+      reale(-6324LL,0xd8eb075800100LL),reale(4656LL,0xe8c5e07109660LL),
+      reale(-3492LL,0xf941a026f1cc0LL),reale(2621LL,0xb84b17c4ad20LL),
+      real(-0x78f908534453df80LL),real(0x55814182d129efe0LL),
+      real(-0x36b7bc0c02deebc0LL),real(0x1ab5b755becbe6a0LL),
+      real(0x672760e43e7e5beLL),reale(0x1163fcLL,0xdfbd02f131dafLL),
+      // _C4x[15]
+      reale(-13103LL,0x6909fee14590LL),reale(8724LL,0xbd02d5fc04060LL),
+      reale(-6235LL,0x97202aa8d6e30LL),reale(4636LL,0xd96d16348cb80LL),
+      reale(-3526LL,0xb8daae79484d0LL),reale(2702LL,0xc781c601a46a0LL),
+      reale(-2063LL,0x846e4aa048d70LL),real(0x60521f1f549575c0LL),
+      real(-0x44a70474ce1373f0LL),real(0x2c2e0084319d1ce0LL),
+      real(-0x15a2a473a1b17b50LL),real(0xff41fd49dab95d3LL),
+      reale(0x1163fcLL,0xdfbd02f131dafLL),
+      // _C4x[16]
+      reale(-6137LL,0xadddc51340600LL),reale(4597LL,0xf56d1171d1b00LL),
+      reale(-3532LL,0x1efef8069b800LL),reale(2747LL,0xc7a53bf3c9500LL),
+      reale(-2143LL,0x63da405706a00LL),real(0x677abbdfa4dcef00LL),
+      real(-0x4e0ad45efdfc2400LL),real(0x37ff2b5bd74de900LL),
+      real(-0x2432b6ddc0003200LL),real(0x11c5dbb8178f4300LL),
+      real(0x4536f43fdb6a550LL),reale(0x1163fcLL,0xdfbd02f131dafLL),
+      // _C4x[17]
+      reale(-3521LL,0x793be71994bd0LL),reale(2768LL,0x78979286ec480LL),
+      reale(-2192LL,0x543644b2a6130LL),real(0x6c38e96882e6a560LL),
+      real(-0x54765a5d7300bb70LL),real(0x402d11108cfc5240LL),
+      real(-0x2e4c264c23518e10LL),real(0x1e09e0cfb5ca8720LL),
+      real(-0xec7bce3f9449ab0LL),real(0xaf0b9139605a58dLL),
+      reale(0x1163fcLL,0xdfbd02f131dafLL),
+      // _C4x[18]
+      reale(-2220LL,0x6aa37b2cb6f00LL),real(0x6f523368eabed3a0LL),
+      real(-0x58df9f4050ea48c0LL),real(0x45eb9b162449f0e0LL),
+      real(-0x35736f4da3b86880LL),real(0x26bb8b2d01772220LL),
+      real(-0x19350a3e2b857840LL),real(0xc6cd21a34a65f60LL),
+      real(0x30a9f24aaae2862LL),reale(0x1163fcLL,0xdfbd02f131dafLL),
+      // _C4x[19]
+      real(-0x5be35cb0a188d670LL),real(0x49fb9f6e0e1fa420LL),
+      real(-0x3a970b1601b36050LL),real(0x2d0406e3051baec0LL),
+      real(-0x20bde41e80026c30LL),real(0x155cea808b65d160LL),
+      real(-0xa8bc4b2c853c610LL),real(0x7d3acd77deac86fLL),
+      reale(0x1163fcLL,0xdfbd02f131dafLL),
+      // _C4x[20]
+      real(-0xe72f9d31220580LL),real(0xb817a196612bc0LL),
+      real(-0x8e0a680913c900LL),real(0x67a3067b290a40LL),
+      real(-0x43c43707776c80LL),real(0x217ef7b84400c0LL),
+      real(0x83b895ad56e94LL),reale(16517LL,0x8519000aea763LL),
+      // _C4x[21]
+      real(-0x1a80e82073690LL),real(0x1485d9e7af5c0LL),real(-0xf039fc9e8ff0LL),
+      real(0x9d5f26153ce0LL),real(-0x4ddf0f750f50LL),real(0x39e793daa6ebLL),
+      real(0xadde5e94360277dLL),
+      // _C4x[22]
+      real(-0x743607eea80LL),real(0x5536ade42a0LL),real(-0x37e9933c940LL),
+      real(0x1bb15f964e0LL),real(0x6d39be23aaLL),real(0x472c0a3d3d1ee9LL),
+      // _C4x[23]
+      real(-0x4a56872d110LL),real(0x30d818a0d20LL),real(-0x183639ebbb0LL),
+      real(0x1207973318dLL),real(0x472c0a3d3d1ee9LL),
+      // _C4x[24]
+      real(-0x723868100LL),real(0x38a8b9d80LL),real(0xdffa9ae8LL),
+      real(0xbd65c2e6062dLL),
+      // _C4x[25]
+      real(-331600LL),real(247203LL),real(0x1321b8829LL),
+      // _C4x[26]
+      real(4654LL),real(0x1389ed75LL),
+      // _C4x[27]
+      real(-0x16b98c18c43f0LL),real(-0x1be76827efc80LL),
+      real(-0x2291674649910LL),real(-0x2b3d2747a6820LL),
+      real(-0x36a8d2fdcc830LL),real(-0x45e795ad137c0LL),
+      real(-0x5a8eeaa036550LL),real(-0x77007a4bcbf60LL),
+      real(-0x9ee5aa2960470LL),real(-0xd8045ac825300LL),
+      real(-0x12bb93df5b3990LL),real(-0x1a9b1c398546a0LL),
+      real(-0x26d2a92f5c98b0LL),real(-0x3a7858f998ee40LL),
+      real(-0x5b6e62f9c0b5d0LL),real(-0x959d5c24529de0LL),
+      real(-0x102f2d0b50524f0LL),real(-0x1e1472bfb1ba980LL),
+      real(-0x3d69bf9cb587a10LL),real(-0x8ee1210e8c36520LL),
+      real(-0x194d332fe8d44930LL),real(-0x6534ccbfa35124c0LL),
+      reale(-15789LL,0xd33b387a8d9b0LL),reale(115779LL,0xf2f861d29c3a0LL),
+      reale(-173670LL,0x138b6d4415a90LL),reale(75980LL,0x9773003236861LL),
+      reale(0x342bf6LL,0x9f3708d39590dLL),
+      // _C4x[28]
+      real(-0x39a9fc22d9600LL),real(-0x47a4ffa857140LL),
+      real(-0x59ea353148580LL),real(-0x721982b3023c0LL),
+      real(-0x9291e22ef9d00LL),real(-0xbeda9ea6fc240LL),
+      real(-0xfc517cd616480LL),real(-0x1535335443d4c0LL),
+      real(-0x1d14474c2c6400LL),real(-0x28c4706fdbe340LL),
+      real(-0x3aa43e35a32380LL),real(-0x56eefde83775c0LL),
+      real(-0x859522b6982b00LL),real(-0xd663f0e8861440LL),
+      real(-0x16b2ad2884e0280LL),real(-0x2932441ccc746c0LL),
+      real(-0x51f4ee722e73200LL),real(-0xb97e18f372a9540LL),
+      real(-0x1ff5b9ebacd64180LL),real(-0x7d04fcecbaaf87c0LL),
+      reale(-19432LL,0x6670458324700LL),reale(150594LL,0xe619e547a59c0LL),
+      reale(-294713LL,0x66fc1e44fdf80LL),reale(231559LL,0xe5f0c3a538740LL),
+      reale(-65127LL,0xc75448f9881f6LL),reale(0x342bf6LL,0x9f3708d39590dLL),
+      // _C4x[29]
+      real(-0x7207334f38cb0LL),real(-0x8fe6a0f540760LL),
+      real(-0xb7c4f4df6c510LL),real(-0xedcd97a176940LL),
+      real(-0x1384e0d9162770LL),real(-0x1a108f169c7320LL),
+      real(-0x2378674e3fafd0LL),real(-0x3154606a2c6100LL),
+      real(-0x465a9ded7c5a30LL),real(-0x675a79a8aa6ee0LL),
+      real(-0x9d4a8ab99e2290LL),real(-0xf9e328cb49d8c0LL),
+      real(-0x1a2ce594ece04f0LL),real(-0x2efbcc23543daa0LL),
+      real(-0x5c688ee5939fd50LL),real(-0xceb90d2fccdb080LL),
+      real(-0x2331240c282307b0LL),reale(-2174LL,0xba9d6617169a0LL),
+      reale(-20717LL,0xbd20dfe74dff0LL),reale(154405LL,0x43613e2a37c0LL),
+      reale(-270828LL,0x13bcc8d3cbd90LL),reale(146546LL,0xa61bf3c2f7de0LL),
+      reale(26313LL,0x9ff2a1de69530LL),reale(-32564LL,0xe3aa247cc40fbLL),
+      reale(0x342bf6LL,0x9f3708d39590dLL),
+      // _C4x[30]
+      real(-0xd20723e198100LL),real(-0x10e999b2026480LL),
+      real(-0x161c2993f30e00LL),real(-0x1d62585afd4f80LL),
+      real(-0x27ca0dc8a2fb00LL),real(-0x370cc97a8ce280LL),
+      real(-0x4e170b46a3d800LL),real(-0x7213d21df5ad80LL),
+      real(-0xac9b82d7503500LL),real(-0x1109444f53c4080LL),
+      real(-0x1c6019c5f02a200LL),real(-0x329a7eb49a52b80LL),
+      real(-0x62d84097135af00LL),real(-0xdb6f2c88eb4fe80LL),
+      real(-0x2502e63c01a3ec00LL),reale(-2257LL,0x7c761ad4fb680LL),
+      reale(-21064LL,0x3d6bd08981700LL),reale(150710LL,0x347c6ec646380LL),
+      reale(-239156LL,0xeee1298e3ca00LL),reale(78297LL,0xeac3242447880LL),
+      reale(97157LL,0xffcea47049d00LL),reale(-74488LL,0x33590a76b6580LL),
+      reale(11841LL,0x219395a415cbcLL),reale(0x342bf6LL,0x9f3708d39590dLL),
+      // _C4x[31]
+      real(-0x1802918882e770LL),real(-0x1fcd949a6860c0LL),
+      real(-0x2aeab9b7d2f010LL),real(-0x3b2acc792185e0LL),
+      real(-0x539feddcdda2b0LL),real(-0x79b43080aca700LL),
+      real(-0xb76e50170e2350LL),real(-0x1207f374f78a820LL),
+      real(-0x1de74f0a09e95f0LL),real(-0x351484156246d40LL),
+      real(-0x6722781c7da1e90LL),real(-0xe37fba15ed8da60LL),
+      real(-0x260d3a8a453ee130LL),reale(-2293LL,0xda737b59d2c80LL),
+      reale(-20990LL,0xcbee433bffe30LL),reale(145073LL,0x9b58d1932c360LL),
+      reale(-212948LL,0xbbc1f33985b90LL),reale(41274LL,0x9a63d1cc50640LL),
+      reale(107042LL,0xff9bf7f6712f0LL),reale(-59295LL,0xb696ab3f1120LL),
+      reale(2833LL,0xc664f5dce0050LL),real(0x17b85ffcea47049dLL),
+      reale(0x342bf6LL,0x9f3708d39590dLL),
+      // _C4x[32]
+      real(-0x2d4d049c656700LL),real(-0x3e4af5e8d022c0LL),
+      real(-0x57ced7fe851580LL),real(-0x7f7034131ef240LL),
+      real(-0xbf83d85dea6c00LL),real(-0x12c465612feb5c0LL),
+      real(-0x1f04ac518a30280LL),real(-0x36d88216b840540LL),
+      real(-0x6a13494183c7100LL),real(-0xe8a2e478ed378c0LL),
+      real(-0x269ca36792944f80LL),reale(-2301LL,0x84520bafe57c0LL),
+      reale(-20715LL,0x8feafafd7ca00LL),reale(139156LL,0x8278406ccd440LL),
+      reale(-192234LL,0xd634ab69a4380LL),reale(20133LL,0xdb20ab18364c0LL),
+      reale(103930LL,0xc444b13858500LL),reale(-48023LL,0x7a63881fd7140LL),
+      reale(8312LL,0x1287962dbf680LL),reale(-10955LL,0xe96efa02661c0LL),
+      reale(3795LL,0x3bfe126c62e22LL),reale(0x342bf6LL,0x9f3708d39590dLL),
+      // _C4x[33]
+      real(-0x5b1678b2b96e30LL),real(-0x83e7d604d6e1a0LL),
+      real(-0xc5c1bd21f06210LL),real(-0x135402446a1f500LL),
+      real(-0x1fd9e061288aff0LL),real(-0x381fb1c2d0ea860LL),
+      real(-0x6c176a9d32ee3d0LL),real(-0xebcbb379725c7c0LL),
+      real(-0x26dc285f96da89b0LL),reale(-2293LL,0x73b088641e0e0LL),
+      reale(-20345LL,0x12b405f9bd270LL),reale(133496LL,0x33ba4ee858580LL),
+      reale(-175743LL,0x9b38f6004a490LL),reale(7288LL,0xff81f26b85a20LL),
+      reale(98139LL,0x5735ff04360b0LL),reale(-41011LL,0x93a23c36592c0LL),
+      reale(11505LL,0xfe66ab587ad0LL),reale(-12647LL,0xeb385b3526360LL),
+      reale(2204LL,0x9aaf76ecb66f0LL),real(0x2076d1ad78dbacf7LL),
+      reale(0x342bf6LL,0x9f3708d39590dLL),
+      // _C4x[34]
+      real(-0xcaab4ddd8d4600LL),real(-0x13c31d1cbb16d00LL),
+      real(-0x207a98d99de3000LL),real(-0x390c3dedd68b300LL),
+      real(-0x6d71551ca261a00LL),real(-0xed90e825b918900LL),
+      real(-0x26e62c786e462400LL),reale(-2275LL,0x445093a1ef100LL),
+      reale(-19935LL,0xe24d995a09200LL),reale(128254LL,0x3ade3c4739b00LL),
+      reale(-162384LL,0x54cbec0ece800LL),real(-0x3992c873ce48ab00LL),
+      reale(92230LL,0x4a4593a3dbe00LL),reale(-36419LL,0xcbaefd1b4ff00LL),
+      reale(13110LL,0x864dfe531f400LL),reale(-12476LL,0xf5c1226b77900LL),
+      reale(3771LL,0xc13fa20286a00LL),reale(-3470LL,0xc9a2f8989a300LL),
+      real(0x661b6984b64e65f8LL),reale(0x342bf6LL,0x9f3708d39590dLL),
+      // _C4x[35]
+      real(-0x20f38bbaca812f0LL),real(-0x39b499036d51b00LL),
+      real(-0x6e4d3364d687b10LL),real(-0xee56650d93fe5a0LL),
+      real(-0x26cbb66f58b91d30LL),reale(-2251LL,0x167a106157bc0LL),
+      reale(-19511LL,0xcecb0f0cd52b0LL),reale(123456LL,0xc66bc06159520LL),
+      reale(-151363LL,0x505ffa032090LL),reale(-6380LL,0xf55ff8a36f280LL),
+      reale(86843LL,0xd7e050f079870LL),reale(-33197LL,0x80ee9e4da1fe0LL),
+      reale(13831LL,0x3ac1850370650LL),reale(-11931LL,0x72e63a167a940LL),
+      reale(4775LL,0x36871b380b630LL),reale(-4709LL,0x204f0216e1aa0LL),
+      real(0x4e466dbc0d5cf410LL),real(0x132845ea2b7be139LL),
+      reale(0x342bf6LL,0x9f3708d39590dLL),
+      // _C4x[36]
+      real(-0x6ec9ec72fa83400LL),real(-0xee6121f9ed5ac40LL),
+      real(-0x2698258da225a980LL),reale(-2224LL,0x7d6de58dd7f40LL),
+      reale(-19089LL,0xb046a19e77900LL),reale(119080LL,0xff5c72a1c6ec0LL),
+      reale(-142118LL,0x83c214fc48b80LL),reale(-10118LL,0x917ce647b7a40LL),
+      reale(82086LL,0xede392256e600LL),reale(-30796LL,0x12a37b61ef9c0LL),
+      reale(14073LL,0x47ff3f3e080LL),reale(-11360LL,0x8927e4d9b4540LL),
+      reale(5387LL,0x791e9eab0d300LL),reale(-5154LL,0x32223c714b4c0LL),
+      real(0x7fb4f5b53eb31580LL),real(-0x5fcfbdbbdde05fc0LL),
+      real(0x34b713242f2d630eLL),reale(0x342bf6LL,0x9f3708d39590dLL),
+      // _C4x[37]
+      real(-0x26534490cad1dfb0LL),reale(-2195LL,0xeb57a14506a20LL),
+      reale(-18677LL,0x670e626e50cf0LL),reale(115088LL,0x35b741cc34140LL),
+      reale(-134246LL,0x7df8512baaf90LL),reale(-12736LL,0xad44a3e04060LL),
+      reale(77916LL,0x32c371fd8ec30LL),reale(-28919LL,0x4c92ea7340b80LL),
+      reale(14055LL,0x84fcc4e4ea6d0LL),reale(-10841LL,0x59f373a2946a0LL),
+      reale(5745LL,0xafd650291c370LL),reale(-5283LL,0x54459b9c295c0LL),
+      reale(2556LL,0x876a7d9212610LL),reale(-2273LL,0x9ea5161549ce0LL),
+      real(0x2e7aab3dc406b2b0LL),real(0xb7e588c69951913LL),
+      reale(0x342bf6LL,0x9f3708d39590dLL),
+      // _C4x[38]
+      reale(-18280LL,0xbefa6d89ca100LL),reale(111436LL,0xf9c78acad1e80LL),
+      reale(-127456LL,0x47c2f695c9a00LL),reale(-14600LL,0x49cf710bf9d80LL),
+      reale(74253LL,0x38e0bbebab300LL),reale(-27395LL,0x999e5faa56480LL),
+      reale(13898LL,0x35bd350d73c00LL),reale(-10385LL,0x6a6f64ae0c380LL),
+      reale(5941LL,0x73f13b5b28500LL),reale(-5278LL,0xf9b7b76b40a80LL),
+      reale(2891LL,0x688dd5accde00LL),reale(-2647LL,0xe431f84a18980LL),
+      real(0x4c6028727ac69700LL),real(-0x32eae1a8c2946f80LL),
+      real(0x1ea30b56650e6834LL),reale(0x342bf6LL,0x9f3708d39590dLL),
+      // _C4x[39]
+      reale(-121533LL,0x1baeb1d428990LL),reale(-15941LL,0xe8aacebc2ecc0LL),
+      reale(71019LL,0xc50f40d0125f0LL),reale(-26121LL,0xfa27e4ebd20a0LL),
+      reale(13667LL,0x35bfe1bb73850LL),reale(-9985LL,0x1b0b3e3706880LL),
+      reale(6033LL,0x4bb2ec6997cb0LL),reale(-5213LL,0xaba6ff9bbc060LL),
+      reale(3108LL,0x7a1250dedaf10LL),reale(-2837LL,0x43aa0f4a62440LL),
+      real(0x605fcd3581f88b70LL),real(-0x4fb9f3b2da8b6fe0LL),
+      real(0x1d6444fcd70bcdd0LL),real(0x74c81d1452803b5LL),
+      reale(0x342bf6LL,0x9f3708d39590dLL),
+      // _C4x[40]
+      reale(68147LL,0x8cb1a33fbb300LL),reale(-25031LL,0xe657c4ceb2a40LL),
+      reale(13399LL,0xd5b954b9ffe80LL),reale(-9633LL,0xa008523a478c0LL),
+      reale(6058LL,0x6185fb910e200LL),reale(-5123LL,0xdb0ce1cd90340LL),
+      reale(3246LL,0x498e64bf8a580LL),reale(-2930LL,0x39f0ac65811c0LL),
+      real(0x6e041fee5d419100LL),real(-0x60b53ba76d5f13c0LL),
+      real(0x3113d4fc9085ec80LL),real(-0x1e6533c87b7d2540LL),
+      real(0x1357622acbb7b13aLL),reale(0x342bf6LL,0x9f3708d39590dLL),
+      // _C4x[41]
+      reale(13117LL,0x6cbddabc52ed0LL),reale(-9319LL,0x570c1564bb3e0LL),
+      reale(6040LL,0x7b2fdab4ba7f0LL),reale(-5023LL,0xdd4767cbca180LL),
+      reale(3330LL,0x281af37e2710LL),reale(-2969LL,0xba9176a5d3f20LL),
+      real(0x7764510336be0030LL),real(-0x6af4843f7d4f5f40LL),
+      real(0x3eba1ed514e18750LL),real(-0x31669b90045c25a0LL),
+      real(0x13a17c0101ce1070LL),real(0x4e2a88c78d66acfLL),
+      reale(0x342bf6LL,0x9f3708d39590dLL),
+      // _C4x[42]
+      reale(5994LL,0xfab7bd428a400LL),reale(-4920LL,0x276aa3c67f600LL),
+      reale(3376LL,0x641d9d71fd000LL),reale(-2976LL,0xcdf2cc6d9ea00LL),
+      real(0x7dd1b5a4fb9ffc00LL),real(-0x712cdc1424704200LL),
+      real(0x486493a43f86e800LL),real(-0x3daeb06e6a40ce00LL),
+      real(0x21506b8426325400LL),real(-0x13a656589a61fa00LL),
+      real(0xcfa4dcbf923eff0LL),reale(0x342bf6LL,0x9f3708d39590dLL),
+      // _C4x[43]
+      reale(3396LL,0xc29d3f547be10LL),reale(-2964LL,0x99a8488284e80LL),
+      reale(2082LL,0xa3af2d55cd2f0LL),real(-0x74e3fc23ed074b20LL),
+      real(0x4f51e11c0cc64dd0LL),real(-0x45cc62cad46028c0LL),
+      real(0x2b210825284d5ab0LL),real(-0x20cfde05bc67de60LL),
+      real(0xdb6584e22cc2590LL),real(0x36aae0ede944991LL),
+      reale(0x342bf6LL,0x9f3708d39590dLL),
+      // _C4x[44]
+      reale(2128LL,0x469250df87e00LL),real(-0x76ff6f2ca68ee740LL),
+      real(0x544ea56af984a280LL),real(-0x4b3b3c5b1f3b3dc0LL),
+      real(0x324e822f05811f00LL),real(-0x29dd8ae6f4502040LL),
+      real(0x179c3b6434632b80LL),real(-0xd7628385c5d56c0LL),
+      real(0x91fdd6e000a7926LL),reale(0x342bf6LL,0x9f3708d39590dLL),
+      // _C4x[45]
+      real(0x57e3d5e3e8a64d50LL),real(-0x4ee151925712ac60LL),
+      real(0x379f60f9d8160ef0LL),real(-0x3036f6417460ec40LL),
+      real(0x1eece80c1c746690LL),real(-0x16f21d696f523420LL),
+      real(0x9ef6bfafd871830LL),real(0x27a3f6720674fabLL),
+      reale(0x342bf6LL,0x9f3708d39590dLL),
+      // _C4x[46]
+      real(0x84a641c077c100LL),real(-0x75601a6b667780LL),
+      real(0x51157a29d94600LL),real(-0x4247925ad10480LL),
+      real(0x269068d8c2ab00LL),real(-0x15748d5a64a980LL),
+      real(0xed190d6b360a4LL),reale(29731LL,0x892d0013a607fLL),
+      // _C4x[47]
+      real(0x2b50c847e5bec70LL),real(-0x25172ad2adc8640LL),
+      real(0x187490c86e06510LL),real(-0x11cf5b364679120LL),
+      real(0x7e9f37da26e7b0LL),real(0x1f979b01bfd5e3LL),
+      reale(227941LL,0xc6590096a3923LL),
+      // _C4x[48]
+      real(0xa226b42100LL),real(-0x82b9c957c0LL),real(0x4dd9f4b480LL),
+      real(-0x2a87741140LL),real(0x1dc9ee09baLL),real(0x13691a10b39411LL),
+      // _C4x[49]
+      real(0x165661ad6b70LL),real(-0x1009b31cabe0LL),real(0x7444963bdd0LL),
+      real(0x1d0511c64f5LL),real(0x42b94999694cfa7LL),
+      // _C4x[50]
+      real(0x6e1bbfa00LL),real(-0x3b5106500LL),real(0x29fefd0b8LL),
+      real(0x2383148b21287LL),
+      // _C4x[51]
+      real(0x1516d30LL),real(0x543e3bLL),real(0xf784431927LL),
+      // _C4x[52]
+      real(4654LL),real(0x1389ed75LL),
+      // _C4x[53]
+      real(0x5f08c3cb900LL),real(0x807038c0ca0LL),real(0xaffaed32440LL),
+      real(0xf4c5be483e0LL),real(0x15a2490f6f80LL),real(0x1f28eae1cb20LL),
+      real(0x2dce80c7fac0LL),real(0x44e60304c260LL),real(0x6a58ca3b2600LL),
+      real(0xa90e89d449a0LL),real(0x1160126eb5140LL),real(0x1db88b51940e0LL),
+      real(0x354168d7adc80LL),real(0x64e3bca9a8820LL),real(0xcc99ed98827c0LL),
+      real(0x1c3fb9ad58ff60LL),real(0x45c01ca2899300LL),
+      real(0xc88852534b86a0LL),real(0x2d1eac1f8a97e40LL),
+      real(0xee21e1c2e9afde0LL),reale(3238LL,0x9997f46a24980LL),
+      reale(-36435LL,0xc0128255e4520LL),reale(105254LL,0x7fca8779a54c0LL),
+      reale(-115780LL,0xd079e2d63c60LL),reale(43417LL,0x7b1d24aefa95cLL),
+      reale(0x56f3f0LL,0x5eb10eb5f946bLL),
+      // _C4x[54]
+      real(0x21a7e921c980LL),real(0x2e51be6e8f00LL),real(0x40c19fbec480LL),
+      real(0x5c1e6062c200LL),real(0x8599d6a9df80LL),real(0xc60160b77500LL),
+      real(0x12cb7c4c7da80LL),real(0x1d5985b996800LL),real(0x2f524aaed7580LL),
+      real(0x4f30941955b00LL),real(0x8a76dd63f7080LL),real(0xff32326380e00LL),
+      real(0x1f5b1b59928b80LL),real(0x42dd3cfeae4100LL),
+      real(0x9e90e4efcb8680LL),real(0x1b33e235264b400LL),
+      real(0x5cdaf2eb93f2180LL),real(0x1cd398a25fa82700LL),
+      reale(5865LL,0x9368046121c80LL),reale(-61724LL,0x1837736455a00LL),
+      reale(171645LL,0xcc7599f993780LL),reale(-213748LL,0x66d2fca290d00LL),
+      reale(126305LL,0x66263c2b93280LL),reale(-28945LL,0x341e78b58f18LL),
+      reale(0x56f3f0LL,0x5eb10eb5f946bLL),
+      // _C4x[55]
+      real(0x7c86a4240e80LL),real(0xaf5db2064cc0LL),real(0xfb958bed1300LL),
+      real(0x17080cf847940LL),real(0x2288f92359780LL),real(0x352f6beaa45c0LL),
+      real(0x54760062cdc00LL),real(0x8b024608ff240LL),real(0xeea60450a2080LL),
+      real(0x1af0609151bec0LL),real(0x33c8072244a500LL),
+      real(0x6bad7af287eb40LL),real(0xf83a707fcba980LL),
+      real(0x293d0a92ebeb7c0LL),real(0x87aa233703e6e00LL),
+      real(0x2855283ce7ee6440LL),reale(7785LL,0x74e297d243280LL),
+      reale(-76428LL,0xc6fbe2f330c0LL),reale(190726LL,0x777542b243700LL),
+      reale(-188316LL,0xefcf1a2055d40LL),reale(42101LL,0xccb76963dbb80LL),
+      reale(46959LL,0xb31b5803129c0LL),reale(-23683LL,0xbcd8d4b7d4688LL),
+      reale(0x56f3f0LL,0x5eb10eb5f946bLL),
+      // _C4x[56]
+      real(0x185346b40be80LL),real(0x234a30239ea00LL),real(0x345f5bcfbb580LL),
+      real(0x4fc2f91719900LL),real(0x7d257d9ac0c80LL),real(0xcb49d34f58800LL),
+      real(0x1580c944df8380LL),real(0x263bb5e9cb7700LL),
+      real(0x483bd94933da80LL),real(0x935c1fd3f92600LL),
+      real(0x14c807d3436d180LL),real(0x35e9298d8a45500LL),
+      real(0xac6bf9cef462880LL),real(0x318eb0c51232c400LL),
+      reale(9164LL,0xf22328f6f9f80LL),reale(-84729LL,0x87534c86a3300LL),
+      reale(191114LL,0x47ac3650f680LL),reale(-146269LL,0x9709796906200LL),
+      reale(-28125LL,0x50e5dddf7ed80LL),reale(95633LL,0xf3c35e98b1100LL),
+      reale(-42102LL,0x3348969c24480LL),reale(4250LL,0xa99770cb50078LL),
+      reale(0x56f3f0LL,0x5eb10eb5f946bLL),
+      // _C4x[57]
+      real(0x4748ad3ff9e80LL),real(0x6b926f7e60d60LL),real(0xa71fa4085b840LL),
+      real(0x10c991e0a3ab20LL),real(0x1c15b3b145b200LL),
+      real(0x314f7c7c43f8e0LL),real(0x5be1ff458cabc0LL),
+      real(0xb89930a80796a0LL),real(0x199734a3c07c580LL),
+      real(0x411aa25f2292460LL),real(0xcb87e4542581f40LL),
+      real(0x38e7a442bb914220LL),reale(10156LL,0x20944a9a6d900LL),
+      reale(-89266LL,0xae2af5b0a8fe0LL),reale(184683LL,0x63f792d3912c0LL),
+      reale(-110681LL,0x7635192f5ada0LL),reale(-62728LL,0xff020b803ec80LL),
+      reale(91791LL,0x3f8035a7d3b60LL),reale(-22896LL,0x337bb36408640LL),
+      real(-0x5652aea374b626e0LL),real(-0x38edb32bcbdda4acLL),
+      reale(0x56f3f0LL,0x5eb10eb5f946bLL),
+      // _C4x[58]
+      real(0xd108e5f6f6100LL),real(0x14cfb44a7f1600LL),
+      real(0x227bc5972bab00LL),real(0x3bea4dd1053000LL),
+      real(0x6e5f06564db500LL),real(0xdaf2ed1ea74a00LL),
+      real(0x1dec9104c41ff00LL),real(0x4ae6e1cc221e400LL),
+      real(0xe5bde12a5950900LL),real(0x3ec229ad8ff17e00LL),
+      reale(10869LL,0xc2e1de8335300LL),reale(-91551LL,0x2adfd2129800LL),
+      reale(176075LL,0x65a5499a95d00LL),reale(-83532LL,0x676df8fc1b200LL),
+      reale(-77995LL,0xeeecccb63a700LL),reale(78539LL,0xb0828e93b4c00LL),
+      reale(-12982LL,0x9261e28eeb100LL),reale(6537LL,0x5c156837be600LL),
+      reale(-9405LL,0x6848a436fb00LL),reale(2071LL,0xc05f52f113a50LL),
+      reale(0x56f3f0LL,0x5eb10eb5f946bLL),
+      // _C4x[59]
+      real(0x289b91a48ebf00LL),real(0x45ee5b14465380LL),
+      real(0x7f92734c023800LL),real(0xfa5ad187871c80LL),
+      real(0x21cddd2df61b100LL),real(0x5372a978dde2580LL),
+      real(0xfbd02001ed7aa00LL),real(0x436e93187af7ee80LL),
+      reale(11383LL,0x2dcd21f7ea300LL),reale(-92460LL,0x762ee68f780LL),
+      reale(167131LL,0xf0a2167d11c00LL),reale(-63200LL,0xf80168c9dc080LL),
+      reale(-83767LL,0xf5fd214199500LL),reale(66187LL,0xcedf7a1cac980LL),
+      reale(-9609LL,0x1045496e28e00LL),reale(11585LL,0x75dbe72dc9280LL),
+      reale(-9221LL,0xdd36d29668700LL),real(0x18709d3bc0679b80LL),
+      real(0x5b7e325c6742390LL),reale(0x56f3f0LL,0x5eb10eb5f946bLL),
+      // _C4x[60]
+      real(0x8f791b0d72f300LL),real(0x116eee5fb7db000LL),
+      real(0x2544a69b0af6d00LL),real(0x5ae50a5c0f6ba00LL),
+      real(0x10e6ab279c402700LL),real(0x472bda650b6c4400LL),
+      reale(11750LL,0x4a89b28f5a100LL),reale(-92513LL,0xe33280e9ece00LL),
+      reale(158574LL,0x53a9410005b00LL),reale(-47897LL,0x404729fced800LL),
+      reale(-84920LL,0x4b5af2b30d500LL),reale(56401LL,0x32e93db7ce200LL),
+      reale(-8957LL,0xc7ca02b378f00LL),reale(13782LL,0xdee88bf296c00LL),
+      reale(-7713LL,0x851267fe50900LL),reale(2126LL,0x5791e5314f600LL),
+      reale(-3274LL,0x16bff2e69c300LL),real(0x4230ff2c7e6defd0LL),
+      reale(0x56f3f0LL,0x5eb10eb5f946bLL),
+      // _C4x[61]
+      real(0x285b74a086cfe00LL),real(0x61629f583f6fc20LL),
+      real(0x11e1f0840e822e40LL),real(0x4a2acb7177936860LL),
+      reale(12009LL,0x162afd0a23e80LL),reale(-92026LL,0xae3949b4a64a0LL),
+      reale(150657LL,0xe159fc0830ec0LL),reale(-36241LL,0x76fc4335e50e0LL),
+      reale(-83843LL,0x70cd1eb127f00LL),reale(48929LL,0x80db803df8d20LL),
+      reale(-9248LL,0xb58ee58c26f40LL),reale(14370LL,0x3118e0d87960LL),
+      reale(-6546LL,0x3055ff6d4bf80LL),reale(3681LL,0xa71da4ef975a0LL),
+      reale(-4056LL,0x942d314a74fc0LL),real(0x201a58611bc4e1e0LL),
+      real(0x8ca8a9bec5eeb0cLL),reale(0x56f3f0LL,0x5eb10eb5f946bLL),
+      // _C4x[62]
+      real(0x12b65c49560e1680LL),real(0x4c91348dd4c57d00LL),
+      reale(12186LL,0xb870c2ef8b380LL),reale(-91200LL,0xb85c60cb26200LL),
+      reale(143440LL,0xa133e98363080LL),reale(-27238LL,0x5076fe0bbc700LL),
+      reale(-81725LL,0xe4f93bf99cd80LL),reale(43231LL,0xcee7486ccec00LL),
+      reale(-9772LL,0x4b82cb486ca80LL),reale(14177LL,0x876b1df11100LL),
+      reale(-5845LL,0xa68f0ab906780LL),reale(4733LL,0x71ff0d3b37600LL),
+      reale(-4035LL,0x511483b19e480LL),real(0x4b0e043dd17f5b00LL),
+      real(-0x5c6dac5851097e80LL),real(0x259ade3cf4689f28LL),
+      reale(0x56f3f0LL,0x5eb10eb5f946bLL),
+      // _C4x[63]
+      reale(12302LL,0xe52cc8d8c2180LL),reale(-90163LL,0xdb821dbabdc40LL),
+      reale(136898LL,0x7ace803b76f00LL),reale(-20189LL,0xb7d2bfe8c21c0LL),
+      reale(-79168LL,0x1aef280283c80LL),reale(38835LL,0xfee0572864740LL),
+      reale(-10271LL,0xfbaa65f2c4a00LL),reale(13648LL,0x338b156f30cc0LL),
+      reale(-5469LL,0x7ffbd41c95780LL),reale(5349LL,0x619325bd73240LL),
+      reale(-3822LL,0x57b3a652500LL),real(0x729df2a6c14b77c0LL),
+      reale(-2074LL,0x6c230416d7280LL),real(0x193a4a0699e49d40LL),
+      real(0x6c8a3fc264f2d98LL),reale(0x56f3f0LL,0x5eb10eb5f946bLL),
+      // _C4x[64]
+      reale(130976LL,0x1a84c1eb6d80LL),reale(-14598LL,0xb0e2756e03a00LL),
+      reale(-76484LL,0xff93a7309a680LL),reale(35388LL,0xd1bf338007b00LL),
+      reale(-10664LL,0xe3def57487f80LL),reale(13004LL,0x14f125ca37c00LL),
+      reale(-5286LL,0xaab28c8cc3880LL),reale(5660LL,0xa57467d557d00LL),
+      reale(-3610LL,0x163a4d9a91180LL),reale(2326LL,0xf26507322be00LL),
+      reale(-2275LL,0x1951f47034a80LL),real(0x30f364de4c777f00LL),
+      real(-0x3139417308d0dc80LL),real(0x173bf41713ca3b88LL),
+      reale(0x56f3f0LL,0x5eb10eb5f946bLL),
+      // _C4x[65]
+      reale(-73827LL,0x61b736418a780LL),reale(32637LL,0x887aa6de960e0LL),
+      reale(-10941LL,0x69b84ebb84640LL),reale(12348LL,0xdd9347a34b3a0LL),
+      reale(-5207LL,0xb9e55bea0c500LL),reale(5776LL,0x82c559a327660LL),
+      reale(-3446LL,0xd48e4a10ec3c0LL),reale(2676LL,0xdbe2bf3d4c920LL),
+      reale(-2314LL,0x93d76112ee280LL),real(0x45af1f46068fcbe0LL),
+      real(-0x4a646c774fde3ec0LL),real(0x127e48f8affd9ea0LL),
+      real(0x4e336f38ab11704LL),reale(0x56f3f0LL,0x5eb10eb5f946bLL),
+      // _C4x[66]
+      reale(-11116LL,0x4d006e1393a00LL),reale(11728LL,0x761e1ef822c00LL),
+      reale(-5179LL,0x65d829c0ade00LL),reale(5773LL,0x24fd2adb2f000LL),
+      reale(-3329LL,0xa0f3ce38e0200LL),reale(2908LL,0x836ab328fb400LL),
+      reale(-2292LL,0x9d62f8fb7a600LL),real(0x5681ee23b9ad7800LL),
+      real(-0x56cafdb120433600LL),real(0x21dbd9f992213c00LL),
+      real(-0x1d4bdf01a76d9200LL),real(0xf4e0cbd04176b20LL),
+      reale(0x56f3f0LL,0x5eb10eb5f946bLL),
+      // _C4x[67]
+      reale(-5173LL,0x473b4cca7c600LL),reale(5700LL,0x1d26bd0962f00LL),
+      reale(-3249LL,0x75306f7043800LL),reale(3050LL,0xed985975b4100LL),
+      reale(-2252LL,0x10691cdccaa00LL),real(0x6370a1a9e900d300LL),
+      real(-0x5c955afee309e400LL),real(0x2eb3ea14003fe500LL),
+      real(-0x2e844e36822a7200LL),real(0xd8a8b891f217700LL),
+      real(0x388df4ca3a6fb20LL),reale(0x56f3f0LL,0x5eb10eb5f946bLL),
+      // _C4x[68]
+      reale(-3195LL,0xcbf6069e6fe00LL),reale(3129LL,0x198ba10e3f000LL),
+      reale(-2212LL,0x135876d83e200LL),real(0x6cf94ec7bfac7400LL),
+      real(-0x5f04d2df84f0ba00LL),real(0x39318494ff85f800LL),
+      real(-0x38939121c731d600LL),real(0x1854a6f7e2957c00LL),
+      real(-0x12decef0b13a7200LL),real(0xa9861a018e14120LL),
+      reale(0x56f3f0LL,0x5eb10eb5f946bLL),
+      // _C4x[69]
+      reale(-2177LL,0x1ea7a5015eb00LL),real(0x73bced2a00a143a0LL),
+      real(-0x5fca97395e84bfc0LL),real(0x418b4cd8fc5e04e0LL),
+      real(-0x3e6c34ea7ddb8a80LL),real(0x212422dcacab1620LL),
+      real(-0x1f0466b0c7211540LL),real(0xa12130d17045760LL),
+      real(0x29b0aa486315dbcLL),reale(0x56f3f0LL,0x5eb10eb5f946bLL),
+      // _C4x[70]
+      real(-0x5fc4bec46509e480LL),real(0x48096a7e75900b00LL),
+      real(-0x41caf1fb886dd580LL),real(0x28558a32a56ef200LL),
+      real(-0x26dce3ddd1a42680LL),real(0x120433e2d2025900LL),
+      real(-0xce36e1803df1780LL),real(0x7a135866f905bb8LL),
+      reale(0x56f3f0LL,0x5eb10eb5f946bLL),
+      // _C4x[71]
+      real(-0x4837c78c0550480LL),real(0x313ba08613af040LL),
+      real(-0x2ee33229a4bc300LL),real(0x1a152ee5f2ae9c0LL),
+      real(-0x172de5252da0180LL),real(0x824fa762c0c340LL),
+      real(0x2180172e018ad8LL),reale(379902LL,0xf53f00fb109e5LL),
+      // _C4x[72]
+      real(-0x326f6045f923c80LL),real(0x1fb1615f9d3a600LL),
+      real(-0x1db1797638c1780LL),real(0xe9780531c07300LL),
+      real(-0x9d24cc38e5d280LL),real(0x60cf9034bf3868LL),
+      reale(379902LL,0xf53f00fb109e5LL),
+      // _C4x[73]
+      real(-0x46e25cf59280LL),real(0x290af5269020LL),real(-0x22f7c7b01940LL),
+      real(0xd08f4d0d560LL),real(0x355c24081bcLL),real(0xc015674546693d9LL),
+      // _C4x[74]
+      real(-0x265f8c17d00LL),real(0x13bddd35200LL),real(-0xcadd323f00LL),
+      real(0x80e0d83bf0LL),real(0xa1c12e8b2dd1e3LL),
+      // _C4x[75]
+      real(-0x184be2a300LL),real(0x97a60f680LL),real(0x26a83de30LL),
+      real(0xb18f66b7a5ca3LL),
+      // _C4x[76]
+      real(-0x835f00LL),real(0x557ff0LL),real(0x89825e2a6bLL),
+      // _C4x[77]
+      real(0x2c2a8cLL),real(0xfe89d46f33LL),
+      // _C4x[78]
+      real(-0x388cfdf100LL),real(-0x5500729200LL),real(-0x8250066300LL),
+      real(-0xcc2d29dc00LL),real(-0x147bd04f500LL),real(-0x21c7b15a600LL),
+      real(-0x396d13e6700LL),real(-0x650be18b000LL),real(-0xb8f375f7900LL),
+      real(-0x16253c45ba00LL),real(-0x2cc1928ceb00LL),real(-0x6065d92f8400LL),
+      real(-0xe04f74737d00LL),real(-0x23eadf138ce00LL),
+      real(-0x682920857ef00LL),real(-0x1651f4aee45800LL),
+      real(-0x61a68e7d270100LL),real(-0x281b43aa424e200LL),
+      real(-0x2bddd20238857300LL),reale(10668LL,0x544ee8e52d400LL),
+      reale(-45341LL,0x99b0a231ffb00LL),reale(90680LL,0xcc9ebb9c00a00LL),
+      reale(-84204LL,0x66912d3848900LL),reale(28944LL,0xfcbe1874a70e8LL),
+      reale(0x79bbeaLL,0x1e2b14985cfc9LL),
+      // _C4x[79]
+      real(-0xb6a5fc8800LL),real(-0x11a0a388400LL),real(-0x1bda05d7000LL),
+      real(-0x2d25cb21c00LL),real(-0x4b5283d5800LL),real(-0x81d5381f400LL),
+      real(-0xe84e582c000LL),real(-0x1b2017768c00LL),real(-0x354f35942800LL),
+      real(-0x6f49195e6400LL),real(-0xf9ffb1d81000LL),real(-0x267769207fc00LL),
+      real(-0x6a9801634f800LL),real(-0x15adc2fc41d400LL),
+      real(-0x5947d2bb916000LL),real(-0x222d7eabcda6c00LL),
+      real(-0x22707489da53c800LL),reale(7620LL,0x3c385d35fbc00LL),
+      reale(-29198LL,0x7793d371d5000LL),reale(53341LL,0xa58a8c79e2400LL),
+      reale(-51818LL,0x6680b95db6800LL),reale(25908LL,0xccbfa35124c00LL),
+      reale(-5263LL,0x466912d384890LL),reale(0x2893f8LL,0xb4b906dd74543LL),
+      // _C4x[80]
+      real(-0xcd30266b700LL),real(-0x147d4e1fec00LL),real(-0x21a6b4a64100LL),
+      real(-0x390579acce00LL),real(-0x6423741d2b00LL),real(-0xb749b833f000LL),
+      real(-0x1602ad6953500LL),real(-0x2ccfc753d1200LL),
+      real(-0x61e5d62301f00LL),real(-0xe995b2fcff400LL),
+      real(-0x270c826fb7a900LL),real(-0x7a09e7f3045600LL),
+      real(-0x1dfb4c385ed9300LL),real(-0xaddceca1091f800LL),
+      reale(-2625LL,0x3ba17c0246300LL),reale(33433LL,0x20d0a109f6600LL),
+      reale(-114657LL,0x5c2192fdc7900LL),reale(175907LL,0x1d4b03fe80400LL),
+      reale(-116169LL,0x84e81ccb0ef00LL),reale(-3811LL,0xe1e3d16502200LL),
+      reale(45340LL,0x664f5dce00500LL),reale(-17206LL,0xf008bd8c1d988LL),
+      reale(0x79bbeaLL,0x1e2b14985cfc9LL),
+      // _C4x[81]
+      real(-0x3f0527da8000LL),real(-0x69410a894000LL),real(-0xb5f68cf74000LL),
+      real(-0x14766cd18c000LL),real(-0x2696134420000LL),
+      real(-0x4cf42ca274000LL),real(-0xa45199d7cc000LL),
+      real(-0x17e337e696c000LL),real(-0x3e169088698000LL),
+      real(-0xbbd1c494494000LL),real(-0x2c70014b4ca4000LL),
+      real(-0xf67e7406420c000LL),reale(-3525LL,0x349c0ad9f0000LL),
+      reale(41859LL,0x1cfdfa000c000LL),reale(-129840LL,0x6d28af104000LL),
+      reale(166586LL,0x5d10da3394000LL),reale(-59707LL,0xa04083fc78000LL),
+      reale(-68021LL,0x5fb808ba6c000LL),reale(75721LL,0x1307a9002c000LL),
+      reale(-24385LL,0x3f4ba28674000LL),real(0x6534ccbfa35124c0LL),
+      reale(0x79bbeaLL,0x1e2b14985cfc9LL),
+      // _C4x[82]
+      real(-0x11fa490472e00LL),real(-0x1fe0e98340400LL),
+      real(-0x3b2a552443a00LL),real(-0x73f5544ad2000LL),
+      real(-0xf2e5765f90600LL),real(-0x2290ce0f423c00LL),
+      real(-0x57b83400ee1200LL),real(-0x1023f65b9bfd800LL),
+      real(-0x3b36c6db61bde00LL),real(-0x13c7b72049527400LL),
+      reale(-4324LL,0x8c4173b351600LL),reale(48359LL,0x7d21dc7197000LL),
+      reale(-137344LL,0x3e76a768c4a00LL),reale(148676LL,0xd51cb5c775400LL),
+      reale(-14755LL,0x5760f43613e00LL),reale(-92176LL,0xcc2ef6d3ab800LL),
+      reale(60290LL,0x88af4d43b7200LL),reale(-5856LL,0x7368e62f71c00LL),
+      real(-0x48b16aa4982d9a00LL),real(-0x51dba59b00547450LL),
+      reale(0x79bbeaLL,0x1e2b14985cfc9LL),
+      // _C4x[83]
+      real(-0x5318540751000LL),real(-0xa0702ad537800LL),
+      real(-0x14a9549a688000LL),real(-0x2e31b9dc878800LL),
+      real(-0x72dceb1c83f000LL),real(-0x14a6c8c8df91800LL),
+      real(-0x49c3e43ec426000LL),real(-0x17df3e19aed32800LL),
+      reale(-5018LL,0x6431109e13000LL),reale(53301LL,0x74feac5bf4800LL),
+      reale(-140140LL,0xa8f9e9b6bc000LL),reale(129320LL,0x1fd8eca933800LL),
+      reale(16403LL,0x87db178e25000LL),reale(-95279LL,0xe19a1987da800LL),
+      reale(40665LL,0x6f4b03ec9e000LL),real(-0x1c82af8b65ac6800LL),
+      reale(8049LL,0x334ede6a77000LL),reale(-7541LL,0xfa4ef74ea0800LL),
+      real(0x49ca297e3ffdbce0LL),reale(0x79bbeaLL,0x1e2b14985cfc9LL),
+      // _C4x[84]
+      real(-0x3cadc0edd6600LL),real(-0x8587ee4c4e000LL),
+      real(-0x14633459f95a00LL),real(-0x397bc2059d8400LL),
+      real(-0xc89f8adb490e00LL),real(-0x3f2a86a64b5a800LL),
+      real(-0x32218961953c0200LL),reale(8146LL,0xa930f21b73400LL),
+      reale(-20016LL,0x74e96760e4a00LL),reale(15890LL,0x8aa3fb72d9000LL),
+      reale(5271LL,0xbcd5aeda65600LL),reale(-12823LL,0x6bdb3dd51ec00LL),
+      reale(3774LL,0x46bb658aca200LL),real(-0x148a80159bb73800LL),
+      real(0x736580900f31ae00LL),real(-0x336f49c74ee95c00LL),
+      real(-0x249e756eeea0600LL),real(-0x13841fc89043bb0LL),
+      reale(0x1163fcLL,0xdfbd02f131dafLL),
+      // _C4x[85]
+      real(-0xaaaed768da0000LL),real(-0x1d8d58546174000LL),
+      real(-0x650ff776c6dc000LL),real(-0x1f0fa133b6eac000LL),
+      reale(-6126LL,0x7974ea8448000LL),reale(59813LL,0x741ec012c000LL),
+      reale(-138412LL,0x58b7c4d32c000LL),reale(95264LL,0x22057cd374000LL),
+      reale(50003LL,0x3a5ca8a530000LL),reale(-81503LL,0x84cf1d8c000LL),
+      reale(17542LL,0xf2776c79b4000LL),reale(-5813LL,0x39c49c84d4000LL),
+      reale(13748LL,0x38a6c4d018000LL),reale(-3548LL,0x4094081eac000LL),
+      real(0x78ab12d1827bc000LL),reale(-2958LL,0x94db7ad074000LL),
+      real(0x2bef42096127d7c0LL),reale(0x79bbeaLL,0x1e2b14985cfc9LL),
+      // _C4x[86]
+      real(-0x718d19ce618f700LL),real(-0x22292bb4d2a0a600LL),
+      reale(-6562LL,0x84471fa4f9b00LL),reale(61876LL,0xa080215cbc400LL),
+      reale(-135760LL,0x93f5da0ef4d00LL),reale(81504LL,0x4116e653fae00LL),
+      reale(58147LL,0xb03676e9edf00LL),reale(-73012LL,0x28a4ca281d800LL),
+      reale(12405LL,0x6d2fd911f1100LL),reale(-8887LL,0x205adeb490200LL),
+      reale(12677LL,0x826d436a8a300LL),reale(-2578LL,0x92881320bec00LL),
+      reale(3947LL,0x879d1c7c5500LL),reale(-3193LL,0x6a0d793d15600LL),
+      real(0x7343398f272e700LL),real(0x20b3728b7b6b2d8LL),
+      reale(0x79bbeaLL,0x1e2b14985cfc9LL),
+      // _C4x[87]
+      reale(-6934LL,0xf03d448429800LL),reale(63382LL,0x668969a617c00LL),
+      reale(-132590LL,0xf420d1877000LL),reale(69768LL,0x70d2052fd2400LL),
+      reale(63007LL,0x6d053a2cb4800LL),reale(-65234LL,0x47d61e47e8c00LL),
+      reale(9601LL,0xec9983923a000LL),reale(-11043LL,0xbce846bd33400LL),
+      reale(11048LL,0xa50acd625f800LL),reale(-2546LL,0x83680e9e89c00LL),
+      reale(5107LL,0xc83f2d67d000LL),reale(-2698LL,0x7a1b733ac4400LL),
+      real(0x36af107261fea800LL),real(-0x57b6b3b8f7f45400LL),
+      real(0x1b355635bf037310LL),reale(0x79bbeaLL,0x1e2b14985cfc9LL),
+      // _C4x[88]
+      reale(-129174LL,0xa7b7643d7c700LL),reale(59789LL,0xf9dc41e63d400LL),
+      reale(65695LL,0x9083acc5cc100LL),reale(-58446LL,0xd0d3391e9e600LL),
+      reale(8184LL,0x5e79915d1b00LL),reale(-12354LL,0x7c56a698f3800LL),
+      reale(9463LL,0x4211f61d49500LL),reale(-2967LL,0x1ed471cad8a00LL),
+      reale(5543LL,0x52a28a556ef00LL),reale(-2250LL,0x1e08b645e9c00LL),
+      real(0x6b0d1cda5c5fe900LL),real(-0x70ab303245f3d200LL),
+      real(0xb596d16f1a34300LL),real(0x35b4de912478078LL),
+      reale(0x79bbeaLL,0x1e2b14985cfc9LL),
+      // _C4x[89]
+      reale(66948LL,0x4f30b3f870000LL),reale(-52647LL,0x9795c7cc58000LL),
+      reale(7561LL,0xd0b8bda7a8000LL),reale(-13027LL,0x827613ff28000LL),
+      reale(8130LL,0xd3b0b583a0000LL),reale(-3524LL,0x2d6f89c1d8000LL),
+      reale(5530LL,0x8b9708b698000LL),real(-0x7e52c154efd58000LL),
+      reale(2356LL,0x7673a06ad0000LL),real(-0x6f6a34d21b028000LL),
+      real(0x220d8444fca88000LL),real(-0x2fac85fa2e858000LL),
+      real(0x11c823101280e280LL),reale(0x79bbeaLL,0x1e2b14985cfc9LL),
+      // _C4x[90]
+      reale(7381LL,0x14c34c0c1f400LL),reale(-13258LL,0xa462523f3800LL),
+      reale(7086LL,0x404eb1053bc00LL),reale(-4055LL,0x1b129d1616000LL),
+      reale(5287LL,0x17e93cc880400LL),real(-0x7bc6aed7afe87800LL),
+      reale(2758LL,0x364797381cc00LL),real(-0x676ee80244a35000LL),
+      real(0x3b6d32d9ca041400LL),real(-0x43e3e0c280942800LL),
+      real(0xa86d2e316b1dc00LL),real(0x300bec0027818e0LL),
+      reale(0x79bbeaLL,0x1e2b14985cfc9LL),
+      // _C4x[91]
+      real(0x383bee2531d2a000LL),real(-0x2821094d061d1000LL),
+      real(0x2c347b321d4c8000LL),real(-0x125d6736b20ff000LL),
+      real(0x1a6c4162f9ae6000LL),real(-0xdca07dd1a07d000LL),
+      real(0xba2cc7913be4000LL),real(-0xa8a49fd40deb000LL),
+      real(0x36dcb24ee422000LL),real(-0x4159df2ed6e9000LL),
+      real(0x1bdad6784709c40LL),reale(0x1163fcLL,0xdfbd02f131dafLL),
+      // _C4x[92]
+      reale(4599LL,0x20675bc677c00LL),reale(-2191LL,0x95924f3b76000LL),
+      reale(3019LL,0xad2c946b04400LL),real(-0x5cc951aa5f7ff800LL),
+      real(0x61f2b89850d68c00LL),real(-0x49aa7ace4eb85000LL),
+      real(0x26482ceb1d4d5400LL),real(-0x2b88fb70a186a800LL),
+      real(0x8bf6f0c9a679c00LL),real(0x26ce624431e62e0LL),
+      reale(0x79bbeaLL,0x1e2b14985cfc9LL),
+      // _C4x[93]
+      reale(2991LL,0x40e0c1e8a0000LL),real(-0x5c0b6a6cd5328000LL),
+      real(0x6cf3b04ea6358000LL),real(-0x47da0c907a958000LL),
+      real(0x334344c895550000LL),real(-0x3257cd9b75628000LL),
+      real(0x11d874d9e96c8000LL),real(-0x1273b92365d58000LL),
+      real(0x8b048eddb8dae80LL),reale(0x79bbeaLL,0x1e2b14985cfc9LL),
+      // _C4x[94]
+      real(0x7366685d2da15300LL),real(-0x46390dd9eadeba00LL),
+      real(0x3de3739917104900LL),real(-0x34e3ad131262bc00LL),
+      real(0x1ae64995e9a59f00LL),real(-0x1d6cea9b561f3e00LL),
+      real(0x70d3407961b9500LL),real(0x1ea45bc7b594048LL),
+      reale(0x79bbeaLL,0x1e2b14985cfc9LL),
+      // _C4x[95]
+      real(0x4a951ec0f743800LL),real(-0x39128060ba74400LL),
+      real(0x258d1de3ebd5000LL),real(-0x25e6a8ece22dc00LL),
+      real(0xe953314d336800LL),real(-0xd6fbba5b80b400LL),
+      real(0x6d3d6d3e79ea90LL),reale(531864LL,0x2425015f7daa7LL),
+      // _C4x[96]
+      real(0xe1a59555817c700LL),real(-0xce92ef160470400LL),
+      real(0x6a50b28bc94d100LL),real(-0x6ec5ce0328fa200LL),
+      real(0x1e2919432b73b00LL),real(0x81169f96b647f8LL),
+      reale(0x2893f8LL,0xb4b906dd74543LL),
+      // _C4x[97]
+      real(0x12e19d548000LL),real(-0x130f2c71c000LL),real(0x7e08a8b4000LL),
+      real(-0x69e0a004000LL),real(0x39175efa340LL),real(0x59a39697cb86721LL),
+      // _C4x[98]
+      real(0xe7cfd39aa00LL),real(-0xe6239d55400LL),real(0x44ffe5cce00LL),
+      real(0x123fa804df0LL),real(0x73400ac32a3f24fLL),
+      // _C4x[99]
+      real(0x39ce1000LL),real(-0x2d16c800LL),real(0x197c4e20LL),
+      real(0x33a763b318f5LL),
+      // _C4x[100]
+      real(0x48b3200LL),real(0x130f510LL),real(0x958a9334879LL),
+      // _C4x[101]
+      real(433472LL),real(0x10f81f3a9dLL),
+      // _C4x[102]
+      real(0x43707cc00LL),real(0x72363ea00LL),real(0xc6cade800LL),
+      real(0x164b8d6600LL),real(0x2966060400LL),real(0x4fe5ac6200LL),
+      real(0xa1231b2000LL),real(0x155e2e7de00LL),real(0x30194583c00LL),
+      real(0x741fc16da00LL),real(0x131155285800LL),real(0x379d38605600LL),
+      real(0xb96166967400LL),real(0x2e2dfa3db5200LL),real(0xee14dc9ed9000LL),
+      real(0x752e44962ece00LL),real(0x9cf0406db58ac00LL),
+      reale(-3008LL,0x32d1e931ca00LL),reale(16844LL,0xbb0354c82c800LL),
+      reale(-48008LL,0x849ce7f8b4600LL),reale(77726LL,0x663ee9f36e400LL),
+      reale(-64772LL,0x20e7b524200LL),reale(21050LL,0xe65bb4b1eddc0LL),
+      reale(0x9c83e3LL,0xdda51a7ac0b27LL),
+      // _C4x[103]
+      real(0x3f9aad7800LL),real(0x7000ca6000LL),real(0xcbc0504800LL),
+      real(0x180866df000LL),real(0x2f4b74a1800LL),real(0x61abf5b8000LL),
+      real(0xd562fc0e800LL),real(0x1f2598191000LL),real(0x4ed8f85ab800LL),
+      real(0xdc91252ca000LL),real(0x2bd44913d8800LL),real(0xa584ade1c3000LL),
+      real(0x322090df0f5800LL),real(0x16f6266186dc000LL),
+      real(0x1c472a543df62800LL),reale(-7860LL,0x8550f02a75000LL),
+      reale(39234LL,0x9eeb23497f800LL),reale(-98181LL,0x48f3e5f4ee000LL),
+      reale(140051LL,0xe6fe7071ac800LL),reale(-115828LL,0x6ca743fea7000LL),
+      reale(51817LL,0x997f46a249800LL),reale(-9716LL,0x333822c192380LL),
+      reale(0x9c83e3LL,0xdda51a7ac0b27LL),
+      // _C4x[104]
+      real(0x2492f246000LL),real(0x43b68382800LL),real(0x827fc7ff000LL),
+      real(0x10769dabb800LL),real(0x231371038000LL),real(0x4fad3dfb4800LL),
+      real(0xc39532c71000LL),real(0x2109cc8eed800LL),real(0x650cdd3e2a000LL),
+      real(0x16d3054b8e6800LL),real(0x69275cf4ee3000LL),
+      real(0x2d6bb9aa2a1f800LL),real(0x342dc9db6781c000LL),
+      reale(-13326LL,0xf4ea5bd318800LL),reale(59725LL,0xe775950b55000LL),
+      reale(-128820LL,0xb5425df051800LL),reale(144216LL,0xdf24ba0e000LL),
+      reale(-65936LL,0xe9769e324a800LL),reale(-23423LL,0xcda398bdc7000LL),
+      reale(39625LL,0x392517e583800LL),reale(-12955LL,0x99a02e576da00LL),
+      reale(0x9c83e3LL,0xdda51a7ac0b27LL),
+      // _C4x[105]
+      real(0x114b06357800LL),real(0x2239f3629000LL),real(0x475e8ebd2800LL),
+      real(0x9e5523c88000LL),real(0x17aa424dfd800LL),real(0x3e2133dde7000LL),
+      real(0xb7f09cec78800LL),real(0x280af153ee6000LL),
+      real(0xb0d866e91e3800LL),real(0x48b6aeda5425000LL),
+      real(0x4ec10b7f840de800LL),reale(-18694LL,0x2576e33244000LL),
+      reale(76065LL,0x2aaa760409800LL),reale(-141962LL,0x3c08cd5de3000LL),
+      reale(119123LL,0xd1c84be04800LL),real(-0x7f4b67756e45e000LL),
+      reale(-76607LL,0x185979f96f800LL),reale(56790LL,0xce45bec021000LL),
+      reale(-14599LL,0x3bc9e9b8ea800LL),real(0x23b84843a30d9480LL),
+      reale(0x9c83e3LL,0xdda51a7ac0b27LL),
+      // _C4x[106]
+      real(0x7c44a1c56800LL),real(0x10e1a40b9f400LL),real(0x2778995e94000LL),
+      real(0x6511d82348c00LL),real(0x122fbee15d1800LL),
+      real(0x3d60d47d162400LL),real(0x10572b5ec96f000LL),
+      real(0x670e5c5512cbc00LL),real(0x6a1969ca184cc800LL),
+      reale(-23633LL,0x903b77fa65400LL),reale(88223LL,0x601afc7b4a000LL),
+      reale(-143686LL,0xc7e6fcd50ec00LL),reale(86217LL,0x78ea8eac47800LL),
+      reale(43622LL,0x50ec504da8400LL),reale(-86858LL,0x1b1c4c8725000LL),
+      reale(34767LL,0x1af4459111c00LL),real(0x470ee9f8c8f42800LL),
+      real(-0xf0a395fd8dd4c00LL),real(-0x55da5cd875ef3c80LL),
+      reale(0x9c83e3LL,0xdda51a7ac0b27LL),
+      // _C4x[107]
+      real(0x3b98569230800LL),real(0x954e9f9ae8000LL),real(0x1a387f0ed5f800LL),
+      real(0x561911aabbb000LL),real(0x163673b1889e800LL),
+      real(0x870aa0c397ae000LL),reale(2128LL,0x4412890e0d800LL),
+      reale(-28019LL,0x6122fdeae1000LL),reale(96862LL,0x40aaeaffcc800LL),
+      reale(-138877LL,0xe72756d174000LL),reale(55003LL,0xc4365147fb800LL),
+      reale(69831LL,0x65a81c2787000LL),reale(-76837LL,0x6e673dc8ba800LL),
+      reale(14324LL,0xf9d757893a000LL),real(0x610a50cc5ec29800LL),
+      reale(9036LL,0xddda1962ad000LL),reale(-5867LL,0xfcfe343468800LL),
+      real(0x2b3d64f38f7c3a80LL),reale(0x9c83e3LL,0xdda51a7ac0b27LL),
+      // _C4x[108]
+      real(0x2367980c018000LL),real(0x717a5d0aad6800LL),
+      real(0x1c7a6b9a7155000LL),real(0xa7a0b73a0f93800LL),
+      reale(2540LL,0xdc02459a12000LL),reale(-31837LL,0xd9da00c10800LL),
+      reale(102741LL,0xc61b0075cf000LL),reale(-130714LL,0x4bce9caacd800LL),
+      reale(28618LL,0x913148900c000LL),reale(82224LL,0x225affaa4a800LL),
+      reale(-61372LL,0x8e7c958c49000LL),reale(3358LL,0xd2d9334507800LL),
+      reale(-4437LL,0xae8eb3ee06000LL),reale(12409LL,0x2e12e0f984800LL),
+      reale(-3100LL,0x4a639fe0c3000LL),real(-0x185351aa9adbe800LL),
+      real(-0xfcd867cd32b4e00LL),reale(0x9c83e3LL,0xdda51a7ac0b27LL),
+      // _C4x[109]
+      real(0x22fb18f3d6fc800LL),real(0xc812a63656dd000LL),
+      reale(2929LL,0x54e6120875800LL),reale(-35122LL,0xb72fa39d42000LL),
+      reale(106528LL,0xc02be4bd3e800LL),reale(-121105LL,0x35724ce667000LL),
+      reale(7480LL,0x3b39caec37800LL),reale(86076LL,0xd8784a9f2c000LL),
+      reale(-46729LL,0x24906ba440800LL),real(-0x1e17ea5787b8f000LL),
+      reale(-10013LL,0xff9cfd7c39800LL),reale(11072LL,0xcb500e9316000LL),
+      real(-0x3d2315ebbfcfd800LL),reale(2196LL,0x522d08f7fb000LL),
+      reale(-2583LL,0xd6bd372f7b800LL),real(0x1dbc900c41177d80LL),
+      reale(0x9c83e3LL,0xdda51a7ac0b27LL),
+      // _C4x[110]
+      reale(3290LL,0xf070eb97f3400LL),reale(-37926LL,0xeb33f78d44e00LL),
+      reale(108756LL,0x262a302ba0800LL),reale(-111140LL,0x45b6109f34200LL),
+      reale(-8979LL,0x691a509cedc00LL),reale(85061LL,0xe9667b666b600LL),
+      reale(-34831LL,0x4af77b29eb000LL),real(-0x1ae66991075c5600LL),
+      reale(-13338LL,0x2d28d4daa8400LL),reale(8254LL,0x43d2c57af1e00LL),
+      real(-0x39646320240ca800LL),reale(4333LL,0x5a8eb4efe1200LL),
+      reale(-2318LL,0xc78fad2da2c00LL),real(-0x4971411b9aa7a00LL),
+      real(-0x239dc6f1135e6c0LL),reale(0x9c83e3LL,0xdda51a7ac0b27LL),
+      // _C4x[111]
+      reale(109832LL,0xfe67f2664d000LL),reale(-101415LL,0xc9a26ad01c000LL),
+      reale(-21579LL,0xd38200228b000LL),reale(81484LL,0xfb5b01862000LL),
+      reale(-25829LL,0x8520bb4969000LL),real(0x527645ab2c368000LL),
+      reale(-14627LL,0x5f0a484327000LL),reale(5668LL,0x89f8307d6e000LL),
+      real(-0x7c6deea8217fb000LL),reale(5148LL,0xb3c77272b4000LL),
+      real(-0x5ea4f23e05fbd000LL),real(0x33d79ea3e6f7a000LL),
+      real(-0x512f5a2dc7bdf000LL),real(0x13f171801c8d4d00LL),
+      reale(0x9c83e3LL,0xdda51a7ac0b27LL),
+      // _C4x[112]
+      reale(-31111LL,0x2f5aeecd0c000LL),reale(76716LL,0x887753c58b000LL),
+      reale(-19286LL,0x3027a0a80a000LL),reale(3558LL,0x4fcfd1ab09000LL),
+      reale(-14555LL,0x40d2f53608000LL),reale(3850LL,0x9631322307000LL),
+      reale(-3314LL,0x6f07544006000LL),reale(4999LL,0xf3c6aed085000LL),
+      real(-0x44308029330fc000LL),real(0x72cd2f325ae83000LL),
+      real(-0x5cc3eeffca3fe000LL),real(0x2f990ef34001000LL),
+      real(0xedd65cb262fc00LL),reale(0x9c83e3LL,0xdda51a7ac0b27LL),
+      // _C4x[113]
+      reale(-14656LL,0x5833084c1d000LL),reale(5703LL,0xb41e60048e000LL),
+      reale(-13724LL,0xf905debc4f000LL),reale(2794LL,0x80dd2a6158000LL),
+      reale(-4435LL,0x42429a62a1000LL),reale(4398LL,0x1bf890b722000LL),
+      real(-0x462f1f0759b2d000LL),reale(2504LL,0xfcfacf17ac000LL),
+      real(-0x4eb2a95e9a75b000LL),real(0x1bef3eef6f4b6000LL),
+      real(-0x2d8008caddc29000LL),real(0xdbb189dc4eba300LL),
+      reale(0x9c83e3LL,0xdda51a7ac0b27LL),
+      // _C4x[114]
+      reale(-12547LL,0x2f9a6b7e09000LL),reale(2321LL,0x6f75c5bce2800LL),
+      reale(-5210LL,0x3640452d54000LL),reale(3693LL,0x4f3d4dd785800LL),
+      real(-0x59b26230b2e61000LL),reale(2785LL,0x7ef843b608800LL),
+      real(-0x4086b5731d656000LL),real(0x3b22d2695822b800LL),
+      real(-0x3bbf747f663cb000LL),real(0x50e2c41c71ae800LL),
+      real(0x19182d9cca60700LL),reale(0x9c83e3LL,0xdda51a7ac0b27LL),
+      // _C4x[115]
+      reale(-5648LL,0x6d69d3f987000LL),reale(3064LL,0xd620df9a18000LL),
+      real(-0x73b5708edb717000LL),reale(2782LL,0xf8e2a6bab2000LL),
+      real(-0x3aa55028ed4d5000LL),real(0x54f5b0489ac0c000LL),
+      real(-0x3a8372ad6ebf3000LL),real(0x128f31db99de6000LL),
+      real(-0x1bbb3cddeb8b1000LL),real(0x9c3f5d344ffbb00LL),
+      reale(0x9c83e3LL,0xdda51a7ac0b27LL),
+      // _C4x[116]
+      reale(-2257LL,0x84afe20dc8000LL),reale(2620LL,0x5abb698ccf000LL),
+      real(-0x3cfd86157c22a000LL),real(0x656f30f9d7a5d000LL),
+      real(-0x3529aafa1251c000LL),real(0x23979dd758c6b000LL),
+      real(-0x27cfd52f91a0e000LL),real(0x52c1297ffdf9000LL),
+      real(0x1899e61f0915c00LL),reale(0x9c83e3LL,0xdda51a7ac0b27LL),
+      // _C4x[117]
+      real(-0x44c3305a70de1000LL),real(0x6d1c9adfcac5e000LL),
+      real(-0x312f88327b293000LL),real(0x3351684a1a554000LL),
+      real(-0x2ab43a21fd0e5000LL),real(0xdaac481cc1ca000LL),
+      real(-0x120b854707e97000LL),real(0x7289c72302f3500LL),
+      reale(0x9c83e3LL,0xdda51a7ac0b27LL),
+      // _C4x[118]
+      real(-0x303d69b47fe22400LL),real(0x3f4d2c93a259b200LL),
+      real(-0x29be542895db1800LL),real(0x17eb54d9d2a59e00LL),
+      real(-0x1b89924120220c00LL),real(0x4aa7a22c8d50a00LL),
+      real(0x157745851f3d4c0LL),reale(0x9c83e3LL,0xdda51a7ac0b27LL),
+      // _C4x[119]
+      real(-0x474af3a87693800LL),real(0x3c389a0df442000LL),
+      real(-0x37e1a3d92db8800LL),real(0x12d1db00bd71000LL),
+      real(-0x15fc16a85bcd800LL),real(0x99491c279c9880LL),
+      reale(0x1163fcLL,0xdfbd02f131dafLL),
+      // _C4x[120]
+      real(-0xd6b769b7e000LL),real(0x72b1142e1800LL),real(-0x82aa7be7f000LL),
+      real(0x1aa8532e0800LL),real(0x779e97cc600LL),real(0x40d4060dc7c384c7LL),
+      // _C4x[121]
+      real(-0xbff3f70d800LL),real(0x44c7b31b000LL),real(-0x48108b34800LL),
+      real(0x21db9c9a980LL),real(0x4fc9e010f5dcf23LL),
+      // _C4x[122]
+      real(-0x5d090f66800LL),real(0x15cb8432c00LL),real(0x5ff8163080LL),
+      real(0x3e897844a5071ebLL),
+      // _C4x[123]
+      real(-0x51ae800LL),real(0x28cb780LL),real(0x7a5a1b59863LL),
+      // _C4x[124]
+      real(0x46c5200LL),real(0x377b3e1aa351LL),
+      // _C4x[125]
+      real(-0x973b7800LL),real(-0x125656000LL),real(-0x24ee64800LL),
+      real(-0x4d94b7000LL),real(-0xaaf721800LL),real(-0x18e0978000LL),
+      real(-0x3dbc68e800LL),real(-0xa52d939000LL),real(-0x1e3bc54b800LL),
+      real(-0x62f2289a000LL),real(-0x174e12bf8800LL),real(-0x69ee83c3b000LL),
+      real(-0x2753bfa335800LL),real(-0x1693a2298bc000LL),
+      real(-0x23ce232de3a2800LL),real(0x33ca29bdcdd43000LL),
+      reale(-5755LL,0x96c59eaa20800LL),reale(21176LL,0x3b8f28c122000LL),
+      reale(-47647LL,0x79fde44d73800LL),reale(67058LL,0x11f0010e41000LL),
+      reale(-51818LL,0x6680b95db6800LL),reale(16192LL,0xfff7c612b6f80LL),
+      reale(0xbf4bddLL,0x9d1f205d24685LL),
+      // _C4x[126]
+      real(-0xd6ed08000LL),real(-0x1b8fe4a000LL),real(-0x3b33274000LL),
+      real(-0x860230e000LL),real(-0x142709a0000LL),real(-0x341c17b2000LL),
+      real(-0x92ee7ecc000LL),real(-0x1ccf17876000LL),real(-0x6786d9e38000LL),
+      real(-0x1bdf19e19a000LL),real(-0x9bb8377424000LL),
+      real(-0x5352681ef5e000LL),real(-0x79ce0dfd0cd0000LL),
+      reale(2563LL,0x29027cc1fe000LL),reale(-15918LL,0x531738b84000LL),
+      reale(51375LL,0x61bf7d963a000LL),reale(-99437LL,0xc6f0784898000LL),
+      reale(119998LL,0xa6d5e6f116000LL),reale(-88556LL,0xd863841e2c000LL),
+      reale(36577LL,0x210e8c3652000LL),reale(-6478LL,0xccd0172bb6d00LL),
+      reale(0xbf4bddLL,0x9d1f205d24685LL),
+      // _C4x[127]
+      real(-0xbc3b1c3800LL),real(-0x19fd8659000LL),real(-0x3ce45316800LL),
+      real(-0x98e89f08000LL),real(-0x1a16c5239800LL),real(-0x4ef4224b7000LL),
+      real(-0x11089a8d8c800LL),real(-0x461e8219c6000LL),
+      real(-0x1740d89936f800LL),real(-0xbb97ef56095000LL),
+      real(-0xffd8608f0242800LL),reale(4956LL,0x2ae7ba647c000LL),
+      reale(-27804LL,0x77793f179a800LL),reale(78703LL,0x691d56f30d000LL),
+      reale(-126582LL,0x4d53dadbc7800LL),reale(111405LL,0x65dae188be000LL),
+      reale(-33041LL,0x37d0713be4800LL),reale(-31123LL,0x5ae3e7032f000LL),
+      reale(33849LL,0xe315529991800LL),reale(-10097LL,0x3035514bac080LL),
+      reale(0xbf4bddLL,0x9d1f205d24685LL),
+      // _C4x[128]
+      real(-0x8baa3048000LL),real(-0x155e3991c000LL),real(-0x38b7bd240000LL),
+      real(-0xa66484064000LL),real(-0x22acb24838000LL),
+      real(-0x89475b1e6c000LL),real(-0x2b8ce25f7b0000LL),
+      real(-0x14dd31b8f8b4000LL),real(-0x1acbb07dd4628000LL),
+      reale(7723LL,0xe6c1cd6b44000LL),reale(-39541LL,0x4e2f6566e0000LL),
+      reale(98832LL,0x70f12b47fc000LL),reale(-130554LL,0xb8b3b5a9e8000LL),
+      reale(72091LL,0x9d4697d7f4000LL),reale(31173LL,0xcb977f1d70000LL),
+      reale(-72485LL,0x588f6655ac000LL),reale(42073LL,0x76abc75bf8000LL),
+      reale(-8984LL,0x24cb05fba4000LL),real(0x7851cafec6ea600LL),
+      reale(0xbf4bddLL,0x9d1f205d24685LL),
+      // _C4x[129]
+      real(-0x689b7f794800LL),real(-0x12aa316a68000LL),
+      real(-0x3c5fe03b7b800LL),real(-0xe70662316b000LL),
+      real(-0x468257445d2800LL),real(-0x204dea1c904e000LL),
+      real(-0x275c24b79c179800LL),reale(10640LL,0x725f868a0f000LL),
+      reale(-50164LL,0x7c98f9d6af800LL),reale(111598LL,0xa3db986ecc000LL),
+      reale(-120106LL,0xe50b1b57c8800LL),reale(28289LL,0xbddfd64f09000LL),
+      reale(70122LL,0x41f96206f1800LL),reale(-70105LL,0x32e30edbe6000LL),
+      reale(17631LL,0x83f469b94a800LL),reale(3507LL,0xd4dd7e683000LL),
+      real(0x234fa818af3f3800LL),real(-0x5217ce807fb7e980LL),
+      reale(0xbf4bddLL,0x9d1f205d24685LL),
+      // _C4x[130]
+      real(-0x5e9d97de20000LL),real(-0x15f51b48a5a000LL),
+      real(-0x679f3a6a83c000LL),real(-0x2da38dbb53ee000LL),
+      real(-0x351287a208998000LL),reale(13549LL,0xfdc5cc829e000LL),
+      reale(-59299LL,0xca14375c8c000LL),reale(118312LL,0x8f7a13080a000LL),
+      reale(-102645LL,0xf416a7e8f0000LL),reale(-8664LL,0xcd7c174b16000LL),
+      reale(85056LL,0xa0c3d6fa54000LL),reale(-50542LL,0xa701315a82000LL),
+      real(0x9e0314066f78000LL),real(-0x56026edfbaf2000LL),
+      reale(9162LL,0x6ada71271c000LL),reale(-4515LL,0xc070d4197a000LL),
+      real(0x19aa7dbc9bd2b100LL),reale(0xbf4bddLL,0x9d1f205d24685LL),
+      // _C4x[131]
+      real(-0x8e2d12e55cc800LL),real(-0x3c744345ee05000LL),
+      real(-0x436e3347c2885800LL),reale(16354LL,0x603aee4aee000LL),
+      reale(-66896LL,0xca9e46ad91800LL),reale(120525LL,0x7fafccca1000LL),
+      reale(-82889LL,0x93187d3c58800LL),reale(-36027LL,0x48cf357af4000LL),
+      reale(84916LL,0xe33bbac3af800LL),reale(-30330LL,0x65e7df59c7000LL),
+      reale(-5004LL,0x98dbeb9376800LL),reale(-8176LL,0x5ae0cbecfa000LL),
+      reale(10601LL,0xdf58b3eb8d800LL),real(-0x51534d8656793000LL),
+      real(-0x13f74fe07242b800LL),real(-0x1338322158bf8680LL),
+      reale(0xbf4bddLL,0x9d1f205d24685LL),
+      // _C4x[132]
+      real(-0x520b481798460000LL),reale(18997LL,0x2a845a090000LL),
+      reale(-73061LL,0x14338a7640000LL),reale(119587LL,0x641c11f8f0000LL),
+      reale(-63451LL,0xb0d24e0000LL),reale(-54597LL,0xab5ebfb650000LL),
+      reale(77203LL,0x99135d6980000LL),reale(-15162LL,0x99696a3ab0000LL),
+      reale(-2899LL,0xc95d422620000LL),reale(-13402LL,0x44e23ce810000LL),
+      reale(7364LL,0x7017623cc0000LL),real(0xcbde6dd32070000LL),
+      reale(2498LL,0xb270ac8f60000LL),reale(-2208LL,0x1a1eb845d0000LL),
+      real(0x146e5a4ec1af3800LL),reale(0xbf4bddLL,0x9d1f205d24685LL),
+      // _C4x[133]
+      reale(-77965LL,0xfd8dfa5e43000LL),reale(116550LL,0x911cc360c4000LL),
+      reale(-45606LL,0x5472139be5000LL),reale(-66196LL,0x3621e725ee000LL),
+      reale(66624LL,0xae21593727000LL),reale(-5577LL,0xfc909c53d8000LL),
+      real(0x6f2264aae1649000LL),reale(-14833LL,0xd36bf488c2000LL),
+      reale(3661LL,0xe0e147ff8b000LL),real(-0x37687d20b9d14000LL),
+      reale(4430LL,0xd2ef37d92d000LL),real(-0x61330ed553f6a000LL),
+      real(-0x8fc7d2821691000LL),real(-0x4de8f81581e0b00LL),
+      reale(0xbf4bddLL,0x9d1f205d24685LL),
+      // _C4x[134]
+      reale(-29854LL,0x680415f70000LL),reale(-72662LL,0x4d1ac37df4000LL),
+      reale(55735LL,0xd505afdac8000LL),real(-0x19eb9cd373704000LL),
+      reale(6447LL,0x407ca0dba0000LL),reale(-13736LL,0x6cb0ae15c4000LL),
+      real(0x503c7c1e17a78000LL),reale(-2911LL,0x70f0f99ccc000LL),
+      reale(4611LL,0xa07ae6cfd0000LL),real(-0x28ec95124696c000LL),
+      real(0x386dc5f3bf428000LL),real(-0x49a3cdb95c464000LL),
+      real(0xec86977ad08e600LL),reale(0xbf4bddLL,0x9d1f205d24685LL),
+      // _C4x[135]
+      reale(45753LL,0x27312c684b000LL),real(0x6b25908081df2000LL),
+      reale(10080LL,0x3e3c4e94e9000LL),reale(-11484LL,0xcfad66f9a8000LL),
+      real(0x186dcc47df2a7000LL),reale(-4655LL,0x1684cc365e000LL),
+      reale(3765LL,0x192eb8a145000LL),real(-0x1ea7f016e242c000LL),
+      real(0x7c08a9e80a083000LL),real(-0x48a61c5124e36000LL),
+      real(-0x1ab8464a6fdf000LL),real(-0xc3b3128c53f500LL),
+      reale(0xbf4bddLL,0x9d1f205d24685LL),
+      // _C4x[136]
+      reale(12470LL,0xf777d5cb70000LL),reale(-8995LL,0xcb00690428000LL),
+      real(0x22d781d11b8c0000LL),reale(-5685LL,0x5cae489458000LL),
+      reale(2676LL,0xe4b7624210000LL),real(-0x3b4e8fe27b2f8000LL),
+      reale(2525LL,0xe113384060000LL),real(-0x317b33e66b8c8000LL),
+      real(0x1afebbc488cb0000LL),real(-0x2abc78cdb6418000LL),
+      real(0xab0b32cc6da3c00LL),reale(0xbf4bddLL,0x9d1f205d24685LL),
+      // _C4x[137]
+      real(0x514388ef27d31000LL),reale(-6021LL,0xd41baf36e8000LL),
+      real(0x6fa66bdc836df000LL),real(-0x67912be26fab2000LL),
+      reale(2539LL,0xf65fb2006d000LL),real(-0x237e1033f4d8c000LL),
+      real(0x3efb5ba75c79b000LL),real(-0x32b52fd83cbe6000LL),
+      real(0x17d40e2c1a29000LL),real(0x7dfd16a9c2e300LL),
+      reale(0xbf4bddLL,0x9d1f205d24685LL),
+      // _C4x[138]
+      real(0x4d6c482dac2a0000LL),reale(-2330LL,0x4e01d8dc24000LL),
+      reale(2244LL,0xda129de1b8000LL),real(-0x25b9c94d1ec14000LL),
+      real(0x5915813997350000LL),real(-0x2b18411354f8c000LL),
+      real(0x1038d20e1fbe8000LL),real(-0x1a9977b2ea9c4000LL),
+      real(0x7df995f732ef600LL),reale(0xbf4bddLL,0x9d1f205d24685LL),
+      // _C4x[139]
+      real(0x737c719d74a11000LL),real(-0x33cb00709b02e000LL),
+      real(0x64aa4f647e063000LL),real(-0x22d04f5347fb4000LL),
+      real(0x244213a9e6215000LL),real(-0x2372b83384fba000LL),
+      real(0x29c5a12d1767000LL),real(0xd64e2b028e9d00LL),
+      reale(0xbf4bddLL,0x9d1f205d24685LL),
+      // _C4x[140]
+      real(0x216feaa994ce0000LL),real(-0xab5f967e8690000LL),
+      real(0x11e48889bb540000LL),real(-0xb74a91dab5f0000LL),
+      real(0x3c54ceff81a0000LL),real(-0x5d7cb98f1a50000LL),
+      real(0x1f9a69370b20800LL),reale(0x3fc3f4LL,0x89b50ac9b6cd7LL),
+      // _C4x[141]
+      real(0x40db2f49b455f800LL),real(-0x1e99bb32c4c22000LL),
+      real(0x173ba0294630c800LL),real(-0x194707e3169c1000LL),
+      real(0x2d83efe695c9800LL),real(0xdf3e0617af3080LL),
+      reale(0xbf4bddLL,0x9d1f205d24685LL),
+      // _C4x[142]
+      real(0x5e4a1598000LL),real(-0x48b6e92a000LL),real(0x1757a4ac000LL),
+      real(-0x20e8326e000LL),real(0xc6156d2d00LL),real(0x2081a7235aaf593LL),
+      // _C4x[143]
+      real(0xef2f223e3800LL),real(-0x110fb2e7bf000LL),real(0x282bb4606800LL),
+      real(0xbe30d7a6780LL),reale(2828LL,0xfcd03d1974f5LL),
+      // _C4x[144]
+      real(0x2ba61448000LL),real(-0x378568c4000LL),real(0x16cc31e2a00LL),
+      real(0x4c6f2137745e091LL),
+      // _C4x[145]
+      real(0x46ce30800LL),real(0x146425580LL),real(0x1580fd4afdbe65LL),
+      // _C4x[146]
+      real(356096LL),real(0x16df1ef5f5LL),
+      // _C4x[147]
+      real(0x26d5c000LL),real(0x58391000LL),real(0xd2f06000LL),
+      real(0x216bfb000LL),real(0x5aaab0000LL),real(0x10a5565000LL),
+      real(0x35c765a000LL),real(0xc335dcf000LL),real(0x334e2804000LL),
+      real(0x106060339000LL),real(0x6e2b415ae000LL),real(0x484c62e3a3000LL),
+      real(0x848c0aa1558000LL),real(-0xe0b56a0582f3000LL),
+      real(0x745df25523d02000LL),reale(-8379LL,0x93d80ded77000LL),
+      reale(23938LL,0x5996b3a2ac000LL),reale(-45882LL,0x299f27b2e1000LL),
+      reale(58395LL,0x10d8591c56000LL),reale(-42674LL,0xaec45c6b4b000LL),
+      reale(12954LL,0x665fd1a892600LL),reale(0xe213d7LL,0x5c99263f881e3LL),
+      // _C4x[148]
+      real(0x1bc8d4000LL),real(0x4471f8000LL),real(0xb3f21c000LL),
+      real(0x1feb1c0000LL),real(0x6346964000LL),real(0x1597d188000LL),
+      real(0x56a252ac000LL),real(0x1a3bcf550000LL),real(0xa648bd1f4000LL),
+      real(0x65fb114118000LL),real(0xacffeca0b3c000LL),
+      real(-0x10c1b440c2720000LL),real(0x7d0a1c0732284000LL),
+      reale(-7962LL,0xe4c185e0a8000LL),reale(19682LL,0xa4af1c3bcc000LL),
+      reale(-31918LL,0x3337107c70000LL),reale(34094LL,0x3798b7b14000LL),
+      reale(-23102LL,0xa7c0ead038000LL),reale(8983LL,0xdb34fa045c000LL),
+      real(-0x5f40c0b45d798c00LL),reale(0x4b5bf2LL,0x74330cbfd80a1LL),
+      // _C4x[149]
+      real(0x7240494000LL),real(0x13aa0f5a000LL),real(0x3b2b77a0000LL),
+      real(0xc68497e6000LL),real(0x2fcbb8aac000LL),real(0xdd4302e72000LL),
+      real(0x534405e9b8000LL),real(0x30298b6eefe000LL),
+      real(0x4c5dcf34c0c4000LL),real(-0x6d574da684a76000LL),
+      reale(11873LL,0x12afe73bd0000LL),reale(-42010LL,0xaf63f69e16000LL),
+      reale(89073LL,0x6259ee06dc000LL),reale(-115684LL,0x519b5d84a2000LL),
+      reale(82889LL,0x8f2a67cde8000LL),reale(-11936LL,0x4e23ac852e000LL),
+      reale(-33313LL,0x30fa5dbcf4000LL),reale(28876LL,0xae4eda7bba000LL),
+      reale(-8102LL,0x7c9ba7ae5ac00LL),reale(0xe213d7LL,0x5c99263f881e3LL),
+      // _C4x[150]
+      real(0x8ddfb274000LL),real(0x1ccea7740000LL),real(0x6b145a40c000LL),
+      real(0x1dc5136a58000LL),real(0xab5ca60ba4000LL),real(0x5e28748a970000LL),
+      real(0x8cad0403953c000LL),reale(-3004LL,0x514eade088000LL),
+      reale(18707LL,0x350991ecd4000LL),reale(-59285LL,0x97ba9abba0000LL),
+      reale(107702LL,0xd776bbe6c000LL),reale(-107580LL,0x1cbface6b8000LL),
+      reale(33813LL,0xa464b8b604000LL),reale(48035LL,0x81a4fa0dd0000LL),
+      reale(-64048LL,0x5bd9a37f9c000LL),reale(31225LL,0xe027c1dce8000LL),
+      reale(-5636LL,0x2a297fc734000LL),real(-0x50368754849c400LL),
+      reale(0xe213d7LL,0x5c99263f881e3LL),
+      // _C4x[151]
+      real(0xcab3dac70000LL),real(0x3665759289000LL),real(0x12ce11eabe2000LL),
+      real(0x9df70180dbb000LL),real(0xdfd754eb8954000LL),
+      reale(-4488LL,0xa22dc969ed000LL),reale(25849LL,0xff24cd52c6000LL),
+      reale(-73909LL,0xe84c249d1f000LL),reale(115119LL,0x8d3c9a9638000LL),
+      reale(-83692LL,0xbe01c1fd51000LL),reale(-14376LL,0x52590d21aa000LL),
+      reale(76590LL,0xeb60670083000LL),reale(-52129LL,0x656e27c31c000LL),
+      reale(7010LL,0x5a128dfcb5000LL),reale(3866LL,0xf6d75c088e000LL),
+      real(0x469f50315e7e7000LL),real(-0x4bbe9f188165a200LL),
+      reale(0xe213d7LL,0x5c99263f881e3LL),
+      // _C4x[152]
+      real(0x1da928c9710000LL),real(0xef3463c3520000LL),
+      real(0x1433e03669f30000LL),reale(-6122LL,0x376a120b40000LL),
+      reale(32842LL,0x2af7b46f50000LL),reale(-85282LL,0x2598a6c160000LL),
+      reale(113905LL,0x4294ec3770000LL),reale(-54342LL,0xcaad3e8780000LL),
+      reale(-49474LL,0x7f29202790000LL),reale(78594LL,0x71ba158da0000LL),
+      reale(-27685LL,0x2a1d166fb0000LL),reale(-5832LL,0xca82c803c0000LL),
+      reale(-2438LL,0xc289213fd0000LL),reale(8713LL,0x93ccba19e0000LL),
+      reale(-3468LL,0xf03336c7f0000LL),real(0xf2bb44edf33d000LL),
+      reale(0xe213d7LL,0x5c99263f881e3LL),
+      // _C4x[153]
+      real(0x1b3ddeae39bf0000LL),reale(-7840LL,0x9d9685eca8000LL),
+      reale(39400LL,0x7dae3b2360000LL),reale(-93478LL,0xd2285ae218000LL),
+      reale(106917LL,0x5f76290ad0000LL),reale(-25707LL,0xb68a548f88000LL),
+      reale(-70222LL,0x72a254240000LL),reale(66679LL,0x434a03a4f8000LL),
+      reale(-7927LL,0x3e84b5b9b0000LL),reale(-5105LL,0xb39463d268000LL),
+      reale(-10826LL,0x68d0386120000LL),reale(8339LL,0xae0935c7d8000LL),
+      real(-0xb5e35652d770000LL),real(-0xb97cf166cab8000LL),
+      real(-0x1484ac4370939000LL),reale(0xe213d7LL,0x5c99263f881e3LL),
+      // _C4x[154]
+      reale(45373LL,0x376f121df0000LL),reale(-98872LL,0x1cf2432040000LL),
+      reale(96522LL,0x4174515a90000LL),real(-0x2d5b0f36d6d20000LL),
+      reale(-79484LL,0xacd8facf30000LL),reale(50297LL,0xf87ac09580000LL),
+      reale(3071LL,0x5d816f2bd0000LL),real(0x5cfb30543d820000LL),
+      reale(-14133LL,0xb3e4e32070000LL),reale(3907LL,0xfc9bf30ac0000LL),
+      real(0x1e5e0fff75d10000LL),reale(2700LL,0x7f35ecdd60000LL),
+      real(-0x74992b46f6e50000LL),real(0xe2f417f6bbc1000LL),
+      reale(0xe213d7LL,0x5c99263f881e3LL),
+      // _C4x[155]
+      reale(84445LL,0xef949ea0f8000LL),reale(19627LL,0xf0e541fbce000LL),
+      reale(-80834LL,0xa08bedc824000LL),reale(34575LL,0x1644d05d7a000LL),
+      reale(6828LL,0x4cfbe5cb50000LL),reale(8288LL,0x561945cd26000LL),
+      reale(-12839LL,0x92c1cd7e7c000LL),real(0x15c5608ef0ed2000LL),
+      real(-0x653ba29de4a58000LL),reale(4217LL,0x4b5d86267e000LL),
+      real(-0x3b46409683b2c000LL),real(-0x974d654f27d6000LL),
+      real(-0x674dea252558c00LL),reale(0xe213d7LL,0x5c99263f881e3LL),
+      // _C4x[156]
+      reale(-77305LL,0x14b26f7638000LL),reale(21636LL,0x8867f71d90000LL),
+      reale(6061LL,0x1026579ee8000LL),reale(12960LL,0x5a843c8140000LL),
+      reale(-9404LL,0xfda467ab98000LL),real(-0x35c5d916ffb10000LL),
+      reale(-4115LL,0xc2ec441448000LL),reale(3690LL,0x5a8c0420a0000LL),
+      real(-0x7db1fc00af08000LL),real(0x3ee56918f4c50000LL),
+      real(-0x41d90b24a2658000LL),real(0xb0f65a4ddefb800LL),
+      reale(0xe213d7LL,0x5c99263f881e3LL),
+      // _C4x[157]
+      reale(3052LL,0x1cc54fce28000LL),reale(15175LL,0x33b0e2aba4000LL),
+      reale(-5745LL,0xf3abbf2820000LL),real(-0xd3fdde9c4364000LL),
+      reale(-5628LL,0xbd4d5ba218000LL),reale(2296LL,0xc920e17994000LL),
+      real(-0x15ef23de88bf0000LL),reale(2060LL,0x9b7c8a7a8c000LL),
+      real(-0x3634e9b2229f8000LL),real(-0x3eaac877287c000LL),
+      real(-0x1ee323a1ca0c800LL),reale(0xe213d7LL,0x5c99263f881e3LL),
+      // _C4x[158]
+      reale(-2830LL,0xa8bb37a568000LL),real(0x53fda6bff9540000LL),
+      reale(-5947LL,0x3e8620cd18000LL),real(0x424987c8bd3f0000LL),
+      real(-0x4d6fba1e72f38000LL),reale(2362LL,0x7a9b39aaa0000LL),
+      real(-0x1a7dd6520d788000LL),real(0x1ca5a49549150000LL),
+      real(-0x279b8ad82b3d8000LL),real(0x8624b660e613800LL),
+      reale(0xe213d7LL,0x5c99263f881e3LL),
+      // _C4x[159]
+      reale(-5405LL,0xa1991e06d0000LL),real(0x194c5bcfa9f36000LL),
+      reale(-2202LL,0xb0dcf6bb1c000LL),reale(2053LL,0x73a8845e02000LL),
+      real(-0x127ebba7aac98000LL),real(0x433c97a5782ce000LL),
+      real(-0x29997437ffc4c000LL),real(-0xb36408ece66000LL),
+      real(-0x4eb946c9b6ac00LL),reale(0xe213d7LL,0x5c99263f881e3LL),
+      // _C4x[160]
+      reale(-2885LL,0x6888986810000LL),real(0x5dcb94a5bbaa0000LL),
+      real(-0x2147754a866d0000LL),real(0x59b9e153ee1c0000LL),
+      real(-0x1d3317b06cdb0000LL),real(0xfd67f86b28e0000LL),
+      real(-0x193b89a255c90000LL),real(0x662541f54195000LL),
+      reale(0xe213d7LL,0x5c99263f881e3LL),
+      // _C4x[161]
+      real(-0x3c147e5183b90000LL),real(0x5c8a793ab7a08000LL),
+      real(-0x14e3709880260000LL),real(0x26583d412b938000LL),
+      real(-0x1ec1409e52930000LL),real(0xd82d55b5068000LL),
+      real(0x4a1c5add9a3000LL),reale(0xe213d7LL,0x5c99263f881e3LL),
+      // _C4x[162]
+      real(-0x1c0b06f2aed0000LL),real(0x44926ab731c0000LL),
+      real(-0x2031c71e85b0000LL),real(0xca25cdaf0e0000LL),
+      real(-0x14c7d62b6490000LL),real(0x61052e04125000LL),
+      reale(0x1163fcLL,0xdfbd02f131dafLL),
+      // _C4x[163]
+      real(-0x13480fca8c000LL),real(0x16106a2c37000LL),
+      real(-0x1502d2e846000LL),real(0x16180c1bd000LL),real(0x74238242a00LL),
+      reale(3342LL,0x41381bc9272f3LL),
+      // _C4x[164]
+      real(-0x142d81502c000LL),real(0x6dee9f4b8000LL),real(-0xae181cf64000LL),
+      real(0x39153b46b400LL),reale(3342LL,0x41381bc9272f3LL),
+      // _C4x[165]
+      real(-0x10389da9c000LL),real(0x19e75ef2000LL),real(0x821f98bc00LL),
+      real(0xd767bab38dc330dLL),
+      // _C4x[166]
+      real(-0x3c404000LL),real(0x15c35400LL),real(0x64173937d043LL),
+      // _C4x[167]
+      real(0x43f7200LL),real(0x75209f8d91abLL),
+      // _C4x[168]
+      real(-0x12550000LL),real(-0x32460000LL),real(-0x94070000LL),
+      real(-7579LL<<20),real(-0x689d90000LL),real(-0x1a131a0000LL),
+      real(-0x790f8b0000LL),real(-0x2ae74440000LL),real(-0x1427d8dd0000LL),
+      real(-0xee3402ee0000LL),real(-0x1efc2a618f0000LL),
+      real(0x3c3fa7bdb280000LL),real(-0x243e4ae81d610000LL),
+      reale(3081LL,0xb7f72703e0000LL),reale(-10640LL,0xbbbd057ed0000LL),
+      reale(25534LL,0x3d6d8c6940000LL),reale(-43525LL,0xba33d0a9b0000LL),
+      reale(51336LL,0x52534b86a0000LL),reale(-35936LL,0x932c17ee90000LL),
+      reale(10668LL,0x544ee8e52d400LL),reale(0x104dbd1LL,0x1c132c21ebd41LL),
+      // _C4x[169]
+      real(-0x3d7880000LL),real(-0xbe0fc0000LL),real(-165572LL<<20),
+      real(-0x9aa4840000LL),real(-0x2adb4f80000LL),real(-0xe6e14cc0000LL),
+      real(-0x666b5b3LL<<20),real(-0x46e9da3540000LL),
+      real(-0x89237b88680000LL),real(0xf5289483e640000LL),
+      reale(-2142LL,0x9739a99eLL<<20),reale(10163LL,0xf2a381edc0000LL),
+      reale(-30732LL,0x5cd062280000LL),reale(63101LL,0xdb7b98c940000LL),
+      reale(-89757LL,0x471a126fLL<<20),reale(87316LL,0x63109160c0000LL),
+      reale(-55354LL,0xda1bbeb80000LL),reale(20534LL,0x8754849c40000LL),
+      reale(-3369LL,0xdcc223e5d800LL),reale(0x104dbd1LL,0x1c132c21ebd41LL),
+      // _C4x[170]
+      real(-0x8d7a970000LL),real(-0x209c2bLL<<20),real(-0x8adb5490000LL),
+      real(-0x2cb1dafa0000LL),real(-0x12da13bdb0000LL),
+      real(-0xc549443040000LL),real(-0x1658a10fa0d0000LL),
+      real(0x250f39cc17720000LL),reale(-4743LL,0xffd1f9c610000LL),
+      reale(20239LL,0xc76fee6a80000LL),reale(-53603LL,0xd95b5dbaf0000LL),
+      reale(92339LL,0x3cdcf0cde0000LL),reale(-101237LL,0xf904c301d0000LL),
+      reale(59785LL,0x22c992c540000LL),real(0x5c1211516deb0000LL),
+      reale(-32945LL,0x793fa374a0000LL),reale(24775LL,0x5aee521590000LL),
+      reale(-6658LL,0x521f990157400LL),reale(0x104dbd1LL,0x1c132c21ebd41LL),
+      // _C4x[171]
+      real(-0x1526f7LL<<24),real(-0x68a88b9LL<<20),real(-0x2a358682LL<<20),
+      real(-0x1a3e60a4bLL<<20),real(-0x2ce197fb94LL<<20),
+      real(0x4592e53c723LL<<20),reale(-8215LL,0x6decc35aLL<<20),
+      reale(31749LL,0xea580d91LL<<20),reale(-73862LL,0xa3060848LL<<20),
+      reale(105371LL,0xded9faffLL<<20),reale(-81326LL,0xa57bc536LL<<20),
+      reale(5533LL,0x9b69716dLL<<20),reale(54935LL,0x1e8a6c24LL<<20),
+      reale(-54850LL,0xf340a2dbLL<<20),reale(23331LL,0xfc74cf12LL<<20),
+      reale(-3572LL,0xc712b149LL<<20),real(-0xa766ab1fb094000LL),
+      reale(0x104dbd1LL,0x1c132c21ebd41LL),
+      // _C4x[172]
+      real(-0x4fc4c2e840000LL),real(-0x2f63f986280000LL),
+      real(-0x4cec268118c0000LL),real(0x702c4e5b497LL<<20),
+      reale(-12305LL,0xaa8fdfeec0000LL),reale(43346LL,0x51cc5fb080000LL),
+      reale(-88872LL,0xa25817fe40000LL),reale(103468LL,0x37d02f3aLL<<20),
+      reale(-46366LL,0x45288ce5c0000LL),reale(-41350LL,0xda855d8380000LL),
+      reale(72365LL,0x9597fe7540000LL),reale(-36581LL,0x66b4b4ddLL<<20),
+      real(0x3033fbc727cc0000LL),reale(3419LL,0x57c1ab9680000LL),
+      real(0x5d00262e0cc40000LL),real(-0x44e0e913b4a79000LL),
+      reale(0x104dbd1LL,0x1c132c21ebd41LL),
+      // _C4x[173]
+      real(-0x767f211b2aLL<<20),reale(2615LL,0x8698ee3LL<<20),
+      reale(-16755LL,0x8d55257cLL<<20),reale(54113LL,0x58a8d2e5LL<<20),
+      reale(-98063LL,0x29302962LL<<20),reale(91200LL,0xa6fbe637LL<<20),
+      reale(-9604LL,0xcc190aa8LL<<20),reale(-69012LL,0xe24608f9LL<<20),
+      reale(62980LL,0xeeb0c36eLL<<20),reale(-11146LL,0x45c9b4bLL<<20),
+      reale(-7196LL,0xf4bcdd4LL<<20),reale(-4458LL,0x211add4dLL<<20),
+      reale(7974LL,0x231c3faLL<<20),reale(-2669LL,0xd8692f1fLL<<20),
+      real(0x8b8039451326000LL),reale(0x104dbd1LL,0x1c132c21ebd41LL),
+      // _C4x[174]
+      reale(-21346LL,0x393f573540000LL),reale(63537LL,0xd254ce1fLL<<20),
+      reale(-101991LL,0xec282a30c0000LL),reale(73206LL,0xb939804c80000LL),
+      reale(21832LL,0x8bfbf3440000LL),reale(-78786LL,0x910c2aeaLL<<20),
+      reale(42984LL,0xe415720fc0000LL),reale(4706LL,0x1b30244780000LL),
+      real(-0x6fb64418f6cc0000LL),reale(-11953LL,0x9ad612b5LL<<20),
+      reale(6137LL,0x3819368ec0000LL),real(0x1ceca02d88280000LL),
+      real(-0x2d5a1d362dc0000LL),real(-0x14a7906c9982d000LL),
+      reale(0x104dbd1LL,0x1c132c21ebd41LL),
+      // _C4x[175]
+      reale(-101657LL,0x71ae74f4LL<<20),reale(53043LL,0x223d2095LL<<20),
+      reale(45405LL,0x1cb67f76LL<<20),reale(-76256LL,0x609f66d7LL<<20),
+      reale(23050LL,0x5b912df8LL<<20),reale(9407LL,0xe5488f19LL<<20),
+      reale(7022LL,0xeb6bec7aLL<<20),reale(-12739LL,0xf0edb55bLL<<20),
+      real(0x4df9e23a6fcLL<<20),real(0x118e235259dLL<<20),
+      reale(2782LL,0x4bc9e97eLL<<20),real(-0x61e77094421LL<<20),
+      real(0x9e768b34c754000LL),reale(0x104dbd1LL,0x1c132c21ebd41LL),
+      // _C4x[176]
+      reale(61154LL,0xdd701642e0000LL),reale(-66912LL,0x73fb09c140000LL),
+      reale(7800LL,0xcd3506c5a0000LL),reale(6879LL,0x58cd2b71LL<<20),
+      reale(13340LL,0xebc72e5460000LL),reale(-8996LL,0xe1a48b80c0000LL),
+      real(-0x58226c8c268e0000LL),reale(-2528LL,0xf4a2f95880000LL),
+      reale(3789LL,0xabee5235e0000LL),real(-0x1eca7dff19fc0000LL),
+      real(-0x7ff214bf2760000LL),real(-0x75bce0e31735800LL),
+      reale(0x104dbd1LL,0x1c132c21ebd41LL),
+      // _C4x[177]
+      real(-0x73f9d78b0d9LL<<20),real(0x4e7a9c7503280000LL),
+      reale(15740LL,0x2392a74cLL<<20),reale(-4249LL,0xcc7c095580000LL),
+      real(-0x407b444d4cfLL<<20),reale(-4969LL,0xc0c67a4080000LL),
+      reale(2638LL,0x3b83d7e6LL<<20),real(0x88c04a730380000LL),
+      real(0x44a3b895a7bLL<<20),real(-0x3a51363dc5180000LL),
+      real(0x855f1c455087000LL),reale(0x104dbd1LL,0x1c132c21ebd41LL),
+      // _C4x[178]
+      reale(15000LL,0xe6601a91a0000LL),real(-0x261369ca72fLL<<20),
+      real(0x42e9870754860000LL),reale(-5749LL,0x340bba88c0000LL),
+      real(0x3d07c1e90b320000LL),real(-0x1f816cb77f780000LL),
+      real(0x7fb986a3c79e0000LL),real(-0x26578914f47c0000LL),
+      real(-0x4ae4d5f0bb60000LL),real(-0x2b86668e596d800LL),
+      reale(0x104dbd1LL,0x1c132c21ebd41LL),
+      // _C4x[179]
+      reale(3472LL,0x3c58cb98LL<<20),reale(-5077LL,0x2e5a0d05LL<<20),
+      real(-0x23c291494eLL<<20),real(-0x6a9c1a13021LL<<20),
+      reale(2051LL,0xf8c055ccLL<<20),real(-0xa41376ff47LL<<20),
+      real(0x1f44e68cce6LL<<20),real(-0x245598aac6dLL<<20),
+      real(0x69deaea556c4000LL),reale(0x104dbd1LL,0x1c132c21ebd41LL),
+      // _C4x[180]
+      real(-0x83a0cdc49940000LL),reale(-2693LL,0x7731e95580000LL),
+      real(0x5a9e6c539a840000LL),real(-0xc24642d3d7LL<<20),
+      real(0x4606e5f7741c0000LL),real(-0x210591b042380000LL),
+      real(-0x1ee58ad2bcc0000LL),real(-0xe57fab5d571000LL),
+      reale(0x104dbd1LL,0x1c132c21ebd41LL),
+      // _C4x[181]
+      real(0x2faca7f6766LL<<20),real(-0x28623ac8329LL<<20),
+      real(0x55c963456a4LL<<20),real(-0x11bb996f2dfLL<<20),
+      real(0x108bab390a2LL<<20),real(-0x17b5bd88f85LL<<20),
+      real(0x53401a2130be000LL),reale(0x104dbd1LL,0x1c132c21ebd41LL),
+      // _C4x[182]
+      real(0x4e0ae513ee240000LL),real(-0xc0c2e3c4cfLL<<20),
+      real(0x2891fd50f97c0000LL),real(-0x1a095b35a9f80000LL),
+      real(-0x52187764ac0000LL),real(-0x22c21c78f4d000LL),
+      reale(0x104dbd1LL,0x1c132c21ebd41LL),
+      // _C4x[183]
+      real(0x33ca8094LL<<20),real(-0x1146ab51LL<<20),real(0x951494aLL<<20),
+      real(-0xee7ce1bLL<<20),real(0x3ccfc393c000LL),
+      reale(3856LL,0x72a333c0b70f1LL),
+      // _C4x[184]
+      real(0x2cef3d4baf0000LL),real(-0x23eaa989be0000LL),
+      real(0xef66e7c50000LL),real(0x5431e6572400LL),
+      reale(119549LL,0xe1c344562ad2fLL),
+      // _C4x[185]
+      real(0x5599e7780000LL),real(-0x8cfe739c0000LL),real(0x28b139bd9800LL),
+      reale(3231LL,0x13f0854e6fdc3LL),
+      // _C4x[186]
+      real(0x3a6d50000LL),real(0x138f18400LL),real(0x4082f7e0f93b2fLL),
+      // _C4x[187]
+      real(0x13118000LL),real(0x75209f8d91abLL),
+      // _C4x[188]
+      real(0x10740000LL),real(0x38fa0000LL),real(3498LL<<20),
+      real(0x3b6460000LL),real(0x12dccc0000LL),real(0x759a120000LL),
+      real(0x3d0fff80000LL),real(0x3224b15e0000LL),real(0x74cfa8d240000LL),
+      real(-0x100412726d60000LL),real(0xaf94f028d5LL<<20),
+      real(-0x433703efa18a0000LL),reale(4345LL,0xa637f297c0000LL),
+      reale(-12474LL,0x608555e420000LL),reale(26308LL,0x13a90aa80000LL),
+      reale(-40980LL,0x3929b258e0000LL),reale(45533LL,0x15d1ab9d40000LL),
+      reale(-30802LL,0x35013915a0000LL),reale(8983LL,0xdb34fa045c000LL),
+      reale(0x127a3caLL,0xdb8d32044f89fLL),
+      // _C4x[189]
+      real(0x5cef80000LL),real(99288LL<<20),real(0x75c8080000LL),
+      real(0x2bad8dLL<<20),real(0x1576c2180000LL),real(0x1092b662LL<<20),
+      real(0x2405b55f280000LL),real(-0x490d2ef189LL<<20),
+      real(0x2dc13d73c1380000LL),reale(-4044LL,0xdf9645ecLL<<20),
+      reale(14485LL,0x7f6528a480000LL),reale(-36112LL,0xadb9dce1LL<<20),
+      reale(64526LL,0x4ec29dc580000LL),reale(-82902LL,0x61fc1376LL<<20),
+      reale(74876LL,0xa109259680000LL),reale(-44998LL,0x991eb9cbLL<<20),
+      reale(16070LL,0x802be23780000LL),reale(-2567LL,0x2f156f6c78000LL),
+      reale(0x127a3caLL,0xdb8d32044f89fLL),
+      // _C4x[190]
+      real(106398LL<<24),real(0x9377d6LL<<20),real(0x44feec4LL<<20),
+      real(0x326cada2LL<<20),real(0x67002b868LL<<20),real(-0xc295517d72LL<<20),
+      real(0x7045d79918cLL<<20),reale(-9007LL,0x977a7f5aLL<<20),
+      reale(28706LL,0x584fd4fLL<<24),reale(-61777LL,0xaecc34c6LL<<20),
+      reale(90600LL,0x34124d54LL<<20),reale(-86126LL,0xe1950b92LL<<20),
+      reale(41671LL,0x69508578LL<<20),reale(9900LL,0xe7fa147eLL<<20),
+      reale(-31427LL,0x3e3e181cLL<<20),reale(21427LL,0x558fd84aLL<<20),
+      reale(-5581LL,0xf70d350210000LL),reale(0x127a3caLL,0xdb8d32044f89fLL),
+      // _C4x[191]
+      real(0xa6c2bf580000LL),real(0x73fcd1afLL<<20),real(0xe000999c080000LL),
+      real(-0x18cc7eefd8aLL<<20),reale(3397LL,0x57665c9b80000LL),
+      reale(-15562LL,0x2b59a6fdLL<<20),reale(44311LL,0x617f59e680000LL),
+      reale(-82041LL,0x83d2aea4LL<<20),reale(95750LL,0x6b882f0180000LL),
+      reale(-56327LL,0x49f5d8cbLL<<20),reale(-14076LL,0x3175e14c80000LL),
+      reale(56094LL,0x8aaf24d2LL<<20),reale(-46281LL,0x1a6a8e2780000LL),
+      reale(17576LL,0xfb594219LL<<20),reale(-2262LL,0x39d01af280000LL),
+      real(-0xc8e19a260718000LL),reale(0x127a3caLL,0xdb8d32044f89fLL),
+      // _C4x[192]
+      real(0x19b7c4e0f7LL<<20),real(-0x2af3a20d75d80000LL),
+      reale(5489LL,0xbd385526LL<<20),reale(-23108LL,0xdabe65c980000LL),
+      reale(59020LL,0x343e88d5LL<<20),reale(-93670LL,0x3beae65080000LL),
+      reale(83160LL,0x242e42c4LL<<20),reale(-14192LL,0x406831f780000LL),
+      reale(-55803LL,0xf73b11b3LL<<20),reale(63340LL,0xe56b447e80000LL),
+      reale(-24300LL,0xdb812462LL<<20),reale(-2686LL,0xc38ce5a580000LL),
+      reale(2706LL,0x4a412191LL<<20),real(0x69f4dee012c80000LL),
+      real(-0x3e4f75bd92cb0000LL),reale(0x127a3caLL,0xdb8d32044f89fLL),
+      // _C4x[193]
+      reale(7986LL,0x4cd10c1180000LL),reale(-31050LL,0x5a7fe822LL<<20),
+      reale(71398LL,0xc143b88280000LL),reale(-96608LL,0x1b16cd97LL<<20),
+      reale(60036LL,0xdbd0ec4380000LL),reale(24533LL,0x47d2cc6cLL<<20),
+      reale(-73259LL,0x19a1ef7480000LL),reale(45499LL,0xc587f2c1LL<<20),
+      real(-0x1f535f83dca80000LL),reale(-6269LL,0x8c8d0eb6LL<<20),
+      reale(-5890LL,0x10af2ca680000LL),reale(7129LL,0x77d5fe6bLL<<20),
+      reale(-2061LL,0x3b31cee780000LL),real(0x4aa8326c4b38000LL),
+      reale(0x127a3caLL,0xdb8d32044f89fLL),
+      // _C4x[194]
+      reale(80789LL,0x4afe5ef8LL<<20),reale(-92414LL,0x96a1aa2aLL<<20),
+      reale(33037LL,0xb34c5644LL<<20),reale(52633LL,0xcda5b00eLL<<20),
+      reale(-71258LL,0x423ab55LL<<24),reale(21774LL,0x3718ba52LL<<20),
+      reale(9867LL,0xdc15875cLL<<20),reale(2235LL,0x613d3636LL<<20),
+      reale(-11864LL,0xbcde17a8LL<<20),reale(4226LL,0xe3b4e8faLL<<20),
+      real(0x31b8c0ba174LL<<20),real(0x4eeb4b1fdeLL<<20),
+      real(-0x1429c96cdeb90000LL),reale(0x127a3caLL,0xdb8d32044f89fLL),
+      // _C4x[195]
+      reale(6774LL,0xfe31cddf80000LL),reale(68916LL,0x2d269395LL<<20),
+      reale(-58359LL,0x7051a71280000LL),reale(3030LL,0x95a6df84LL<<20),
+      reale(8321LL,0x3ad7949580000LL),reale(11199LL,0x3b4c11f3LL<<20),
+      reale(-10211LL,0xf3ffaac880000LL),real(-0x2197fd386beLL<<20),
+      real(-0x88d945e9f480000LL),reale(2764LL,0x777313d1LL<<20),
+      real(-0x51f911c354180000LL),real(0x6eb0baaefa68000LL),
+      reale(0x127a3caLL,0xdb8d32044f89fLL),
+      // _C4x[196]
+      reale(-41675LL,0xbe119ede80000LL),reale(-7594LL,0x9ca8964e40000LL),
+      real(0x45ab72cec72LL<<20),reale(15266LL,0x7545b9b5c0000LL),
+      reale(-4857LL,0x86556f8580000LL),real(-0x76ec691ccd2c0000LL),
+      reale(-3303LL,0x6ff9fcb9LL<<20),reale(3252LL,0xd63fbdd4c0000LL),
+      real(-0xa56dc66b5380000LL),real(-0x5b75ff5133c0000LL),
+      real(-0x7d0ead839928000LL),reale(0x127a3caLL,0xdb8d32044f89fLL),
+      // _C4x[197]
+      reale(-6704LL,0xd4115b5880000LL),reale(14458LL,0x65ca13f4LL<<20),
+      real(-0x3b9765d55080000LL),real(-0x9192a65f9LL<<20),
+      reale(-5283LL,0x27cb55f680000LL),real(0x6668ccb1d7aLL<<20),
+      real(0xd2bcdb640d80000LL),real(0x48aecde6f2dLL<<20),
+      real(-0x3353b5e7c2b80000LL),real(0x650db91f67c8000LL),
+      reale(0x127a3caLL,0xdb8d32044f89fLL),
+      // _C4x[198]
+      reale(2327LL,0xd507b61LL<<24),reale(3002LL,0x513d8c0aLL<<20),
+      reale(-5099LL,0xd4e3b86cLL<<20),real(-0x25ceba7a2LL<<20),
+      real(-0x31e92424bf8LL<<20),real(0x799d0d96612LL<<20),
+      real(-0x19490c8c4dcLL<<20),real(-0x490dda8e9aLL<<20),
+      real(-0x33e11620e250000LL),reale(0x127a3caLL,0xdb8d32044f89fLL),
+      // _C4x[199]
+      reale(-3512LL,0x918ea85280000LL),real(-0x204aea957e3LL<<20),
+      reale(-2146LL,0xdb7d866f80000LL),real(0x67ab1c5581eLL<<20),
+      real(-0x13d8d488380000LL),real(0x21f191654dfLL<<20),
+      real(-0x2114d7448e680000LL),real(0x53ff9bb26958000LL),
+      reale(0x127a3caLL,0xdb8d32044f89fLL),
+      // _C4x[200]
+      reale(-2935LL,0xe58446bfLL<<20),real(0x351db209cd880000LL),
+      real(-0xd982d18896LL<<20),real(0x46b48a654db80000LL),
+      real(-0x1951684536bLL<<20),real(-0x2829437b4180000LL),
+      real(-0x1536c8746170000LL),reale(0x127a3caLL,0xdb8d32044f89fLL),
+      // _C4x[201]
+      real(-0x354a11b9e2580000LL),real(0x4dd877fc48aLL<<20),
+      real(-0x8f791d3a3680000LL),real(0x11c215e6335LL<<20),
+      real(-0x161c113e61780000LL),real(0x4429220c0f48000LL),
+      reale(0x127a3caLL,0xdb8d32044f89fLL),
+      // _C4x[202]
+      real(-0xb7278f038LL<<20),real(0x3d693f0c92LL<<20),
+      real(-0x1f4e13827cLL<<20),real(-0x1842f819aLL<<20),
+      real(-0xacc29a2990000LL),reale(0x1ae058LL,0x42813317aa23dLL),
+      // _C4x[203]
+      real(-0x161894ee480000LL),real(0x12aa85331LL<<20),
+      real(-0x1b65cf99180000LL),real(0x62bf29e3e8000LL),
+      reale(135489LL,0xddbb2b5096ef1LL),
+      // _C4x[204]
+      real(-0x93f6bc6840000LL),real(-0x14f4b1f20000LL),real(-0x88fc23ec000LL),
+      reale(40280LL,0xc561288d94a7fLL),
+      // _C4x[205]
+      real(-177229LL<<20),real(0xb18730000LL),real(0x491cf6cbc520f1LL),
+      // _C4x[206]
+      real(0xd4e0000LL),real(0x7c72a9866ac5bLL),
+      // _C4x[207]
+      real(-0x1e480000LL),real(-2280LL<<20),real(-0x312b80000LL),
+      real(-85595LL<<20),real(-0xbe2a280000LL),real(-0xabe12eLL<<20),
+      real(-0x1bb208a980000LL),real(0x43aa3de3fLL<<20),
+      real(-0x3404792da080000LL),real(0x168a78c6f8cLL<<20),
+      real(-0x68406e983e780000LL),reale(5560LL,0x170a6259LL<<20),
+      reale(-13901LL,0xc6660a2180000LL),reale(26517LL,0x5a318646LL<<20),
+      reale(-38451LL,0xd6d1ca1a80000LL),reale(40711LL,0xef5e1af3LL<<20),
+      reale(-26785LL,0xd50c31a380000LL),reale(7700LL,0x72bfb1ba98000LL),
+      reale(0x14a6bc4LL,0x9b0737e6b33fdLL),
+      // _C4x[208]
+      real(-1786LL<<24),real(-185250LL<<20),real(-0x18668cLL<<20),
+      real(-0x14cc9c6LL<<20),real(-0x323a0eb8LL<<20),real(0x72034e536LL<<20),
+      real(-0x50a5b1f364LL<<20),real(0x1fc80a59612LL<<20),
+      reale(-2109LL,0x8ef2603LL<<24),reale(6191LL,0x3c40258eLL<<20),
+      reale(-13345LL,0xc8b3e0c4LL<<20),reale(21384LL,0xf627f06aLL<<20),
+      reale(-25320LL,0x349d8318LL<<20),reale(21525LL,0xd9c7d366LL<<20),
+      reale(-12381LL,0xc32fbbecLL<<20),reale(4285LL,0x77832b42LL<<20),
+      real(-0x29d9aac7ec250000LL),reale(0x6e23ecLL,0x33ad12a23bbffLL),
+      // _C4x[209]
+      real(-0xfec42280000LL),real(-0xcdf9a71LL<<20),real(-0x1d4c8ca4780000LL),
+      real(0x3e336d9db6LL<<20),real(-0x28c1ec22f9c80000LL),
+      reale(3762LL,0xdc36d29dLL<<20),reale(-14050LL,0x6323bbe80000LL),
+      reale(36325LL,0x8201c224LL<<20),reale(-66630LL,0x3d526fa980000LL),
+      reale(85703LL,0xfd7eda2bLL<<20),reale(-71811LL,0x4c937c0480000LL),
+      reale(27704LL,0xd8be4892LL<<20),reale(15098LL,0xc34d8af80000LL),
+      reale(-29449LL,0xc84d0b39LL<<20),reale(18689LL,0x65a6b58a80000LL),
+      reale(-4755LL,0xcf6a7c02c8000LL),reale(0x14a6bc4LL,0x9b0737e6b33fdLL),
+      // _C4x[210]
+      real(-0x449768678LL<<20),real(0x88f54af434LL<<20),
+      real(-0x539fb48063LL<<24),reale(7105LL,0xb995afacLL<<20),
+      reale(-24000LL,0x547ebb18LL<<20),reale(54661LL,0x26ae4964LL<<20),
+      reale(-84323LL,0xfcd087eLL<<24),reale(82245LL,0x3cac3bdcLL<<20),
+      reale(-34605LL,0xaa152aa8LL<<20),reale(-26938LL,0xf8d90194LL<<20),
+      reale(54122LL,0x9f886dfLL<<24),reale(-38796LL,0xa25c150cLL<<20),
+      reale(13349LL,0x83391c38LL<<20),real(-0x58411cd0f3cLL<<20),
+      real(-0xd052410afde0000LL),reale(0x14a6bc4LL,0x9b0737e6b33fdLL),
+      // _C4x[211]
+      reale(-2322LL,0x2b20b06180000LL),reale(11407LL,0x435cd442LL<<20),
+      reale(-34997LL,0x40296c3280000LL),reale(70236LL,0xb47417c7LL<<20),
+      reale(-89751LL,0xaea2de1380000LL),reale(59647LL,0x7ee0032cLL<<20),
+      reale(10736LL,0xf4ed55a480000LL),reale(-61424LL,0x2a22c811LL<<20),
+      reale(52845LL,0xa6156a8580000LL),reale(-15061LL,0x5525d816LL<<20),
+      reale(-4429LL,0xec2fec5680000LL),real(0x7ac3d0f14dbLL<<20),
+      real(0x70761ded2b780000LL),real(-0x3854598234228000LL),
+      reale(0x14a6bc4LL,0x9b0737e6b33fdLL),
+      // _C4x[212]
+      reale(-45940LL,0x24dbede8LL<<20),reale(81202LL,0xab78046eLL<<20),
+      reale(-84012LL,0x416f614cLL<<20),reale(28155LL,0x2c1be7aLL<<20),
+      reale(46736LL,0xfe25c5fLL<<24),reale(-68203LL,0x7452da6LL<<20),
+      reale(29667LL,0x5b15eb94LL<<20),reale(5608LL,0x4d3a29b2LL<<20),
+      reale(-4402LL,0x5668a1f8LL<<20),reale(-6764LL,0x13320a5eLL<<20),
+      reale(6284LL,0xed7a38dcLL<<20),real(-0x63dfacb5896LL<<20),
+      real(0x21519ecdd470000LL),reale(0x14a6bc4LL,0x9b0737e6b33fdLL),
+      // _C4x[213]
+      reale(-70229LL,0xa07f0ae380000LL),reale(-3666LL,0xc491e03dLL<<20),
+      reale(67162LL,0xf21f0fbe80000LL),reale(-56078LL,0x8af680a4LL<<20),
+      reale(5918LL,0xe3bb81a980000LL),reale(10294LL,0xb5678d8bLL<<20),
+      reale(5723LL,0x46912f8480000LL),reale(-10994LL,0x9023e3d2LL<<20),
+      reale(2675LL,0xc09c102f80000LL),real(0x3a39e82b059LL<<20),
+      real(0xb502c3128a80000LL),real(-0x1358f80d9c038000LL),
+      reale(0x14a6bc4LL,0x9b0737e6b33fdLL),
+      // _C4x[214]
+      reale(73082LL,0x4e564b9LL<<24),reale(-36373LL,0x7f41b758LL<<20),
+      reale(-8447LL,0xc935334LL<<24),reale(3801LL,0xf6d72828LL<<20),
+      reale(13381LL,0x1077fefLL<<24),reale(-7346LL,0x22839078LL<<20),
+      real(-0x6256df74a6LL<<24),real(-0x25f5d15e8b8LL<<20),
+      reale(2675LL,0x8c635e5LL<<24),real(-0x44947d61c68LL<<20),
+      real(0x4cdddf4aa2c0000LL),reale(0x14a6bc4LL,0x9b0737e6b33fdLL),
+      // _C4x[215]
+      reale(-12599LL,0xef10737480000LL),reale(-5706LL,0x74b78194LL<<20),
+      reale(14434LL,0xee01835380000LL),real(-0x53c43a7b401LL<<20),
+      real(-0x61ad28bb29d80000LL),reale(-3832LL,0x8df1c64aLL<<20),
+      reale(2686LL,0x31eaa90180000LL),real(0x3be070e5d5LL<<20),
+      real(-0x33650f7a6f80000LL),real(-0x7fc3df35f858000LL),
+      reale(0x14a6bc4LL,0x9b0737e6b33fdLL),
+      // _C4x[216]
+      reale(10651LL,0x8768b13LL<<24),reale(2483LL,0x450654eeLL<<20),
+      real(0x5c595ba5184LL<<20),reale(-5107LL,0x5014808aLL<<20),
+      real(0x316556e0b98LL<<20),real(0xa4c5f0e846LL<<20),
+      real(0x4adc873ac2cLL<<20),real(-0x2d0002ebf1eLL<<20),
+      real(0x4cd03e8801b0000LL),reale(0x14a6bc4LL,0x9b0737e6b33fdLL),
+      // _C4x[217]
+      reale(4708LL,0xb1e8552280000LL),reale(-3968LL,0xd2254fedLL<<20),
+      real(-0x2552f5e566080000LL),real(-0x46718ec5982LL<<20),
+      real(0x6fe7320794c80000LL),real(-0xee4b32a131LL<<20),
+      real(-0x3f5905d6b680000LL),real(-0x392f1a561e88000LL),
+      reale(0x14a6bc4LL,0x9b0737e6b33fdLL),
+      // _C4x[218]
+      real(-0x1e186c22038LL<<20),reale(-2450LL,0x46146d24LL<<20),
+      real(0x4d9b33e84bLL<<24),real(0x5381480dfcLL<<20),
+      real(0x24355d37098LL<<20),real(-0x1df4fe903ecLL<<20),
+      real(0x42edd4687ca0000LL),reale(0x14a6bc4LL,0x9b0737e6b33fdLL),
+      // _C4x[219]
+      real(0x14eee8a775280000LL),real(-0x13e3b5a8a36LL<<20),
+      real(0x454e86f699180000LL),real(-0x12a27ad79ebLL<<20),
+      real(-0x2a8afba4bf80000LL),real(-0x1a278f54ba58000LL),
+      reale(0x14a6bc4LL,0x9b0737e6b33fdLL),
+      // _C4x[220]
+      real(0x61ad926cf8LL<<20),real(-0x408c282a2LL<<20),
+      real(0x1bc97c585cLL<<20),real(-0x1dcf828996LL<<20),
+      real(0x517eabcb370000LL),reale(0x1e09ccLL,0xe17edcf27917LL),
+      // _C4x[221]
+      real(0x2afbd497b3080000LL),real(-0x115bb8ed6d9LL<<20),
+      real(-0x171a49d86a80000LL),real(-0xb7278b5afc8000LL),
+      reale(0x14a6bc4LL,0x9b0737e6b33fdLL),
+      // _C4x[222]
+      real(0x5e11584LL<<24),real(-0x7ae8f52LL<<24),real(0x18b06bafLL<<20),
+      reale(45019LL,0xaf6c96bc5ad9dLL),
+      // _C4x[223]
+      real(-48841LL<<20),real(-0x5237d0000LL),real(0x19892cc90d5217fLL),
+      // _C4x[224]
+      real(0x1cbe0000LL),real(0xf744df0e6c69LL),
+      // _C4x[225]
+      real(133LL<<24),real(15675LL<<20),real(155078LL<<20),
+      real(0x255a91LL<<20),real(0x6998a3cLL<<20),real(-0x11c570399LL<<20),
+      real(0xf255cbcb2LL<<20),real(-0x753ac8aa43LL<<20),
+      real(0x262569ee428LL<<20),reale(-2315LL,0xcce58993LL<<20),
+      reale(6672LL,0x1ba60f9eLL<<20),reale(-14970LL,0x86e40ae9LL<<20),
+      reale(26346LL,0x45cace14LL<<20),reale(-36033LL,0x9904fcbfLL<<20),
+      reale(36664LL,0x8cb78e8aLL<<20),reale(-23571LL,0xeeae9215LL<<20),
+      reale(6696LL,0xabcf39720000LL),reale(0x16d33beLL,0x5a813dc916f5bLL),
+      // _C4x[226]
+      real(0xfd374LL<<20),real(0xec45e8LL<<20),real(0x273df7dcLL<<20),
+      real(-0x62a0474fLL<<24),real(0x4dcbe47944LL<<20),
+      real(-0x227b761e3c8LL<<20),reale(2600LL,0x153d35acLL<<20),
+      reale(-8793LL,0x286c976LL<<24),reale(22203LL,0x5eab8b14LL<<20),
+      reale(-42669LL,0xccca9a88LL<<20),reale(62615LL,0x2adb577cLL<<20),
+      reale(-69318LL,0x88b7c3bLL<<24),reale(56036LL,0xcf17f8e4LL<<20),
+      reale(-31066LL,0x7860b0d8LL<<20),reale(10475LL,0x95eb4d4cLL<<20),
+      real(-0x6470cd13038c0000LL),reale(0x16d33beLL,0x5a813dc916f5bLL),
+      // _C4x[227]
+      real(0x83f3fa8cLL<<20),real(-0x1374d9c49eLL<<20),
+      real(0xe49b68b678LL<<20),real(-0x5d5e50a4b72LL<<20),
+      reale(6402LL,0x71afd664LL<<20),reale(-19348LL,0xea14f2baLL<<20),
+      reale(42585LL,0xebe6545LL<<24),reale(-68667LL,0x703137e6LL<<20),
+      reale(79038LL,0xd1606a3cLL<<20),reale(-58931LL,0x700ae612LL<<20),
+      reale(17031LL,0xb2cb5228LL<<20),reale(18189LL,0x913f3eLL<<20),
+      reale(-27349LL,0x9d0f0614LL<<20),reale(16435LL,0xd526256aLL<<20),
+      reale(-4107LL,0x18224be0c0000LL),reale(0x16d33beLL,0x5a813dc916f5bLL),
+      // _C4x[228]
+      real(0x1f9ffe8656cLL<<20),reale(-3063LL,0x94b5dedLL<<24),
+      reale(11988LL,0xe264f34LL<<20),reale(-32440LL,0xf0983358LL<<20),
+      reale(61980LL,0xc3d38ffcLL<<20),reale(-81949LL,0x673ab9eLL<<24),
+      reale(67313LL,0xfb9bddc4LL<<20),reale(-16749LL,0xcbdb6868LL<<20),
+      reale(-34833LL,0xd656e8cLL<<20),reale(50577LL,0xf8434fLL<<24),
+      reale(-32451LL,0xf163f854LL<<20),reale(10213LL,0xef301578LL<<20),
+      real(-0x352a1ac4ee4LL<<20),real(-0xcb30b375e9c0000LL),
+      reale(0x16d33beLL,0x5a813dc916f5bLL),
+      // _C4x[229]
+      reale(18981LL,0x5e862c64LL<<20),reale(-46079LL,0x5efb0881LL<<20),
+      reale(76015LL,0x863d577eLL<<20),reale(-79653LL,0x2dea23bbLL<<20),
+      reale(36586LL,0x8284d598LL<<20),reale(28474LL,0x3c216875LL<<20),
+      reale(-61327LL,0xb287efb2LL<<20),reale(42595LL,0xdff09bafLL<<20),
+      reale(-8327LL,0x1c2b6eccLL<<20),reale(-5140LL,0x12845269LL<<20),
+      real(0x508a8bb3be6LL<<20),real(0x72b007891a3LL<<20),
+      real(-0x33009c87a9620000LL),reale(0x16d33beLL,0x5a813dc916f5bLL),
+      // _C4x[230]
+      reale(82722LL,0xe9e9d128LL<<20),reale(-64702LL,0xc3657b3LL<<24),
+      real(0xd88117da38LL<<20),reale(58506LL,0xbc1f3dcLL<<24),
+      reale(-58414LL,0x316e6548LL<<20),reale(16792LL,0x62b2905LL<<24),
+      reale(8555LL,0x57b78e58LL<<20),reale(-2318LL,0x5fa80eeLL<<24),
+      reale(-7195LL,0xfa5c7168LL<<20),reale(5493LL,0x7232557LL<<24),
+      real(-0x4dba35cd588LL<<20),real(0x6c0ce28f480000LL),
+      reale(0x16d33beLL,0x5a813dc916f5bLL),
+      // _C4x[231]
+      reale(-4542LL,0x7bb81428LL<<20),reale(9880LL,0x570203e4LL<<20),
+      reale(-5570LL,0x1d13282LL<<24),real(-0x2717ac11fa4LL<<20),
+      real(0x48f10632c18LL<<20),real(0x49be65276d4LL<<20),
+      real(-0x56ac461dbfLL<<24),real(0xd204c29b4cLL<<20),
+      real(0x8778499408LL<<20),real(0x254e1d61c4LL<<20),
+      real(-0x2a036589e880000LL),reale(0x342bf6LL,0x9f3708d39590dLL),
+      // _C4x[232]
+      reale(-16526LL,0x6c5d10b8LL<<20),reale(-12874LL,0x88ee71cLL<<24),
+      real(-0x5e7810d2938LL<<20),reale(13789LL,0x243b975LL<<24),
+      reale(-4638LL,0x964d9ad8LL<<20),real(-0x7fb9ba5572LL<<24),
+      real(-0x4173ffec718LL<<20),reale(2541LL,0x1cb9027LL<<24),
+      real(-0x39666317308LL<<20),real(0x349e63a5ac80000LL),
+      reale(0x16d33beLL,0x5a813dc916f5bLL),
+      // _C4x[233]
+      reale(-11085LL,0x8fea54b8LL<<20),reale(11858LL,0x4428ce71LL<<20),
+      real(0x4a8bfaee90aLL<<20),real(-0x307c82cee9dLL<<20),
+      reale(-4104LL,0xd1c95e5cLL<<20),reale(2140LL,0x80faa1d5LL<<20),
+      real(0xcfb44449aeLL<<20),real(-0xca4a87f39LL<<20),
+      real(-0x7f8004b3e7a0000LL),reale(0x16d33beLL,0x5a813dc916f5bLL),
+      // _C4x[234]
+      reale(3432LL,0x4e74f9d4LL<<20),reale(2930LL,0x87085408LL<<20),
+      reale(-4578LL,0x70547bcLL<<20),real(0x81973624bLL<<24),
+      real(0x32ee2212a4LL<<20),real(0x4b5e677d958LL<<20),
+      real(-0x275d5b5d774LL<<20),real(0x3a718439ef40000LL),
+      reale(0x16d33beLL,0x5a813dc916f5bLL),
+      // _C4x[235]
+      reale(-2657LL,0xdeecdcecLL<<20),real(-0x3538c298b86LL<<20),
+      real(-0x5912f177eb8LL<<20),real(0x640b15f2316LL<<20),
+      real(-0x6d9a831e5cLL<<20),real(-0x31ad449d4eLL<<20),
+      real(-0x3c512000d040000LL),reale(0x16d33beLL,0x5a813dc916f5bLL),
+      // _C4x[236]
+      reale(-2586LL,0xd6a2e6ecLL<<20),real(0x34bcb74007LL<<24),
+      real(0x6e07e246f4LL<<20),real(0x25e0133cb38LL<<20),
+      real(-0x1b065081a04LL<<20),real(0x357f8d3e3c40000LL),
+      reale(0x16d33beLL,0x5a813dc916f5bLL),
+      // _C4x[237]
+      real(-0x1c8e0b16cfcLL<<20),real(0x422ec2346b3LL<<20),
+      real(-0xcfd2a114feLL<<20),real(-0x28865c39efLL<<20),
+      real(-0x1da3031e4b60000LL),reale(0x16d33beLL,0x5a813dc916f5bLL),
+      // _C4x[238]
+      real(0x2b4d78f6LL<<24),real(0x2e8b64984LL<<24),real(-0x2b39cf62eLL<<24),
+      real(0x699f0055eLL<<20),reale(0x342bf6LL,0x9f3708d39590dLL),
+      // _C4x[239]
+      real(-0x1092926LL<<24),real(-0x1f7f63LL<<24),real(-0x11a4d3aLL<<20),
+      reale(7108LL,0x5f112546294adLL),
+      // _C4x[240]
+      real(-9802LL<<24),real(28314LL<<20),real(0x4082f7e0f93b2fLL),
+      // _C4x[241]
+      real(-0x4f040000LL),real(0x10edb70f760db7LL),
+      // _C4x[242]
+      real(-31464LL<<20),real(-33649LL<<24),real(-0x1944cb8LL<<20),
+      real(0x4a592f6LL<<24),real(-0x459291388LL<<20),real(0x25287649dLL<<24),
+      real(-0xd6fc633d58LL<<20),real(0x39106c83a4LL<<24),
+      reale(-2978LL,0x49e187d8LL<<20),reale(7656LL,0xf8e0a2bLL<<24),
+      reale(-15740LL,0xab15ce08LL<<20),reale(25923LL,0x9aeb252LL<<24),
+      reale(-33769LL,0x17e1e738LL<<20),reale(33232LL,0xe46ee39LL<<24),
+      reale(-20952LL,0xd4296568LL<<20),reale(5892LL,0x84545b7ac0000LL),
+      reale(0x18ffbb8LL,0x19fb43ab7aab9LL),
+      // _C4x[243]
+      real(-0xa2feacLL<<24),real(0x1c179372LL<<24),real(-0x1874d0578LL<<24),
+      real(0xc0be8a7beLL<<24),real(-0x3f9d6493c4LL<<24),
+      reale(3896LL,0x4997f2aLL<<24),reale(-11281LL,0x64c37bLL<<28),
+      reale(25274LL,0x3bbdef6LL<<24),reale(-44241LL,0xb75fe24LL<<24),
+      reale(60354LL,0xf508c62LL<<24),reale(-63153LL,0xc2460d8LL<<24),
+      reale(48923LL,0x7ed4caeLL<<24),reale(-26289LL,0xfd6410cLL<<24),
+      reale(8669LL,0x733e51aLL<<24),real(-0x51d72bd69a980000LL),
+      reale(0x18ffbb8LL,0x19fb43ab7aab9LL),
+      // _C4x[244]
+      real(-0x4dd7751f98LL<<20),real(0x238aa1d5ceLL<<24),
+      reale(-2754LL,0xce58be58LL<<20),reale(9526LL,0xd688791LL<<24),
+      reale(-24464LL,0xdf73ed48LL<<20),reale(47309LL,0x7148c34LL<<24),
+      reale(-68505LL,0xbf6a8738LL<<20),reale(71563LL,0xf1b5657LL<<24),
+      reale(-47679LL,0xf11e628LL<<20),reale(8918LL,0xa5b789aLL<<24),
+      reale(19900LL,0x542c2418LL<<20),reale(-25293LL,0xbf6dd9dLL<<24),
+      reale(14565LL,0x9bc59b08LL<<20),reale(-3590LL,0x4e483233c0000LL),
+      reale(0x18ffbb8LL,0x19fb43ab7aab9LL),
+      // _C4x[245]
+      reale(-5608LL,0x991738LL<<28),reale(17587LL,0xf22611LL<<28),
+      reale(-40025LL,0xa10c4cLL<<28),reale(66142LL,0x876083LL<<28),
+      reale(-76303LL,954917LL<<32),reale(52531LL,0x8deb4dLL<<28),
+      reale(-2629LL,0x8e7914LL<<28),reale(-39201LL,0x38bf3fLL<<28),
+      reale(46365LL,0x54b068LL<<28),reale(-27150LL,0x55ed29LL<<28),
+      reale(7864LL,0x5e881cLL<<28),real(-0x1da92f225LL<<28),
+      real(-0xc0441aac22LL<<20),reale(0x18ffbb8LL,0x19fb43ab7aab9LL),
+      // _C4x[246]
+      reale(-54976LL,0xf8ad2dfLL<<24),reale(76586LL,0x4c1b29aLL<<24),
+      reale(-65944LL,0xd8907c5LL<<24),reale(16034LL,0xc1436c8LL<<24),
+      reale(40019LL,0x76688bLL<<24),reale(-57817LL,0x54999f6LL<<24),
+      reale(33374LL,0xea6cb71LL<<24),reale(-3539LL,0xfaa2c64LL<<24),
+      reale(-5248LL,0x50c1eb7LL<<24),real(0x2c6b73ee52LL<<24),
+      real(0x722433189dLL<<24),real(-0x2e4dc1cba3080000LL),
+      reale(0x18ffbb8LL,0x19fb43ab7aab9LL),
+      // _C4x[247]
+      reale(-42752LL,0xfd09668LL<<24),reale(-21693LL,0x75aae5cLL<<24),
+      reale(62310LL,0xfec662LL<<28),reale(-46930LL,0xc9a1864LL<<24),
+      reale(7047LL,0xf651fd8LL<<24),reale(9444LL,0xbbaab2cLL<<24),
+      real(-0x1703b736fLL<<28),reale(-7301LL,0x7c7a434LL<<24),
+      reale(4777LL,0xce4e748LL<<24),real(-0x3caad8bf04LL<<24),
+      real(-0xa540e2085LL<<20),reale(0x18ffbb8LL,0x19fb43ab7aab9LL),
+      // _C4x[248]
+      reale(63004LL,0x820dc15LL<<24),reale(-23254LL,0x2b51348LL<<24),
+      reale(-10034LL,0x6d8993bLL<<24),reale(4968LL,0xd50d56LL<<24),
+      reale(9826LL,0xfc2da81LL<<24),reale(-8261LL,0x55baaa4LL<<24),
+      real(0x233dd63227LL<<24),real(0x37fd376f72LL<<24),
+      real(0x141eaf7a6dLL<<24),real(-0x115cb8e6aa880000LL),
+      reale(0x18ffbb8LL,0x19fb43ab7aab9LL),
+      // _C4x[249]
+      reale(-12506LL,97541LL<<32),reale(-6195LL,0x2e1145LL<<28),
+      reale(12920LL,0x2b7254LL<<28),reale(-2329LL,577767LL<<28),
+      reale(-2122LL,0x282168LL<<28),real(-0x58b5939bfLL<<28),
+      reale(2380LL,0xeae3dcLL<<28),real(-0x30188e75dLL<<28),
+      real(0x230ec3334eLL<<20),reale(0x18ffbb8LL,0x19fb43ab7aab9LL),
+      // _C4x[250]
+      reale(8515LL,0x37f5b918LL<<20),reale(2727LL,0x3380253LL<<24),
+      real(0xb19d71edc8LL<<20),reale(-4155LL,0x995a0c2LL<<24),
+      real(0x66bdc071d78LL<<20),real(0x12a53914f1LL<<24),
+      real(0x167e4eca28LL<<20),real(-0x7d57ec14bd40000LL),
+      reale(0x18ffbb8LL,0x19fb43ab7aab9LL),
+      // _C4x[251]
+      reale(4082LL,0x67f98f4LL<<24),reale(-3844LL,0x2c9ab0aLL<<24),
+      real(-0x159f6b3e48LL<<24),real(-0x5e777d4baLL<<24),
+      real(0x4a85b6d5fcLL<<24),real(-0x22657e61deLL<<24),
+      real(0x2c64fe303880000LL),reale(0x18ffbb8LL,0x19fb43ab7aab9LL),
+      // _C4x[252]
+      real(-0x34c400805d8LL<<20),real(-0x67cc1b5366LL<<24),
+      real(0x57398ecb018LL<<20),real(-0xc95bb863LL<<24),
+      real(-0x22721e20f8LL<<20),real(-0x3de76ba4f240000LL),
+      reale(0x18ffbb8LL,0x19fb43ab7aab9LL),
+      // _C4x[253]
+      real(0x1eafb2d2LL<<32),real(0x6001f8fcLL<<28),real(0x26e8d367LL<<32),
+      real(-0x1850eab0cLL<<28),real(0x2ad9fbf9a8LL<<20),
+      reale(0x18ffbb8LL,0x19fb43ab7aab9LL),
+      // _C4x[254]
+      real(0x3dc8d3e3fcLL<<24),real(-0x852738cf8LL<<24),
+      real(-0x23d2c912cLL<<24),real(-0x200440db02LL<<20),
+      reale(0x18ffbb8LL,0x19fb43ab7aab9LL),
+      // _C4x[255]
+      real(0xb66a2aLL<<28),real(-0x94166dLL<<28),real(0x1456e5bcLL<<20),
+      reale(54497LL,0x83837319e73d9LL),
+      // _C4x[256]
+      real(-306388LL<<24),real(-0x30085eLL<<20),real(0x477bca00497fe9bfLL),
+      // _C4x[257]
+      real(4888LL<<20),real(0xe6baee73ea363LL),
+      // _C4x[258]
+      real(397670LL<<24),real(-0x135e647LL<<24),real(0x13bdbefcLL<<24),
+      real(-0xb8948681LL<<24),real(0x49699e392LL<<24),
+      real(-0x1590a013fbLL<<24),real(0x4e6b0048a8LL<<24),
+      reale(-3632LL,0xa5068cbLL<<24),reale(8507LL,0xbf327beLL<<24),
+      reale(-16265LL,0x3097f51LL<<24),reale(25338LL,0xdcb7a54LL<<24),
+      reale(-31674LL,0x6c1a717LL<<24),reale(30296LL,0x77349eaLL<<24),
+      reale(-18784LL,0x30f8f9dLL<<24),reale(5237LL,0xcaf5a6a6LL<<20),
+      reale(0x1b2c3b1LL,0xd975498dde617LL),
+      // _C4x[259]
+      real(0x283beee4LL<<24),real(-0x15cef585LL<<28),real(0x7f93d56fcLL<<24),
+      real(-0x22159bbf18LL<<24),real(0x6f496a9d94LL<<24),
+      reale(-4556LL,0x84dbd2LL<<28),reale(9255LL,0xbbd2bacLL<<24),
+      reale(-14990LL,0xbdd5558LL<<24),reale(19228LL,0x8e2a44LL<<24),
+      reale(-19176LL,0xa51429LL<<28),reale(14321LL,0xf73025cLL<<24),
+      reale(-7492LL,0x82a3dc8LL<<24),reale(2423LL,0xb79dcf4LL<<24),
+      real(-0x1693a2298bcLL<<20),reale(0x90ebe5LL,0xf32718849f75dLL),
+      // _C4x[260]
+      real(0x4688633f7LL<<28),reale(-4402LL,0x8011c3cLL<<24),
+      reale(12915LL,0x73e9b88LL<<24),reale(-29095LL,0xd406fd4LL<<24),
+      reale(50530LL,0xd903faLL<<28),reale(-66730LL,0x7def36cLL<<24),
+      reale(63904LL,0x71b03b8LL<<24),reale(-38026LL,0x5c6c704LL<<24),
+      reale(2775LL,0xfbabfdLL<<28),reale(20705LL,0xcf7ea9cLL<<24),
+      reale(-23356LL,0x2de0be8LL<<24),reale(12999LL,0xf01fe34LL<<24),
+      reale(-3170LL,0x860a3fcLL<<24),reale(0x1b2c3b1LL,0xd975498dde617LL),
+      // _C4x[261]
+      reale(23399LL,0xe6f798cLL<<24),reale(-46216LL,0x5234048LL<<24),
+      reale(67437LL,0x33caec4LL<<24),reale(-68613LL,0x20de4aLL<<28),
+      reale(38802LL,0xf902d7cLL<<24),reale(8195LL,341240LL<<24),
+      reale(-41127LL,0x66c3ab4LL<<24),reale(42002LL,0x30cc65LL<<28),
+      reale(-22752LL,0x6405b6cLL<<24),reale(6086LL,0x174ada8LL<<24),
+      real(-0xdc5682b5cLL<<24),real(-0xb3064a33acLL<<20),
+      reale(0x1b2c3b1LL,0xd975498dde617LL),
+      // _C4x[262]
+      reale(72847LL,0x271a51cLL<<24),reale(-50731LL,0x7c7ae56LL<<24),
+      real(-0x44b35c4c5LL<<28),reale(46646LL,0x70a160aLL<<24),
+      reale(-52486LL,0x5f31e44LL<<24),reale(25457LL,0x9e6c03eLL<<24),
+      real(-0xd3d3e2228LL<<24),reale(-5016LL,0xcfe89f2LL<<24),
+      real(0xe92a0cb6cLL<<24),real(0x6fd8056026LL<<24),
+      real(-0x2a2c8f04c9cLL<<20),reale(0x1b2c3b1LL,0xd975498dde617LL),
+      // _C4x[263]
+      reale(-37198LL,0xc2bcf24LL<<24),reale(60620LL,0xbda83aLL<<28),
+      reale(-35565LL,0x113931cLL<<24),real(0x64fe25038LL<<24),
+      reale(9080LL,0x9fe8194LL<<24),real(0x5138a8f5dLL<<28),
+      reale(-7185LL,0x3ef178cLL<<24),reale(4144LL,0x2d30168LL<<24),
+      real(-0x2f70b26dfcLL<<24),real(-0x15370842ccLL<<20),
+      reale(0x1b2c3b1LL,0xd975498dde617LL),
+      // _C4x[264]
+      reale(-10358LL,0x7c48caLL<<28),reale(-12253LL,0x39b98ccLL<<24),
+      real(0x62ed8afd78LL<<24),reale(10573LL,0x9351d24LL<<24),
+      reale(-6815LL,0x900e65LL<<28),real(-0x61450ee84LL<<24),
+      real(0x3263d35f28LL<<24),real(0x16e96dd5d4LL<<24),
+      real(-0x10590be4b4LL<<24),reale(0x1b2c3b1LL,0xd975498dde617LL),
+      // _C4x[265]
+      reale(-9658LL,0xa4c7364LL<<24),reale(11274LL,0x6c5b0c8LL<<24),
+      real(-0x1f6e85a614LL<<24),real(-0x79d1375fdLL<<28),
+      real(-0x6b072a870cLL<<24),reale(2209LL,0x198a998LL<<24),
+      real(-0x285bc12c84LL<<24),real(0x163cbe2fecLL<<20),
+      reale(0x1b2c3b1LL,0xd975498dde617LL),
+      // _C4x[266]
+      reale(3415LL,0xc912716LL<<24),real(0x45e58b8965LL<<24),
+      reale(-4037LL,0x3f84be4LL<<24),real(0x4b8d3c4323LL<<24),
+      real(0x15bac0b1b2LL<<24),real(0x3522c8ca1LL<<24),
+      real(-0x7a03567462LL<<20),reale(0x1b2c3b1LL,0xd975498dde617LL),
+      // _C4x[267]
+      reale(-3027LL,0xe45b0dLL<<28),real(-0x292135aecLL<<28),
+      real(-0xf7b99e85LL<<28),real(0x48a6e1d2aLL<<28),real(-0x1e0b679f7LL<<28),
+      real(0x2190668fdLL<<24),reale(0x1b2c3b1LL,0xd975498dde617LL),
+      // _C4x[268]
+      real(-0x71f21ba04LL<<28),real(0x4a52d91cdLL<<28),real(0x3a8875feLL<<28),
+      real(-0x13186811LL<<28),real(-0x3e64cd5eLL<<28),
+      reale(0x1b2c3b1LL,0xd975498dde617LL),
+      // _C4x[269]
+      real(0x12984317LL<<28),real(0xd1e58b72LL<<28),real(-0x747d5143LL<<28),
+      real(0xb73914e9LL<<24),reale(0x90ebe5LL,0xf32718849f75dLL),
+      // _C4x[270]
+      real(-0x59584b5LL<<28),real(-0x24710be8LL<<24),real(-0x294ee807LL<<24),
+      reale(0x217183LL,0xd5a68f81111b3LL),
+      // _C4x[271]
+      real(-62273LL<<28),real(123651LL<<24),real(0x19e65bbd524850fbLL),
+      // _C4x[272]
+      real(-2LL<<32),real(0x2f0618f20f09a7LL),
+      // _C4x[273]
+      real(-0x58be73cLL<<24),real(0x38517abLL<<28),real(-0x186e02be4LL<<24),
+      real(0x7dd9a1868LL<<24),real(-0x1f88b6950cLL<<24),
+      real(0x6557140f2LL<<28),reale(-4257LL,0xb6b584cLL<<24),
+      reale(9227LL,0xea319d8LL<<24),reale(-16595LL,0xf151724LL<<24),
+      reale(24654LL,470841LL<<28),reale(-29746LL,0x611227cLL<<24),
+      reale(27762LL,0x9455748LL<<24),reale(-16967LL,0xfaaf554LL<<24),
+      reale(4695LL,0xf3c1c18cLL<<20),reale(0x1d58babLL,0x98ef4f7042175LL),
+      // _C4x[274]
+      real(-0x8b26687cLL<<28),real(0x290fd9f1bLL<<28),
+      reale(-2388LL,0x36721eLL<<28),reale(6865LL,0x9baec9LL<<28),
+      reale(-15870LL,0x905358LL<<28),reale(29710LL,0x8c2607LL<<28),
+      reale(-45044LL,486674LL<<28),reale(54812LL,0x6d26b5LL<<28),
+      reale(-52442LL,0xa7f12cLL<<28),reale(37945LL,0xc3d2b3LL<<28),
+      reale(-19390LL,0x431186LL<<28),reale(6169LL,0x764be1LL<<28),
+      real(-0x38ce4db2db8LL<<20),reale(0x1d58babLL,0x98ef4f7042175LL),
+      // _C4x[275]
+      reale(-6367LL,0x25f6504LL<<24),reale(16360LL,0x4dc3558LL<<24),
+      reale(-33061LL,0x4ecdf6cLL<<24),reale(52401LL,0x66e3beLL<<28),
+      reale(-63841LL,0x71a1354LL<<24),reale(56445LL,0xe17ae68LL<<24),
+      reale(-29838LL,0x86065bcLL<<24),real(-0x7403de4e1LL<<28),
+      reale(20917LL,0x71e3ba4LL<<24),reale(-21570LL,0xb3f6b78LL<<24),
+      reale(11677LL,0xe90fa0cLL<<24),reale(-2824LL,0xeb954754LL<<20),
+      reale(0x1d58babLL,0x98ef4f7042175LL),
+      // _C4x[276]
+      reale(-50762LL,0x475c7cLL<<28),reale(66355LL,0x870afaLL<<28),
+      reale(-59859LL,723819LL<<32),reale(26575LL,0x21ae26LL<<28),
+      reale(16255LL,0x1d3fe4LL<<28),reale(-41403LL,0x212a72LL<<28),
+      reale(37768LL,0x572c58LL<<28),reale(-19111LL,0x7dd41eLL<<28),
+      reale(4727LL,0x6ab04cLL<<28),real(-0x2fa40096LL<<28),
+      real(-0xa540e2085LL<<24),reale(0x1d58babLL,0x98ef4f7042175LL),
+      // _C4x[277]
+      reale(-35541LL,0x7282c8cLL<<24),reale(-14633LL,0xccc30eLL<<28),
+      reale(49583LL,0x128b834LL<<24),reale(-46374LL,0xdd8a28LL<<24),
+      reale(18858LL,0x355fe5cLL<<24),real(0x7f3bc48c7LL<<28),
+      reale(-4604LL,0xc55c04LL<<24),real(-0x98d22ab48LL<<24),
+      real(0x6c7ad32e2cLL<<24),real(-0x268b90f95ccLL<<20),
+      reale(0x1d58babLL,0x98ef4f7042175LL),
+      // _C4x[278]
+      reale(55507LL,0xcfc518LL<<28),reale(-25285LL,0x16861fLL<<28),
+      reale(-4553LL,0x2efce2LL<<28),reale(8014LL,0xba4bfdLL<<28),
+      reale(2646LL,0x44360cLL<<28),reale(-6925LL,0x6f25abLL<<28),
+      reale(3590LL,0x29c576LL<<28),real(-0x251e627f7LL<<28),
+      real(-0x1c00154478LL<<20),reale(0x1d58babLL,0x98ef4f7042175LL),
+      // _C4x[279]
+      reale(-12156LL,0xce6fa6cLL<<24),real(-0x5e07316be8LL<<24),
+      reale(10690LL,0x8038384LL<<24),reale(-5461LL,0x41c7d1LL<<28),
+      real(-0x2348597ae4LL<<24),real(0x2bb84de008LL<<24),
+      real(0x18e3fd0234LL<<24),real(-0xf5e5d02854LL<<20),
+      reale(0x1d58babLL,0x98ef4f7042175LL),
+      // _C4x[280]
+      reale(9254LL,696682LL<<32),real(0x352756c5LL<<32),
+      real(-0x65e53404LL<<32),real(-0x788cc21dLL<<32),real(0x7f33e94eLL<<32),
+      real(-0x21eb1cefLL<<32),real(0xcd29b9b8LL<<24),
+      reale(0x1d58babLL,0x98ef4f7042175LL),
+      // _C4x[281]
+      real(0x79a6c5ac7LL<<28),reale(-3802LL,0xfd945cLL<<28),
+      real(0x346436151LL<<28),real(0x16fdc2aceLL<<28),real(0x4f28edfbLL<<28),
+      real(-0x75fcc3c53LL<<24),reale(0x1d58babLL,0x98ef4f7042175LL),
+      // _C4x[282]
+      real(-0x343e549fLL<<32),real(-0x18a69b51cLL<<28),real(0x460d48248LL<<28),
+      real(-0x1a3f4f9f4LL<<28),real(0x19281ba96LL<<24),
+      reale(0x1d58babLL,0x98ef4f7042175LL),
+      // _C4x[283]
+      real(0x3dee529e7LL<<28),real(0x6cec7402LL<<28),real(-0x473d793LL<<28),
+      real(-0x3e1be54e5LL<<24),reale(0x1d58babLL,0x98ef4f7042175LL),
+      // _C4x[284]
+      real(0x101ed8dLL<<32),real(-0x80a64a8LL<<28),real(0xb4b7414LL<<24),
+      reale(789029LL,0x386f296be7703LL),
+      // _C4x[285]
+      real(-71903LL<<28),real(-0x1ab3b9LL<<24),reale(5818LL,0x23b391cd899edLL),
+      // _C4x[286]
+      real(166LL<<24),real(0xb952c68e4fbe9LL),
+      // _C4x[287]
+      real(0x7f43c22LL<<28),real(-0x2c8eafab8LL<<24),real(0xc32b2bc7LL<<28),
+      real(-0x2b1186d468LL<<24),real(0x7d0edcd6cLL<<28),
+      reale(-4841LL,0x847e1e8LL<<24),reale(9826LL,0x8b1711LL<<28),
+      reale(-16768LL,0x7c50838LL<<24),reale(23911LL,0xeefeb6LL<<28),
+      reale(-27977LL,0x9a7e88LL<<24),reale(25559LL,0x333a5bLL<<28),
+      reale(-15424LL,0x58424d8LL<<24),reale(4241LL,0x81542abLL<<24),
+      reale(0x1f853a5LL,0x58695552a5cd3LL),
+      // _C4x[288]
+      real(0x3f93bd16eLL<<28),reale(-3247LL,0xcc82e4LL<<28),
+      reale(8406LL,0x10355aLL<<28),reale(-17843LL,401573LL<<32),
+      reale(31156LL,0xe11346LL<<28),reale(-44631LL,0xd0e1bcLL<<28),
+      reale(51879LL,0x441732LL<<28),reale(-47871LL,0x79b528LL<<28),
+      reale(33689LL,0x41ed1eLL<<28),reale(-16865LL,0x373094LL<<28),
+      reale(5288LL,0x1c410aLL<<28),real(-0x3032ec97c2LL<<24),
+      reale(0x1f853a5LL,0x58695552a5cd3LL),
+      // _C4x[289]
+      reale(19689LL,0x79235aLL<<28),reale(-36283LL,0x3a1c11LL<<28),
+      reale(53123LL,640072LL<<28),reale(-60235LL,0xc6787fLL<<28),
+      reale(49410LL,0x4cf536LL<<28),reale(-22944LL,0xc02aedLL<<28),
+      reale(-5332LL,0x64d224LL<<28),reale(20742LL,0x947f5bLL<<28),
+      reale(-19940LL,0x8ff712LL<<28),reale(10552LL,0x6681c9LL<<28),
+      reale(-2534LL,0x1d20d5eLL<<24),reale(0x1f853a5LL,0x58695552a5cd3LL),
+      // _C4x[290]
+      reale(63443LL,0x6de27aLL<<28),reale(-50758LL,552373LL<<32),
+      reale(16003LL,0x826826LL<<28),reale(22072LL,208508LL<<28),
+      reale(-40596LL,0x6563d2LL<<28),reale(33806LL,0x7a9da8LL<<28),
+      reale(-16096LL,0xcd217eLL<<28),reale(3680LL,0x3774d4LL<<28),
+      real(0x45a0ed2aLL<<28),real(-0x97dac1de2LL<<24),
+      reale(0x1f853a5LL,0x58695552a5cd3LL),
+      // _C4x[291]
+      reale(-24789LL,0x83cf4cLL<<28),reale(49876LL,0x7a32c28LL<<24),
+      reale(-40131LL,0x62c079LL<<28),reale(13469LL,0x2232af8LL<<24),
+      reale(3498LL,0x98bfa6LL<<28),reale(-4112LL,0x4c9f9c8LL<<24),
+      real(-0x1cbd94d2dLL<<28),real(0x68817a7898LL<<24),
+      real(-0x2359e35b9dLL<<24),reale(0x1f853a5LL,0x58695552a5cd3LL),
+      // _C4x[292]
+      reale(-16508LL,9905LL<<32),reale(-7427LL,479402LL<<32),
+      reale(6609LL,461219LL<<32),reale(3685LL,139036LL<<32),
+      reale(-6577LL,261781LL<<32),reale(3109LL,382350LL<<32),
+      real(-0x1d03ce79LL<<32),real(-0x200b2093LL<<28),
+      reale(0x1f853a5LL,0x58695552a5cd3LL),
+      // _C4x[293]
+      reale(-4076LL,862583LL<<32),reale(10359LL,0x71ed88LL<<28),
+      reale(-4246LL,570106LL<<32),real(-0x37200de48LL<<28),
+      real(0x24bde07dLL<<32),real(0x1a398c5e8LL<<28),real(-0xe70c22fdLL<<28),
+      reale(0x1f853a5LL,0x58695552a5cd3LL),
+      // _C4x[294]
+      real(0x6f9dc457LL<<32),real(-0x4d771554LL<<32),
+      reale(-2077LL,162049LL<<32),real(0x7498ad56LL<<32),
+      real(-0x1c8c8a55LL<<32),real(0x5e23549LL<<28),
+      reale(0x1f853a5LL,0x58695552a5cd3LL),
+      // _C4x[295]
+      reale(-3491LL,0x840908LL<<28),real(0x21172cd46LL<<28),
+      real(0x16feb6884LL<<28),real(0x64d1f5c2LL<<28),real(-0x7195fe17cLL<<24),
+      reale(0x1f853a5LL,0x58695552a5cd3LL),
+      // _C4x[296]
+      real(-0xaf809838LL<<28),real(0x16526bf3LL<<32),real(-0x7a5a5568LL<<28),
+      real(0x632768c8LL<<24),reale(0xa81be1LL,0xc8231c70e1ef1LL),
+      // _C4x[297]
+      real(0x8f014108LL<<28),real(0x90ae184LL<<28),real(-0x3d486a848LL<<24),
+      reale(0x1f853a5LL,0x58695552a5cd3LL),
+      // _C4x[298]
+      real(-46952LL<<28),real(58824LL<<24),real(0x148e6926290dbdd9LL),
+      // _C4x[299]
+      real(-27124LL<<24),real(0x5fa345ccc643905LL),
+      // _C4x[300]
+      real(-0x490f31dLL<<32),real(0x118ff5d2LL<<32),real(-0x37d9274fLL<<32),
+      reale(2382LL,900648LL<<32),reale(-5378LL,933983LL<<32),
+      reale(10315LL,284030LL<<32),reale(-16819LL,653869LL<<32),
+      reale(23142LL,90132LL<<32),reale(-26357LL,771163LL<<32),
+      reale(23629LL,791082LL<<32),reale(-14102LL,390441LL<<32),
+      reale(3855LL,0xe9ef6caLL<<24),reale(0x21b1b9fLL,0x17e35b3509831LL),
+      // _C4x[301]
+      real(-0x571bf678LL<<32),reale(3304LL,556556LL<<32),
+      reale(-6522LL,32202LL<<36),reale(10722LL,907188LL<<32),
+      reale(-14619LL,139704LL<<32),reale(16325LL,39196LL<<32),
+      reale(-14591LL,8133LL<<36),reale(10019LL,388548LL<<32),
+      reale(-4926LL,724968LL<<32),real(0x5f48012cLL<<32),
+      real(-0xdc5682b5cLL<<24),reale(0xb3b3dfLL,0xb2a11e67032bbLL),
+      // _C4x[302]
+      reale(-38752LL,80137LL<<32),reale(52907LL,0xfc9e8LL<<32),
+      reale(-56214LL,785799LL<<32),reale(42911LL,952654LL<<32),
+      reale(-17167LL,10533LL<<32),reale(-7921LL,806388LL<<32),
+      reale(20320LL,95267LL<<32),reale(-18462LL,706074LL<<32),
+      reale(9586LL,798401LL<<32),reale(-2290LL,0x45a3d6aLL<<24),
+      reale(0x21b1b9fLL,0x17e35b3509831LL),
+      // _C4x[303]
+      reale(-41807LL,35192LL<<36),reale(7070LL,18565LL<<36),
+      reale(26107LL,55418LL<<36),reale(-39104LL,55423LL<<36),
+      reale(30179LL,444LL<<36),reale(-13594LL,22617LL<<36),
+      reale(2866LL,40062LL<<36),real(0x94bb53LL<<36),real(-0x8b41da54LL<<28),
+      reale(0x21b1b9fLL,0x17e35b3509831LL),
+      // _C4x[304]
+      reale(48363LL,42681LL<<36),reale(-34139LL,63194LL<<36),
+      reale(9135LL,63227LL<<36),reale(4396LL,51388LL<<36),
+      reale(-3597LL,31869LL<<36),real(-0x2bcd262LL<<36),real(0x64396bfLL<<36),
+      real(-0x2088431a1LL<<28),reale(0x21b1b9fLL,0x17e35b3509831LL),
+      // _C4x[305]
+      reale(-8974LL,45592LL<<36),reale(5093LL,1677LL<<40),
+      reale(4452LL,53LL<<40),reale(-6182LL,2471LL<<40),
+      reale(2693LL,57096LL<<36),real(-0x169da1LL<<40),real(-0x223ddc2aLL<<28),
+      reale(0x21b1b9fLL,0x17e35b3509831LL),
+      // _C4x[306]
+      reale(9732LL,17262LL<<36),reale(-3186LL,36552LL<<36),
+      real(-0x43dd4feLL<<36),real(0x1de7dc4LL<<36),real(0x1b0dff6LL<<36),
+      real(-0xd920f5edLL<<28),reale(0x21b1b9fLL,0x17e35b3509831LL),
+      // _C4x[307]
+      real(-0x339e3ecLL<<36),reale(-2168LL,51155LL<<36),real(0x6a7c3eaLL<<36),
+      real(-0x180fd6fLL<<36),real(0xc32b44LL<<28),
+      reale(0x21b1b9fLL,0x17e35b3509831LL),
+      // _C4x[308]
+      real(0x114ce0c4LL<<32),real(0x1627a278LL<<32),real(0x768a96cLL<<32),
+      real(-0x6d0584bb8LL<<24),reale(0x21b1b9fLL,0x17e35b3509831LL),
+      // _C4x[309]
+      real(0x358bd2LL<<36),real(-0x10e5a9LL<<36),real(0xb51281LL<<28),
+      reale(0x1c5fc5LL,0x141dc611b72bLL),
+      // _C4x[310]
+      real(27196LL<<32),real(-0x12d3b78LL<<24),
+      reale(43244LL,0xc47e8e0e2a501LL),
+      // _C4x[311]
+      real(284LL<<28),real(0x2213ecbbb96785dLL),
+      // _C4x[312]
+      real(0x17e28184LL<<32),real(-0x458c00a6LL<<32),reale(2759LL,6541LL<<36),
+      reale(-5864LL,957254LL<<32),reale(10706LL,531484LL<<32),
+      reale(-16774LL,495538LL<<32),reale(22364LL,737384LL<<32),
+      reale(-24872LL,951710LL<<32),reale(21929LL,367284LL<<32),
+      reale(-12959LL,783882LL<<32),reale(3525LL,0x682b5cLL<<28),
+      reale(0x23de398LL,0xd75d61176d38fLL),
+      // _C4x[313]
+      reale(11351LL,122104LL<<32),reale(-21032LL,24332LL<<36),
+      reale(32809LL,309896LL<<32),reale(-42827LL,63737LL<<36),
+      reale(46156LL,986392LL<<32),reale(-40103LL,50694LL<<36),
+      reale(26942LL,134824LL<<32),reale(-13032LL,53203LL<<36),
+      reale(3987LL,162104LL<<32),real(-0x23bb00708LL<<28),
+      reale(0x23de398LL,0xd75d61176d38fLL),
+      // _C4x[314]
+      reale(51956LL,28024LL<<36),reale(-52001LL,245LL<<36),
+      reale(36995LL,60922LL<<36),reale(-12344LL,10831LL<<36),
+      reale(-9829LL,57276LL<<36),reale(19743LL,35337LL<<36),
+      reale(-17125LL,23806LL<<36),reale(8752LL,19043LL<<36),
+      reale(-2082LL,493631LL<<32),reale(0x23de398LL,0xd75d61176d38fLL),
+      // _C4x[315]
+      real(-0x1511e3e8LL<<32),reale(28752LL,63675LL<<36),
+      reale(-37203LL,472264LL<<32),reale(26902LL,36338LL<<36),
+      reale(-11513LL,203384LL<<32),reale(2229LL,59753LL<<36),
+      real(0xc947b28LL<<32),real(-0x7fa337d8LL<<28),
+      reale(0x23de398LL,0xd75d61176d38fLL),
+      // _C4x[316]
+      reale(-28604LL,48266LL<<36),reale(5695LL,63155LL<<36),
+      reale(4892LL,56156LL<<36),reale(-3092LL,6917LL<<36),
+      real(-0x3777fd2LL<<36),real(0x5fd58d7LL<<36),real(-0x1e0959d4LL<<32),
+      reale(0x23de398LL,0xd75d61176d38fLL),
+      // _C4x[317]
+      reale(3604LL,321208LL<<32),reale(4989LL,51182LL<<36),
+      reale(-5767LL,0xf5608LL<<32),reale(2335LL,38023LL<<36),
+      real(-0x118945a8LL<<32),real(-0x23321c28LL<<28),
+      reale(0x23de398LL,0xd75d61176d38fLL),
+      // _C4x[318]
+      reale(-2281LL,39380LL<<36),real(-0x4b4b50dLL<<36),real(0x1776d4aLL<<36),
+      real(0x1b7e671LL<<36),real(-0xcc2c56bLL<<32),
+      reale(0x23de398LL,0xd75d61176d38fLL),
+      // _C4x[319]
+      real(-0x74594b8LL<<32),real(0x51af5fLL<<36),real(-0x1118be8LL<<32),
+      real(-0x2895a8LL<<28),reale(0x1e3466LL,0x5c2d55f3c2615LL),
+      // _C4x[320]
+      real(0x117dcfLL<<36),real(0x6fd5b8LL<<32),real(-0x57f207LL<<32),
+      reale(0x1e3466LL,0x5c2d55f3c2615LL),
+      // _C4x[321]
+      real(-72136LL<<32),real(38520LL<<28),reale(9206LL,0xf354c01a236f3LL),
+      // _C4x[322]
+      real(-22951LL<<32),reale(14038LL,0xf79362a6f2da9LL),
+      // _C4x[323]
+      real(-0x53db06e8LL<<32),reale(3123LL,33372LL<<36),
+      reale(-6298LL,57448LL<<32),reale(11012LL,26677LL<<36),
+      reale(-16655LL,454840LL<<32),reale(21593LL,33198LL<<36),
+      reale(-23510LL,986120LL<<32),reale(20422LL,743LL<<36),
+      reale(-11962LL,562264LL<<32),reale(3239LL,0x9027d8LL<<28),
+      reale(0x260ab92LL,0x96d766f9d0eedLL),
+      // _C4x[324]
+      reale(-22253LL,3173LL<<40),reale(33139LL,4898LL<<36),
+      reale(-41619LL,37916LL<<36),reale(43458LL,60582LL<<36),
+      reale(-36815LL,53288LL<<36),reale(24253LL,7690LL<<36),
+      reale(-11562LL,54708LL<<36),reale(3500LL,60046LL<<36),
+      real(-0x1f264f27LL<<32),reale(0x260ab92LL,0x96d766f9d0eedLL),
+      // _C4x[325]
+      reale(-47758LL,665464LL<<32),reale(31664LL,61447LL<<36),
+      reale(-8327LL,461032LL<<32),reale(-11213LL,30202LL<<36),
+      reale(19076LL,191320LL<<32),reale(-15917LL,2861LL<<36),
+      reale(8026LL,341192LL<<32),real(-0x76e6858b8LL<<28),
+      reale(0x260ab92LL,0x96d766f9d0eedLL),
+      // _C4x[326]
+      reale(30327LL,10344LL<<36),reale(-35085LL,52340LL<<36),
+      reale(23968LL,2311LL<<40),reale(-9777LL,37164LL<<36),
+      real(0x6c06b78LL<<36),real(0xeb3424LL<<36),real(-0x7509546LL<<32),
+      reale(0x260ab92LL,0x96d766f9d0eedLL),
+      // _C4x[327]
+      reale(2996LL,558104LL<<32),reale(5105LL,60614LL<<36),
+      reale(-2617LL,864168LL<<32),real(-0x40606cdLL<<36),
+      real(0x5b76e438LL<<32),real(-0x1bd1b2248LL<<28),
+      reale(0x260ab92LL,0x96d766f9d0eedLL),
+      // _C4x[328]
+      real(0x11914e8LL<<36),real(-0x1198806LL<<36),real(0x6aad14LL<<36),
+      real(-744226LL<<36),real(-0x1dbcbfLL<<32),
+      reale(0x200907LL,0xb718cf86694ffLL),
+      // _C4x[329]
+      real(-0x97b2e8LL<<32),real(138325LL<<36),real(0x353008LL<<32),
+      real(-0x171e178LL<<28),reale(299923LL,0x634cafeea1549LL),
+      // _C4x[330]
+      real(43463LL<<40),real(-135160LL<<36),real(-45580LL<<32),
+      reale(299923LL,0x634cafeea1549LL),
+      // _C4x[331]
+      real(32456LL<<32),real(-360120LL<<28),reale(8569LL,0x3d59f665e75a3LL),
+      // _C4x[332]
+      real(1LL<<32),real(0x62a61c3e4dd975LL),
+      // _C4x[333]
+      reale(3471LL,43464LL<<36),reale(-6683LL,3167LL<<36),
+      reale(11244LL,21718LL<<36),reale(-16479LL,15629LL<<36),
+      reale(20837LL,43236LL<<36),reale(-22259LL,38715LL<<36),
+      reale(19078LL,41714LL<<36),reale(-11087LL,50153LL<<36),
+      reale(2990LL,383722LL<<32),reale(0x283738cLL,0x56516cdc34a4bLL),
+      // _C4x[334]
+      reale(11070LL,49036LL<<36),reale(-13432LL,16696LL<<36),
+      reale(13633LL,18532LL<<36),reale(-11289LL,1325LL<<40),
+      reale(7306LL,46652LL<<36),reale(-3438LL,26728LL<<36),
+      real(0x4074714LL<<36),real(-0x91df1b4LL<<32),
+      reale(0xd67bd9LL,0x721b244966e19LL),
+      // _C4x[335]
+      reale(26896LL,20636LL<<36),reale(-4988LL,47778LL<<36),
+      reale(-12194LL,14952LL<<36),reale(18360LL,53550LL<<36),
+      reale(-14826LL,30772LL<<36),reale(7390LL,53946LL<<36),
+      real(-0x6d310d54LL<<32),reale(0x283738cLL,0x56516cdc34a4bLL),
+      // _C4x[336]
+      real(-0x6c2614cLL<<36),real(0x463f91LL<<40),real(-0x1b60794LL<<36),
+      real(0x460f88LL<<36),real(882980LL<<36),real(-0x5a7684LL<<32),
+      reale(0x21dda9LL,0x12044919103e9LL),
+      // _C4x[337]
+      real(0x10d9e84LL<<36),real(-0x72a70dLL<<36),real(-0x3bd63eLL<<36),
+      real(0x496dd1LL<<36),real(-0x15c2fa6LL<<32),
+      reale(0x21dda9LL,0x12044919103e9LL),
+      // _C4x[338]
+      real(-0x1042158LL<<36),real(379583LL<<40),real(-565192LL<<36),
+      real(-0x1d5db8LL<<32),reale(0x21dda9LL,0x12044919103e9LL),
+      // _C4x[339]
+      real(673240LL<<36),real(0x1731acLL<<36),real(-0x9878d8LL<<32),
+      reale(0x21dda9LL,0x12044919103e9LL),
+      // _C4x[340]
+      real(-159848LL<<36),real(-86040LL<<32),reale(443886LL,0x9d340e9e9cd95LL),
+      // _C4x[341]
+      real(-112174LL<<32),reale(47221LL,0xfaefc0318df67LL),
+      // _C4x[342]
+      real(-0x1717fa8LL<<36),real(0x258a9bLL<<40),real(-0x357c878LL<<36),
+      real(0x4220f2LL<<40),real(-0x456f648LL<<36),real(0x3acd09LL<<40),
+      real(-0x21ec718LL<<36),real(0x91df1b4LL<<32),
+      reale(0x23b24aLL,0x6cefc2abb72d3LL),
+      // _C4x[343]
+      real(-0x7ff89cLL<<40),real(0x7e9b22LL<<40),real(-0x66b1a8LL<<40),
+      real(0x4169eeLL<<40),real(-0x1e6934LL<<40),real(592858LL<<40),
+      real(-0x145aaa8LL<<32),reale(0x23b24aLL,0x6cefc2abb72d3LL),
+      // _C4x[344]
+      real(-0x74ab18LL<<36),real(-0x2a50f6LL<<40),real(0x39fb358LL<<36),
+      real(-0x2d852bLL<<40),real(0x1678ac8LL<<36),real(-0x54cf1bcLL<<32),
+      reale(0x23b24aLL,0x6cefc2abb72d3LL),
+      // _C4x[345]
+      real(256484LL<<44),real(-95676LL<<44),real(13674LL<<44),real(3604LL<<44),
+      real(-340578LL<<36),reale(0x23b24aLL,0x6cefc2abb72d3LL),
+      // _C4x[346]
+      real(-384159LL<<40),real(-261954LL<<40),real(286571LL<<40),
+      real(-0x14458c8LL<<32),reale(0x23b24aLL,0x6cefc2abb72d3LL),
+      // _C4x[347]
+      real(330104LL<<40),real(-26332LL<<40),real(-117501LL<<36),
+      reale(0x23b24aLL,0x6cefc2abb72d3LL),
+      // _C4x[348]
+      real(94099LL<<40),real(-0x8fd608LL<<32),
+      reale(0x23b24aLL,0x6cefc2abb72d3LL),
+      // _C4x[349]
+      real(-226LL<<36),reale(16591LL,0x81ae2ec54d8dfLL),
+      // _C4x[350]
+      real(0x25ea6eLL<<40),real(-0x34a927LL<<40),real(0x3fcb74LL<<40),
+      real(-0x41f331LL<<40),real(0x373d7aLL<<40),real(-0x1fa97bLL<<40),
+      real(0x87b1c6LL<<36),reale(0x2586ebLL,0xc7db3c3e5e1bdLL),
+      // _C4x[351]
+      real(0x7729ecLL<<40),real(-388557LL<<44),real(0x3b8cf4LL<<40),
+      real(-0x1b62e8LL<<40),real(529788LL<<40),real(-0x1217b4LL<<36),
+      reale(0x2586ebLL,0xc7db3c3e5e1bdLL),
+      // _C4x[352]
+      real(-179129LL<<44),real(0x3790d4LL<<40),real(-0x2a93c8LL<<40),
+      real(0x14d79cLL<<40),real(-321657LL<<40),
+      reale(0x2586ebLL,0xc7db3c3e5e1bdLL),
+      // _C4x[353]
+      real(-0x13f854LL<<40),real(164264LL<<40),real(58724LL<<40),
+      real(-313548LL<<36),reale(0x2586ebLL,0xc7db3c3e5e1bdLL),
+      // _C4x[354]
+      real(-273868LL<<40),real(273002LL<<40),real(-0x12ef04LL<<36),
+      reale(0x2586ebLL,0xc7db3c3e5e1bdLL),
+      // _C4x[355]
+      real(-19084LL<<40),real(-113916LL<<36),
+      reale(0x2586ebLL,0xc7db3c3e5e1bdLL),
+      // _C4x[356]
+      real(-34781LL<<40),reale(0x2586ebLL,0xc7db3c3e5e1bdLL),
+      // _C4x[357]
+      real(-0x33c20cLL<<40),real(252109LL<<44),real(-0x3ebbd4LL<<40),
+      real(0x3405e8LL<<40),real(-0x1da41cLL<<40),real(0x7ea5ecLL<<36),
+      reale(0x275b8dLL,0x22c6b5d1050a7LL),
+      // _C4x[358]
+      real(-119884LL<<44),real(74261LL<<44),real(-33814LL<<44),
+      real(9911LL<<44),real(-353192LL<<36),reale(859780LL,0x60ece745ac58dLL),
+      // _C4x[359]
+      real(0x353154LL<<40),real(-0x27e7e8LL<<40),real(0x13649cLL<<40),
+      real(-0x48f9acLL<<36),reale(0x275b8dLL,0x22c6b5d1050a7LL),
+      // _C4x[360]
+      real(7532LL<<44),real(3674LL<<44),real(-18073LL<<40),
+      reale(0x275b8dLL,0x22c6b5d1050a7LL),
+      // _C4x[361]
+      real(260108LL<<40),real(-0x11ba5cLL<<36),
+      reale(0x275b8dLL,0x22c6b5d1050a7LL),
+      // _C4x[362]
+      real(-1592LL<<36),reale(37381LL,0xc16e795c129fbLL),
+      // _C4x[363]
+      real(243294LL<<44),real(-0x3bc298LL<<40),real(201135LL<<44),
+      real(-0x1bd388LL<<40),real(485639LL<<40),
+      reale(0x29302eLL,0x7db22f63abf91LL),
+      // _C4x[364]
+      real(204102LL<<44),real(-92092LL<<44),real(26818LL<<44),
+      real(-59466LL<<40),reale(0x29302eLL,0x7db22f63abf91LL),
+      // _C4x[365]
+      real(-153502LL<<44),real(74129LL<<44),real(-278674LL<<40),
+      reale(0x29302eLL,0x7db22f63abf91LL),
+      // _C4x[366]
+      real(158LL<<44),real(-726LL<<40),reale(117361LL,0x5360ca6881e97LL),
+      // _C4x[367]
+      real(-2963LL<<40),reale(117361LL,0x5360ca6881e97LL),
+      // _C4x[368]
+      real(-10152LL<<44),real(517LL<<48),real(-4664LL<<44),real(19822LL<<40),
+      reale(122577LL,0x627628bccbf3dLL),
+      // _C4x[369]
+      real(-228LL<<48),real(66LL<<48),real(-2332LL<<40),
+      reale(122577LL,0x627628bccbf3dLL),
+      // _C4x[370]
+      real(3016LL<<44),real(-11330LL<<40),reale(122577LL,0x627628bccbf3dLL),
+      // _C4x[371]
+      real(-2LL<<44),reale(5837LL,0x4b04b152e489LL),
+      // _C4x[372]
+      real(490LL<<48),real(-275LL<<48),real(1166LL<<44),
+      reale(127793LL,0x718b871115fe3LL),
+      // _C4x[373]
+      real(20LL<<48),real(-44LL<<44),reale(42597LL,0xd083d7b05caa1LL),
+      // _C4x[374]
+      real(-664LL<<44),reale(127793LL,0x718b871115fe3LL),
+      // _C4x[375]
+      real(-52LL<<48),real(220LL<<44),reale(26601LL,0xe6869447799b5LL),
+      // _C4x[376]
+      real(-8LL<<44),reale(8867LL,0x4cd786c27dde7LL),
+      // _C4x[377]
+      real(1LL<<48),reale(2126LL,0x8c0e9e949456fLL),
+    };
+#elif GEOGRAPHICLIB_GEODESICEXACT_ORDER == 30
+    static const real coeff[] = {
+      // _C4x[0]
+      reale(42171LL,0xbca3d5a569b4LL),reale(46862LL,0xd0a41cdef9cf0LL),
+      reale(52277LL,0xa2d5316ac1b2cLL),reale(58560LL,0x6f94d669a7a28LL),
+      reale(65892LL,0x788629d238da4LL),reale(74502LL,0x6b99bdf690d60LL),
+      reale(84681LL,0x87b277eadbb1cLL),reale(96804LL,0x8c76c6701c898LL),
+      reale(111359LL,0x1427f62cd3d94LL),reale(128987LL,0x59921e2221dd0LL),
+      reale(150546LL,0xaa0136eb20f0cLL),reale(177198LL,0x7742592373f08LL),
+      reale(210542LL,0x4360b9bd64984LL),reale(252821LL,0x8a8c09196de40LL),
+      reale(307248LL,0x66986780ae6fcLL),reale(378530LL,0x79d0ac77ed78LL),
+      reale(473750LL,0x5114d83948174LL),reale(603901LL,0x80acdb5cb5eb0LL),
+      reale(786661LL,0x2afc1dbf812ecLL),reale(0x100c26LL,0xda8ab314e3e8LL),
+      reale(0x16253eLL,0xc0ede2017b564LL),reale(0x1fcc74LL,0x5d3b51a63af20LL),
+      reale(0x300f2fLL,0xde5c8fc3f62dcLL),reale(0x4dcf72LL,0x12ae3e18b3258LL),
+      reale(0x8af270LL,0x45ee012c1b554LL),reale(0x1210283LL,0x20d0545bbdf90LL),
+      reale(0x31ac6e8LL,0x9a3ce7fc4a6ccLL),
+      reale(0x12a0a973LL,0x9d6d6fe9be8c8LL),
+      reale(-0x41325115LL,0x5900f84de5144LL),
+      reale(0xa2fdcab3LL,0xa17d933d434d6LL),
+      reale(0xf47cb00dLL,0x723c5cdbe4f41LL),
+      // _C4x[1]
+      real(0xb4c355cd41c92c0LL),real(0xd8fea3a41cc7830LL),
+      real(0x1064f0c6b9a6ad20LL),real(0x13f7a88902ef1b10LL),
+      real(0x1884a414973fcb80LL),real(0x1e5fa2ae5243d7f0LL),
+      real(0x25fe0bb384ddd9e0LL),real(0x3006f6e3e0e25ad0LL),
+      real(0x3d6c2c13c34ec440LL),real(0x4f91f34825bd4fb0LL),
+      real(0x688ffb74f98676a0LL),reale(2233LL,0xdec33bb086290LL),
+      reale(3036LL,0xe53843c2cdd00LL),reale(4213LL,0xb13e1137e3f70LL),
+      reale(5984LL,0xaa1cca8abe360LL),reale(8732LL,0xb9880d6c69250LL),
+      reale(13152LL,0x1eadcfcfd75c0LL),reale(20566LL,0x4e1752c3c0730LL),
+      reale(33653LL,0xf4262a5798020LL),reale(58247LL,0x3a420e3524a10LL),
+      reale(108257LL,0x7934f39e3ee80LL),reale(221025LL,0xaccc1c0dc06f0LL),
+      reale(514222LL,0xffbb852faace0LL),reale(0x163b45LL,0x29e8a4070e9d0LL),
+      reale(0x58ed14LL,0xa7a2901c3a740LL),reale(0x3630789LL,0x6270fd1339eb0LL),
+      reale(-0x18d63745LL,0x2e18c01dac9a0LL),
+      reale(0x254152e7LL,0x3adadfd37d190LL),
+      reale(-0x104c9446LL,0xd6403e1379451LL),
+      reale(0x517ee559LL,0xd0bec99ea1a6bLL),
+      // _C4x[2]
+      real(0x52cac993243497e0LL),real(0x6437dfaee57b9d40LL),
+      real(0x7a3f9cad4d2f48a0LL),reale(2405LL,0xee01eec3f2b00LL),
+      reale(2986LL,0x65a22988df560LL),reale(3743LL,0xe8ba104bd58c0LL),
+      reale(4745LL,0x82561551e620LL),reale(6086LL,0xa7581d3ddee80LL),
+      reale(7912LL,0x8561dfdd262e0LL),reale(10440LL,0x7aa2aab74b440LL),
+      reale(14008LL,0x9b1a2c148b3a0LL),reale(19155LL,0xcd3b8407d7200LL),
+      reale(26767LL,0x9792b4f9c2060LL),reale(38350LL,0xb50c17257efc0LL),
+      reale(56574LL,0xaf828f4edf120LL),reale(86399LL,0xb1bc40483f580LL),
+      reale(137581LL,0x7d29442656de0LL),reale(230687LL,0xc9059cc5d4b40LL),
+      reale(413025LL,0xcba5d91bbdea0LL),reale(806439LL,0xbad85d457b900LL),
+      reale(0x1b1e4aLL,0xdb254a1088b60LL),reale(0x47db50LL,0x187f6563b06c0LL),
+      reale(0x10829aeLL,0x4c53d944cbc20LL),reale(0x9081419LL,0x682a2ddefc80LL),
+      reale(-0x39d631f0LL,0xf8c545a3fb8e0LL),
+      reale(0x4cc4aad4LL,0xb756685e76240LL),
+      reale(-0x18d63745LL,0x2e18c01dac9a0LL),
+      reale(-0x4a82a5dLL,0x18a4a405905ceLL),
+      reale(0xf47cb00dLL,0x723c5cdbe4f41LL),
+      // _C4x[3]
+      reale(2481LL,0x8d2c27b46b620LL),reale(3034LL,0xe44720f3fdf90LL),
+      reale(3743LL,0xf82fc54a92780LL),reale(4662LL,0xb922ac44f6b70LL),
+      reale(5867LL,0xae02c805f08e0LL),reale(7469LL,0x40a687e9b4d50LL),
+      reale(9629LL,0xbb2099bca6640LL),reale(12592LL,0xa0727e14e5130LL),
+      reale(16731LL,0xdc4cfea134ba0LL),reale(22636LL,0xbf84f9dc44310LL),
+      reale(31263LL,0xfe99294d5c500LL),reale(44220LL,0x78f2e666feef0LL),
+      reale(64313LL,0xe77c1f84fde60LL),reale(96684LL,0x43c9282e120d0LL),
+      reale(151281LL,0x84eb0984fa3c0LL),reale(248729LL,0xa2c4a502aa4b0LL),
+      reale(435615LL,0xd80deb212120LL),reale(829647LL,0x194fc60e84690LL),
+      reale(0x1b1fd3LL,0x17dfea7bc6280LL),reale(0x459d83LL,0x417bb8824d270LL),
+      reale(0xf6d16eLL,0xd3a7db47373e0LL),reale(0x8183649LL,0xbb999e2601450LL),
+      reale(-0x312ee39aLL,0x57e9d33606140LL),
+      reale(0x3a455a48LL,0xd8c5ee7f4d830LL),
+      reale(-0x1373dc9LL,0xb547079d336a0LL),
+      reale(-0x19f739c8LL,0xd486bc1eea10LL),
+      reale(0x889a2ffLL,0xa8277df5ccab1LL),
+      reale(0xf47cb00dLL,0x723c5cdbe4f41LL),
+      // _C4x[4]
+      reale(4244LL,0x3972351df5940LL),reale(5257LL,0xaa8f87b5d5600LL),
+      reale(6578LL,0xed6cb3b3fa2c0LL),reale(8324LL,0xb4008d853180LL),
+      reale(10662LL,0x703b07259b440LL),reale(13846LL,0x8f2f6ca125d00LL),
+      reale(18261LL,0x3a455b4269dc0LL),reale(24508LL,0x5045fb81ae880LL),
+      reale(33557LL,0x1b3e945f36f40LL),reale(47022LL,0x9499ec44e400LL),
+      reale(67699LL,0x7a940285938c0LL),reale(100662LL,0x403646e1e5f80LL),
+      reale(155637LL,0xf20897fb50a40LL),reale(252593LL,0x7106d86756b00LL),
+      reale(436178LL,0xe720d891ff3c0LL),reale(818051LL,0x1d79595b01680LL),
+      reale(0x1a4d3aLL,0xc365c92e70540LL),reale(0x424929LL,0xb055b91247200LL),
+      reale(0xe65c40LL,0xe96c54f834ec0LL),reale(0x762650fLL,0x435c586708d80LL),
+      reale(-0x2b88f1fbLL,0x72f827a11e040LL),
+      reale(0x3058f88aLL,0xd7ccf03d27900LL),
+      reale(0x3fc08ddLL,0xdd39a234bc9c0LL),
+      reale(-0x1850d3a6LL,0x298c984804480LL),
+      reale(0x5e7be5fLL,0x21cb91dfe1b40LL),reale(0xd8c1e2LL,0x589c3f44ce7acLL),
+      reale(0xf47cb00dLL,0x723c5cdbe4f41LL),
+      // _C4x[5]
+      reale(7030LL,0x634f92bbfec80LL),reale(8852LL,0x183ea9c784b10LL),
+      reale(11280LL,0x864427e0ea420LL),reale(14569LL,0x4ed71f4155e30LL),
+      reale(19103LL,0x13b2c1ad2ffc0LL),reale(25480LL,0x35983eb20bf50LL),
+      reale(34659LL,0x18ad59c5f9360LL),reale(48227LL,0x95f2c0574270LL),
+      reale(68917LL,0x8c5b3ac32f300LL),reale(101660LL,0x272f49f96bb90LL),
+      reale(155850LL,0xbc628b339b2a0LL),reale(250657LL,0x122490d07feb0LL),
+      reale(428675LL,0x21f5a97506640LL),reale(795748LL,0x8d9dd2ee8dfd0LL),
+      reale(0x194e34LL,0x22b44d2c5a1e0LL),reale(0x3f078eLL,0x814b60cb632f0LL),
+      reale(0xd83f56LL,0xb8691b29bf980LL),reale(0x6d46e98LL,0x7599d8275cc10LL),
+      reale(-0x27781128LL,0xaa3ee984c0120LL),
+      reale(0x2a0ea364LL,0xf6219ee07f30LL),
+      reale(0x5c2da08LL,0xe42cfbbc64cc0LL),
+      reale(-0x163dd11bLL,0x272a56b2c2050LL),
+      reale(0x6b12295LL,0x704341a757060LL),
+      reale(-0x284b6d6LL,0x40a56b3358370LL),
+      reale(0x19455f9LL,0xea37274059c77LL),
+      reale(0xf47cb00dLL,0x723c5cdbe4f41LL),
+      // _C4x[6]
+      reale(11639LL,0x4298ebe4bc020LL),reale(14966LL,0xe9089607c0a40LL),
+      reale(19534LL,0x1996a62965260LL),reale(25928LL,0xdcaffa7bfcb80LL),
+      reale(35089LL,0x59fa64f7d88a0LL),reale(48563LL,0x32ed377221cc0LL),
+      reale(69004LL,0xe5c9403173ae0LL),reale(101181LL,0xf483b00105600LL),
+      reale(154143LL,0xf39432e434120LL),reale(246274LL,0xfc90899a3cf40LL),
+      reale(418255LL,0xdad9486cf7360LL),reale(770731LL,0xbf0321b55e080LL),
+      reale(0x185215LL,0xd61fe95ba9a0LL),reale(0x3c13b0LL,0x3820413b3e1c0LL),
+      reale(0xcc40bfLL,0xf48ca237dbbe0LL),reale(0x662046cLL,0x9d1b10f932b00LL),
+      reale(-0x245c984cLL,0x93e4d8ea58220LL),
+      reale(0x25a711c0LL,0xcac1d46451440LL),
+      reale(0x672d055LL,0xaf9fd1440d460LL),
+      reale(-0x147fa21bLL,0xfc84c3f4af580LL),
+      reale(0x6aea843LL,0x3a73d439f8aa0LL),
+      reale(-0x3292518LL,0xea2e8660a26c0LL),
+      reale(0x156a084LL,0x49a70d2177ce0LL),reale(0x457938LL,0x22f700960daaaLL),
+      reale(0xf47cb00dLL,0x723c5cdbe4f41LL),
+      // _C4x[7]
+      reale(19712LL,0xac93bc6991f60LL),reale(26064LL,0x47e63bb6f7b10LL),
+      reale(35129LL,0x85349dd791940LL),reale(48412LL,0xcf2b50a5e4170LL),
+      reale(68486LL,0xf23457a2e7b20LL),reale(99959LL,0x1aee9379bdd0LL),
+      reale(151547LL,0xc976e86422100LL),reale(240911LL,0x67a8290f88c30LL),
+      reale(407002LL,0x79f859786e6e0LL),reale(745880LL,0xf6e3b80f24890LL),
+      reale(0x176681LL,0xcfffb4a9fa8c0LL),reale(0x397247LL,0xab1a08cbd8ef0LL),
+      reale(0xc1fa29LL,0x4098eb8542a0LL),reale(0x6035f67LL,0x9a754746dfb50LL),
+      reale(-0x21e32f8aLL,0x4337d0a4c9080LL),
+      reale(0x225ca643LL,0x10ca042b229b0LL),
+      reale(0x6b2fa73LL,0xaecaa4a6c6e60LL),
+      reale(-0x131280c1LL,0x1fa1b551b610LL),
+      reale(0x67b126eLL,0x9b1cd9ac3b840LL),
+      reale(-0x3550ad7LL,0x14175e8b3c70LL),
+      reale(0x1cc2f87LL,0xd0df7149f4a20LL),
+      reale(-0xcdba47LL,0xd35d50b9258d0LL),reale(0x8df89eLL,0x6328f1d67a7f5LL),
+      reale(0xf47cb00dLL,0x723c5cdbe4f41LL),
+      // _C4x[8]
+      reale(34939LL,0x4781a8598a880LL),reale(47986LL,0x870a153a0ba00LL),
+      reale(67643LL,0xf93c5a3d5fb80LL),reale(98366LL,0xdef5527b5d100LL),
+      reale(148567LL,0x565e4f7b51e80LL),reale(235242LL,0x766e64b79c800LL),
+      reale(395796LL,0x5614c84bc3180LL),reale(722239LL,0xc9f1a6fcbf00LL),
+      reale(0x168e71LL,0xd3352c2795480LL),reale(0x371b2eLL,0xfdbc40cced600LL),
+      reale(0xb91343LL,0x5ec9e3d72a780LL),reale(0x5b36e2fLL,0xe79e249b02d00LL),
+      reale(-0x1fdb6a55LL,0x9cccd6f164a80LL),
+      reale(0x1fca127cLL,0xd7635e240e400LL),
+      reale(0x6c057abLL,0x31e09daaa5d80LL),
+      reale(-0x11e4686bLL,0x932c79cb11b00LL),
+      reale(0x63c2a77LL,0x6a6e0bd3d0080LL),
+      reale(-0x357e159LL,0x303fff470f200LL),
+      reale(0x1f8d409LL,0x428f85e945380LL),
+      reale(-0x1224cb3LL,0xc015a15e08900LL),
+      reale(0x85cd57LL,0x59c11511e7680LL),reale(0x1de7e7LL,0x57aea52b92dd8LL),
+      reale(0xf47cb00dLL,0x723c5cdbe4f41LL),
+      // _C4x[9]
+      reale(66631LL,0x784cbdfb1b2c0LL),reale(96606LL,0x3419bb8e05f90LL),
+      reale(145459LL,0xb79bffbfb42e0LL),reale(229589LL,0x824d22506cd30LL),
+      reale(385010LL,0x35e34fd0f4f00LL),reale(700134LL,0x4df5413db48d0LL),
+      reale(0x15c952LL,0x581b23c083b20LL),reale(0x350425LL,0x224df4c0f7670LL),
+      reale(0xb14747LL,0x6c8cba4306b40LL),reale(0x56ec17bLL,0x713d14f45fa10LL),
+      reale(-0x1e26f4d4LL,0x2c26c855c4360LL),
+      reale(0x1db5bbe9LL,0x686859af477b0LL),
+      reale(0x6b4fcd8LL,0x2ca5b0e042780LL),
+      reale(-0x10e6619eLL,0x45b113ee59350LL),
+      reale(0x5fd4fd1LL,0xc424152de7ba0LL),
+      reale(-0x34ad7a3LL,0x73b22b11af0f0LL),
+      reale(0x207fc1bLL,0x322bbe9b9a3c0LL),
+      reale(-0x1487fb7LL,0xd35bb2ecf3490LL),
+      reale(0xc41a61LL,0x7f1d30d5603e0LL),reale(-0x5c2318LL,0x13403f2580230LL),
+      reale(0x41d241LL,0xa0fbedf62e95bLL),
+      reale(0xf47cb00dLL,0x723c5cdbe4f41LL),
+      // _C4x[10]
+      reale(142358LL,0x43f28ef2bce60LL),reale(224104LL,0xc49bf70fb8540LL),
+      reale(374789LL,0x29edb81ed2220LL),reale(679606LL,0x56dce126b3a00LL),
+      reale(0x151577LL,0x3315a15e701e0LL),reale(0x3323adLL,0xe4cb186e3aec0LL),
+      reale(0xaa619bLL,0x295c18ed1d5a0LL),reale(0x532ef77LL,0xbf27e3cc5cb80LL),
+      reale(-0x1cb1b79dLL,0x7ff1b0440560LL),
+      reale(0x1bfc4ae5LL,0x9e18ca33e7840LL),
+      reale(0x69d47e6LL,0x606788cedf920LL),
+      reale(-0x100d6e70LL,0x6f2524df29d00LL),
+      reale(0x5c21a47LL,0x8c213171618e0LL),
+      reale(-0x3378c21LL,0x2af60abab21c0LL),
+      reale(0x209b82fLL,0x9021dc5d4cca0LL),
+      reale(-0x159ac9aLL,0x60746e780ee80LL),
+      reale(0xe38d17LL,0x946e9b2907c60LL),reale(-0x8b2d3dLL,0x9f9832c08eb40LL),
+      reale(0x423e70LL,0x73b562399020LL),reale(0xf7089LL,0x75de66a5bdb46LL),
+      reale(0xf47cb00dLL,0x723c5cdbe4f41LL),
+      // _C4x[11]
+      reale(365173LL,0x141eb92882aa0LL),reale(660579LL,0x721db1cc80890LL),
+      reale(0x1470fbLL,0x6f3cff39e7d00LL),reale(0x3171b2LL,0xc29100e665970LL),
+      reale(0xa439d7LL,0xac38fa6376f60LL),reale(0x4fe3856LL,0x6edf90fa38050LL),
+      reale(-0x1b6dca72LL,0x585d3ea2fadc0LL),
+      reale(0x1a86c3deLL,0xb96af8d66e930LL),
+      reale(0x67f83deLL,0x840edc5d1e420LL),
+      reale(-0xf5196c0LL,0xd1386a6690010LL),
+      reale(0x58b7f0aLL,0x54adfb574be80LL),
+      reale(-0x322173cLL,0xe27d71d4930f0LL),
+      reale(0x204f4a6LL,0x109475f98e8e0LL),
+      reale(-0x1604c98LL,0xea72421c3e7d0LL),
+      reale(0xf3c608LL,0x7a6ca24c70f40LL),reale(-0xa4e555LL,0xc3f29664890b0LL),
+      reale(0x669063LL,0xd5a36326ddda0LL),reale(-0x3144eeLL,0x1bb23df2f9790LL),
+      reale(0x23c98bLL,0x81bdf10588059LL),
+      reale(0xf47cb00dLL,0x723c5cdbe4f41LL),
+      // _C4x[12]
+      reale(0x13da11LL,0x7885767b34dc0LL),reale(0x2fe77cLL,0x6299dbe8eac00LL),
+      reale(0x9eb09bLL,0xe9c2f692aa40LL),reale(0x4cf4ecbLL,0xafcfc919b1e80LL),
+      reale(-0x1a51346aLL,0xcb0eb0f7c1ec0LL),
+      reale(0x19458119LL,0x2e9be95704100LL),
+      reale(0x65f0ce7LL,0x9a909730adb40LL),
+      reale(-0xead023bLL,0xc33de13104380LL),
+      reale(0x559807aLL,0x8e9ea1f760fc0LL),
+      reale(-0x30c52ebLL,0xb2e05ca4d5600LL),
+      reale(0x1fcfd6dLL,0x391836578ec40LL),
+      reale(-0x16148d5LL,0x98f20c7d1a880LL),
+      reale(0xfbcd77LL,0xfb453b1baa0c0LL),reale(-0xb35ea8LL,0x8cd5c6a276b00LL),
+      reale(0x7bad02LL,0xa64658fb65d40LL),reale(-0x4dde87LL,0x3639a72c0cd80LL),
+      reale(0x25a976LL,0x7d6aacb2351c0LL),reale(588064LL,0xecbdce72e5104LL),
+      reale(0xf47cb00dLL,0x723c5cdbe4f41LL),
+      // _C4x[13]
+      reale(0x99ad32LL,0xbead2787bab00LL),reale(0x4a53514LL,0xc8037e807a610LL),
+      reale(-0x195498f9LL,0x6a3a755d543a0LL),
+      reale(0x182d7428LL,0xf37804095de30LL),
+      reale(0x63dbc55LL,0x2c34dddf07040LL),
+      reale(-0xe1b53e6LL,0x3f952bd85a450LL),
+      reale(0x52bcb89LL,0x36f6256b264e0LL),
+      reale(-0x2f71989LL,0x5bd35b3c86c70LL),
+      reale(0x1f3806cLL,0x1aa6eba145580LL),
+      reale(-0x15f24a2LL,0xbe1919f50aa90LL),
+      reale(0xff2864LL,0xa0e65eb557620LL),reale(-0xbb7477LL,0x8ed3ec76bd2b0LL),
+      reale(0x885218LL,0x44131ea6cfac0LL),reale(-0x5f538eLL,0x53b786fbc58d0LL),
+      reale(0x3c9287LL,0x8774cc7c1760LL),reale(-0x1d72cdLL,0xd58c69693b0f0LL),
+      reale(0x15971fLL,0x9f9bcb791811fLL),
+      reale(0xf47cb00dLL,0x723c5cdbe4f41LL),
+      // _C4x[14]
+      reale(-0x187266b0LL,0xcc121102522a0LL),
+      reale(0x17368ed6LL,0x4a8eb37cf8e40LL),
+      reale(0x61c9a2eLL,0xdf54e754057e0LL),
+      reale(-0xd993a81LL,0x66d710967b680LL),
+      reale(0x501f49bLL,0x8c476a1354120LL),
+      reale(-0x2e2cc70LL,0xf6b7949b50ec0LL),
+      reale(0x1e962b0LL,0xac5157de0d660LL),
+      reale(-0x15b3ea3LL,0x902c3e28e0f00LL),
+      reale(0xffbd98LL,0x75de552320fa0LL),reale(-0xbfb6ecLL,0x319a838152f40LL),
+      reale(0x8ff034LL,0xee7b325fde4e0LL),reale(-0x6a4b51LL,0x3f56268dce780LL),
+      reale(0x4b2142LL,0x7fe1a8c934e20LL),reale(-0x301411LL,0x35323a40bafc0LL),
+      reale(0x17780aLL,0xc6e75548f4360LL),reale(371250LL,0x9b28ca926da22LL),
+      reale(0xf47cb00dLL,0x723c5cdbe4f41LL),
+      // _C4x[15]
+      reale(0x5fc38f5LL,0x1c7e0d98777e0LL),
+      reale(-0xd242504LL,0xe693d58008810LL),
+      reale(0x4db8f74LL,0xcf48e14d7b2c0LL),
+      reale(-0x2cf9165LL,0x4b3864100f370LL),
+      reale(0x1df218dLL,0x3ade51fc905a0LL),
+      reale(-0x1565f09LL,0x9d37bba5014d0LL),
+      reale(0xfea394LL,0xb49b2cc64ec80LL),reale(-0xc19874LL,0xca5adb0f72830LL),
+      reale(0x946d46LL,0xc96eb1166e360LL),reale(-0x71439cLL,0xca8b236006990LL),
+      reale(0x54a228LL,0x3897621326640LL),reale(-0x3c5281LL,0x859e2dc8514f0LL),
+      reale(0x26d1abLL,0x942757fc8f120LL),reale(-0x130299LL,0xa0a61d1db6650LL),
+      reale(918672LL,0xb7e149f3f515dLL),reale(0xf47cb00dLL,0x723c5cdbe4f41LL),
+      // _C4x[16]
+      reale(0x4b83825LL,0x46beef62ca900LL),
+      reale(-0x2bd7055LL,0x7a5e627bdac00LL),
+      reale(0x1d50229LL,0x10d9a95bb4f00LL),
+      reale(-0x150fc0bLL,0x50c599a605a00LL),
+      reale(0xfc80d5LL,0x58583f22e9500LL),reale(-0xc1f541LL,0xc280e4e41c800LL),
+      reale(0x96e5ebLL,0xbbf5d84b2bb00LL),reale(-0x75aa16LL,0xc94e877623600LL),
+      reale(0x5aec67LL,0x73d1ebe040100LL),reale(-0x4492a4LL,0x5c8b5441e400LL),
+      reale(0x3133c5LL,0x29027e04ea700LL),reale(-0x1fce50LL,0x72881bd411200LL),
+      reale(0xf9dc9LL,0xbf113370eed00LL),reale(249103LL,0x93cdbdabe0fb0LL),
+      reale(0xf47cb00dLL,0x723c5cdbe4f41LL),
+      // _C4x[17]
+      reale(0x1cb2a29LL,0x8745c27487540LL),
+      reale(-0x14b5d21LL,0x85b44eb6a1e90LL),
+      reale(0xf9bc4eLL,0xd4e8bc19a0660LL),reale(-0xc155a7LL,0x6125f0a20d130LL),
+      reale(0x9808cfLL,0x5ae4f6d3c8380LL),reale(-0x785bd1LL,0xe6efcb8cc51d0LL),
+      reale(0x5f1741LL,0x96448488ef0a0LL),reale(-0x4a36bfLL,0xf983c38b4e470LL),
+      reale(0x386399LL,0x2e7ae0f4851c0LL),reale(-0x28ae09LL,0x1979b7873cd10LL),
+      reale(0x1a64cdLL,0xf881cba41aae0LL),reale(-851105LL,0x77702a4854fb0LL),
+      reale(629987LL,0x9ea5a19626943LL),reale(0xf47cb00dLL,0x723c5cdbe4f41LL),
+      // _C4x[18]
+      reale(0xf6975bLL,0x85a3ec5761ce0LL),reale(-0xc010d4LL,0x6848083afa540LL),
+      reale(0x984538LL,0xa0e43863a93a0LL),reale(-0x79e439LL,0x3050a99fd8100LL),
+      reale(0x61d04aLL,0xbffc30c12660LL),reale(-0x4e16fdLL,0x26ce724b3cc0LL),
+      reale(0x3d6fb4LL,0x94c482b815d20LL),reale(-0x2ef71eLL,0x63b7f527ae080LL),
+      reale(0x220869LL,0x99db799d8bfe0LL),reale(-0x16260bLL,0x4fffa269a7440LL),
+      reale(715485LL,0xdbe6a2ef6d6a0LL),reale(175141LL,0x3547b8669b9beLL),
+      reale(0xf47cb00dLL,0x723c5cdbe4f41LL),
+      // _C4x[19]
+      reale(0x97e43bLL,0x5ecc5371ca720LL),reale(-0x7a9e52LL,0x8336fa9a1f990LL),
+      reale(0x63879fLL,0x32e1ec30d1a80LL),reale(-0x50bd17LL,0xbe8d10d414f70LL),
+      reale(0x410187LL,0x65c388ed45de0LL),reale(-0x337b18LL,0xb259e1738fb50LL),
+      reale(0x278db9LL,0xcd194d02dbd40LL),reale(-0x1cc4daLL,0x5f7365df10930LL),
+      reale(0x12c554LL,0x4c527bc6a84a0LL),reale(-607280LL,0xdb291ae428510LL),
+      reale(450701LL,0xae98337b7d081LL),reale(0xf47cb00dLL,0x723c5cdbe4f41LL),
+      // _C4x[20]
+      reale(0x2182aaLL,0xe1b60fe1808c0LL),reale(-0x1b814dLL,0xc4b4e3d5cbe00LL),
+      reale(0x168277LL,0x47b8ccbe8340LL),reale(-0x124018LL,0xd1d5bfe3b9680LL),
+      reale(952413LL,0x117e9e1fb75c0LL),reale(-734857LL,0xd1e60e1841f00LL),
+      reale(536171LL,0x8daa599335040LL),reale(-350595LL,0xf5a72b995c780LL),
+      reale(173293LL,0x7b19cdc9682c0LL),reale(42591LL,0xb005bdeb82d74LL),
+      reale(0x517ee559LL,0xd0bec99ea1a6bLL),
+      // _C4x[21]
+      reale(0x171929LL,0x9572babb99080LL),reale(-0x130a9fLL,0x999f64e91edb0LL),
+      reale(0xf875cLL,0x228016ac84e60LL),reale(-814137LL,0x7913cecbaa210LL),
+      reale(630421LL,0xa88f591713840LL),reale(-461206LL,0xb780fdc49f070LL),
+      reale(302134LL,0x36942691aea20LL),reale(-149504LL,0xa5e26506b34d0LL),
+      reale(111169LL,0xb14ab93d4ba6dLL),reale(0x517ee559LL,0xd0bec99ea1a6bLL),
+      // _C4x[22]
+      reale(213221LL,0x21fe88963f0e0LL),reale(-174747LL,0xed01fc507d1c0LL),
+      reale(140344LL,0xd3dfad978d4a0LL),reale(-109010LL,0xec11fc2ea0e80LL),
+      reale(79932LL,0x9fff01479b460LL),reale(-52448LL,0xac156ba4a7b40LL),
+      reale(25976LL,0xa5a6ee990f820LL),reale(6403LL,0x87dc4a069efc6LL),
+      reale(0x104c9445LL,0x29bfc1ec86bafLL),
+      // _C4x[23]
+      reale(5214LL,0xb54b8c26f5620LL),reale(-4203LL,0xb51a0a43406b0LL),
+      reale(3272LL,0xab988a50dfac0LL),reale(-2405LL,0x7b519f36184d0LL),
+      real(0x62be65b26227b760LL),real(-0x30f2645200be8b10LL),
+      real(0x2472ebc3f09ad327LL),reale(0x8fe1cdLL,0x6b5ee3606e93bLL),
+      // _C4x[24]
+      real(0x2507d929b7f89580LL),real(-0x1ce7bf02c3715a00LL),
+      real(0x15463c23456c8680LL),real(-0xdfecff0050dfd00LL),
+      real(0x6f141ba97196780LL),real(0x1b71ab9c78b8b48LL),
+      reale(0x1734efLL,0x957266bcf90f9LL),
+      // _C4x[25]
+      real(0x7a99ea0a52f40LL),real(-0x5a5f53e2c3b50LL),real(0x3b83d2c0c8da0LL),
+      real(-0x1d8a81cb5cc70LL),real(0x1605bd50459c1LL),
+      real(0x6fb2ae4757107d03LL),
+      // _C4x[26]
+      real(0x738319564e0LL),real(-0x4c2475635c0LL),real(0x25d0be52da0LL),
+      real(0x95c020b74eLL),real(0xa0f21774b90225LL),
+      // _C4x[27]
+      real(0x50de7a6e0LL),real(-0x282ec9e50LL),real(0x1dfb4ba1bLL),
+      real(0xbfa33c13e963LL),
+      // _C4x[28]
+      real(0x74154c0LL),real(0x1cc5554LL),real(0x269c465a0c9LL),
+      // _C4x[29]
+      real(3361LL),real(0x6803dafLL),
+      // _C4x[30]
+      real(-0xb4c355cd41c92c0LL),real(-0xd8fea3a41cc7830LL),
+      real(-0x1064f0c6b9a6ad20LL),real(-0x13f7a88902ef1b10LL),
+      real(-0x1884a414973fcb80LL),real(-0x1e5fa2ae5243d7f0LL),
+      real(-0x25fe0bb384ddd9e0LL),real(-0x3006f6e3e0e25ad0LL),
+      real(-0x3d6c2c13c34ec440LL),real(-0x4f91f34825bd4fb0LL),
+      real(-0x688ffb74f98676a0LL),reale(-2234LL,0x213cc44f79d70LL),
+      reale(-3037LL,0x1ac7bc3d32300LL),reale(-4214LL,0x4ec1eec81c090LL),
+      reale(-5985LL,0x55e3357541ca0LL),reale(-8733LL,0x4677f29396db0LL),
+      reale(-13153LL,0xe152303028a40LL),reale(-20567LL,0xb1e8ad3c3f8d0LL),
+      reale(-33654LL,0xbd9d5a867fe0LL),reale(-58248LL,0xc5bdf1cadb5f0LL),
+      reale(-108258LL,0x86cb0c61c1180LL),reale(-221026LL,0x5333e3f23f910LL),
+      reale(-514223LL,0x447ad055320LL),reale(-0x163b46LL,0xd6175bf8f1630LL),
+      reale(-0x58ed15LL,0x585d6fe3c58c0LL),
+      reale(-0x363078aLL,0x9d8f02ecc6150LL),
+      reale(0x18d63744LL,0xd1e73fe253660LL),
+      reale(-0x254152e8LL,0xc525202c82e70LL),
+      reale(0x104c9445LL,0x29bfc1ec86bafLL),
+      reale(0x2dd761028LL,0x56b51693aedc3LL),
+      // _C4x[31]
+      real(-0x1bd57a8f504dd3c0LL),real(-0x21b6ff10b9172180LL),
+      real(-0x292825cda3a88940LL),real(-0x32aacbfadedfca00LL),
+      real(-0x3ef38a62fa0322c0LL),real(-0x4f013a1cfd80d280LL),
+      real(-0x64414a4729c69840LL),reale(-2061LL,0x6f152d95fcd00LL),
+      reale(-2684LL,0xdc83926d41e40LL),reale(-3548LL,0xc265fa3cc1c80LL),
+      reale(-4771LL,0x913625a6408c0LL),reale(-6542LL,0xfe9a81bee2400LL),
+      reale(-9171LL,0xe574b6bb02f40LL),reale(-13191LL,0x4f96bef7feb80LL),
+      reale(-19555LL,0x61c6c5c4f99c0LL),reale(-30048LL,0x45cfafabb7b00LL),
+      reale(-48225LL,0x8f82b0b095040LL),reale(-81690LL,0xfa35bf4ada80LL),
+      reale(-148266LL,0x546f21a745ac0LL),reale(-294963LL,0x9bc8c4fb81200LL),
+      reale(-667588LL,0x3f3977057c140LL),reale(-0x1c14faLL,0xf37bd27dd2980LL),
+      reale(-0x6dd992LL,0x3beb764a8bc0LL),
+      reale(-0x42b1cf8LL,0x24613ead42900LL),
+      reale(0x204e2080LL,0xe60e5a413c240LL),
+      reale(-0x3f388cb0LL,0xd26d8bee71880LL),
+      reale(0x31ac6e89LL,0xa3ce7fc4a6cc0LL),
+      reale(-0xdf87f17LL,0x49edec10b116aLL),
+      reale(0x2dd761028LL,0x56b51693aedc3LL),
+      // _C4x[32]
+      real(-0x34f88b61ee2c2e60LL),real(-0x40e8b73250ad02b0LL),
+      real(-0x50402824a1190680LL),real(-0x643133a56bf6de50LL),
+      real(-0x7e70b50d7e53aea0LL),reale(-2584LL,0x76116efc39410LL),
+      reale(-3344LL,0xd2a9490df5540LL),reale(-4391LL,0x6eaf4118b9070LL),
+      reale(-5863LL,0x134611e898120LL),reale(-7979LL,0x64baaeea752d0LL),
+      reale(-11097LL,0xec88b5a185100LL),reale(-15826LL,0xc0dc248c81730LL),
+      reale(-23249LL,0xf0ba5cbf340e0LL),reale(-35381LL,0x50bb879d81990LL),
+      reale(-56210LL,0xf757e0cd1ccc0LL),reale(-94206LL,0xd06751da895f0LL),
+      reale(-169094LL,0x151b52b1170a0LL),reale(-332578LL,0xf12799bfc850LL),
+      reale(-743996LL,0x6f9cff04ba880LL),reale(-0x1eebfeLL,0x63917bb86ecb0LL),
+      reale(-0x775923LL,0x8ace3e96bf060LL),
+      reale(-0x471a981LL,0xe12bc4d183f10LL),
+      reale(0x211f5d66LL,0x34418f385c440LL),
+      reale(-0x3a18e3bfLL,0x7b0b598ecfb70LL),
+      reale(0x1f6fcfcdLL,0x42f7f1faaa020LL),
+      reale(0x5a50c8fLL,0xa411a5cab5dd0LL),
+      reale(-0x6fc3f8cLL,0xa4f6f608588b5LL),
+      reale(0x2dd761028LL,0x56b51693aedc3LL),
+      // _C4x[33]
+      real(-0x5cd20bbc3c672180LL),real(-0x73720b2d98187c00LL),
+      reale(-2322LL,0x3b147a8a97980LL),reale(-2953LL,0x4d9e8f7737100LL),
+      reale(-3805LL,0xbe842705d1c80LL),reale(-4974LL,0xa137909fe2e00LL),
+      reale(-6610LL,0x667d8d0cf5780LL),reale(-8951LL,0xe683854b94b00LL),
+      reale(-12383LL,0x33b7e1d5bba80LL),reale(-17566LL,0xa0879e6965800LL),
+      reale(-25661LL,0xb590ccf1dd580LL),reale(-38826LL,0x1bb8eff66e500LL),
+      reale(-61314LL,0xb8a8c55f13880LL),reale(-102124LL,0xf5aa449fc8200LL),
+      reale(-182122LL,0x4b2fa6f17380LL),reale(-355743LL,0xcbf416e48bf00LL),
+      reale(-789744LL,0xce71bd7a1680LL),reale(-0x20853dLL,0xd3a64f07d2c00LL),
+      reale(-0x7beb6aLL,0xc063383a6b180LL),
+      reale(-0x484bed9LL,0x7eb8bd22b5900LL),
+      reale(0x2054758bLL,0xe15955752d480LL),
+      reale(-0x334d87eeLL,0x4f7736a64d600LL),
+      reale(0x10cbd69bLL,0x6d691a09a0f80LL),
+      reale(0x14d790d7LL,0x4a19c69db3300LL),
+      reale(-0xffa99b7LL,0xe0ca1aed7f280LL),
+      reale(0x28a45a7LL,0x9d4bdce6b704LL),
+      reale(0x2dd761028LL,0x56b51693aedc3LL),
+      // _C4x[34]
+      reale(-2546LL,0xec9cefbc9d280LL),reale(-3227LL,0x1984ebdb5b7d0LL),
+      reale(-4145LL,0x738eecfd059a0LL),reale(-5401LL,0x3e401d7ac5070LL),
+      reale(-7154LL,0x4d3d93e97d4c0LL),reale(-9654LL,0x61710b1830f10LL),
+      reale(-13309LL,0x14f6511b6e7e0LL),reale(-18811LL,0xa9efbf01dd7b0LL),
+      reale(-27376LL,0x3ca1f04c03700LL),reale(-41261LL,0x8280be03d8e50LL),
+      reale(-64894LL,0x38569bebc6620LL),reale(-107623LL,0x1fd1dea8216f0LL),
+      reale(-191036LL,0x93175f5e41940LL),reale(-371182LL,0x696775c8c5590LL),
+      reale(-818769LL,0x56e5b9559f460LL),reale(-0x216f40LL,0x6021c81002e30LL),
+      reale(-0x7de05cLL,0x1d8323ca49b80LL),
+      reale(-0x480a6b0LL,0xfaa33882684d0LL),
+      reale(0x1f1eeae6LL,0xf5aa540a8b2a0LL),
+      reale(-0x2dae4b1dLL,0x9baa65aef3d70LL),
+      reale(0x8daa6e0LL,0x8152775e2ddc0LL),
+      reale(0x16f66a07LL,0x81b301a133c10LL),
+      reale(-0xcb843b1LL,0x6f0317ba1c0e0LL),
+      reale(0x9b9ee4LL,0x255c7c31664b0LL),reale(0x14d790LL,0xd74a19c69db33LL),
+      reale(0x2dd761028LL,0x56b51693aedc3LL),
+      // _C4x[35]
+      reale(-4407LL,0x6c651a3683c0LL),reale(-5730LL,0xf079c145a4080LL),
+      reale(-7571LL,0xf56d81f7d3b40LL),reale(-10190LL,0x23c2d4a6cf700LL),
+      reale(-14012LL,0x28dbf9e776c0LL),reale(-19752LL,0xb116ccf06bd80LL),
+      reale(-28666LL,0x593e72ff04e40LL),reale(-43079LL,0x1712fad5bac00LL),
+      reale(-67544LL,0xf2beaf522d9c0LL),reale(-111635LL,0x4d71aa44fda80LL),
+      reale(-197390LL,0x332297afa3140LL),reale(-381766LL,0xdd1ff46476100LL),
+      reale(-837259LL,0xf5fff11016cc0LL),reale(-0x21ed42LL,0x2c2ea4cf65780LL),
+      reale(-0x7e558fLL,0x3d724ddb3a440LL),
+      reale(-0x4718fdeLL,0x487e91ab0d600LL),
+      reale(0x1dd9f8d6LL,0x3891b999befc0LL),
+      reale(-0x293cbff3LL,0x6e75d22baf480LL),
+      reale(0x451adb3LL,0xa045596356740LL),
+      reale(0x164b806dLL,0x41b777218cb00LL),
+      reale(-0xa4d3921LL,0x9d46b7a0b22c0LL),
+      reale(0x1c8780cLL,0x80284d25e7180LL),
+      reale(-0x2598f14LL,0xbf2cc7b983a40LL),
+      reale(0xd06ba8LL,0x68e501c228ffeLL),
+      reale(0x2dd761028LL,0x56b51693aedc3LL),
+      // _C4x[36]
+      reale(-7901LL,0x9c73992757ce0LL),reale(-10614LL,0xd53cf6d36350LL),
+      reale(-14566LL,0x1ef851d8afe40LL),reale(-20490LL,0xf1527631beb30LL),
+      reale(-29671LL,0x7b631f71207a0LL),reale(-44483LL,0x14e0fdd8d6110LL),
+      reale(-69563LL,0xf4203011ca500LL),reale(-114633LL,0xf68a1705e90f0LL),
+      reale(-201990LL,0x6bee28eeee260LL),reale(-389022LL,0xcc2800fcb46d0LL),
+      reale(-848629LL,0x3fd7a13dccbc0LL),reale(-0x222512LL,0x4682635aa4eb0LL),
+      reale(-0x7de601LL,0x6ecd778286d20LL),
+      reale(-0x45d4511LL,0xf0e001fa37490LL),
+      reale(0x1ca320dfLL,0x383b5471fd280LL),
+      reale(-0x25b322ebLL,0x35ca6e1458470LL),
+      reale(0x1904910LL,0x13df159bb07e0LL),
+      reale(0x150d751fLL,0x101c2c33c4a50LL),
+      reale(-0x8cc24e2LL,0x85cc800fa1940LL),
+      reale(0x277d0feLL,0x88562e0e69230LL),
+      reale(-0x2b67a1fLL,0xdd4a4034312a0LL),
+      reale(0x7911a2LL,0xa8c8e9d8c2810LL),reale(0x1c8666LL,0xdc5c61854a479LL),
+      reale(0x2dd761028LL,0x56b51693aedc3LL),
+      // _C4x[37]
+      reale(-15014LL,0x996357a240100LL),reale(-21082LL,0x80b2866e67c00LL),
+      reale(-30471LL,0x424a7828b2700LL),reale(-45588LL,0x1b4524ae4e600LL),
+      reale(-71125LL,0xf9b915ca49d00LL),reale(-116892LL,0x75249d55b3000LL),
+      reale(-205316LL,0xe55d54d138300LL),reale(-393885LL,0xb472712587a00LL),
+      reale(-855001LL,0xd055aacfaf900LL),reale(-0x222ddfLL,0x4cee9b3ebe400LL),
+      reale(-0x7ceb8dLL,0x68cb818fe1f00LL),
+      reale(-0x446b5a4LL,0x80eee8c648e00LL),
+      reale(0x1b83421dLL,0x9a516d5401500LL),
+      reale(-0x22d58608LL,0x1edba42919800LL),
+      reale(-0x32966aLL,0xfebeef063fb00LL),
+      reale(0x13c8f42eLL,0x28269ca022200LL),
+      reale(-0x7cff4beLL,0x811852f8cf100LL),
+      reale(0x2cffb8aLL,0x227a729454c00LL),
+      reale(-0x2ad1586LL,0xf632e4d5e1700LL),
+      reale(0xcf2191LL,0xcd96a182a3600LL),reale(-0xbe8440LL,0xba24e95fa8d00LL),
+      reale(0x59b7b6LL,0x70bef82b8988LL),
+      reale(0x2dd761028LL,0x56b51693aedc3LL),
+      // _C4x[38]
+      reale(-31117LL,0xa312a60d595c0LL),reale(-46467LL,0xc610e9b75c3d0LL),
+      reale(-72340LL,0xec4138ed66a60LL),reale(-118592LL,0x1698fb11dc3f0LL),
+      reale(-207682LL,0xcd8d22096b00LL),reale(-396976LL,0xaa795c025ea10LL),
+      reale(-857777LL,0x69561c6b2cba0LL),reale(-0x22169fLL,0x6389fad8eaa30LL),
+      reale(-0x7b9caaLL,0xfe0c48806c040LL),
+      reale(-0x42f6ddeLL,0x38b89568d7850LL),
+      reale(0x1a7bcca5LL,0x84d59896b7ce0LL),
+      reale(-0x20784ea7LL,0x9f54bd1f6c870LL),
+      reale(-0x15e505bLL,0xa03881a7b3580LL),
+      reale(0x12a1264fLL,0xea91e4bc80e90LL),
+      reale(-0x71f080fLL,0x9aa3856861e20LL),
+      reale(0x2f78fa3LL,0x69cfb591beb0LL),
+      reale(-0x28f2ec6LL,0x52aaa20546ac0LL),
+      reale(0x1063cc7LL,0x9567a8e814cd0LL),
+      reale(-0x1029825LL,0x36be5fae84f60LL),reale(0x44c702LL,0xb6bfddcb2cf0LL),
+      reale(0x10d532LL,0xee71952935057LL),
+      reale(0x2dd761028LL,0x56b51693aedc3LL),
+      // _C4x[39]
+      reale(-73283LL,0x7753088b32340LL),reale(-119857LL,0x503bdcd29680LL),
+      reale(-209311LL,0x36a252c262fc0LL),reale(-398729LL,0x3cdb9024cf400LL),
+      reale(-857928LL,0x73576020f6840LL),reale(-0x21e950LL,0x80dd570861180LL),
+      reale(-0x7a1b6dLL,0x5bfe351eff4c0LL),
+      reale(-0x41842d1LL,0x30fa22d2e1700LL),
+      reale(0x198b7f5eLL,0x4af905b8fd40LL),
+      reale(-0x1e7c93feLL,0x558506c252c80LL),
+      reale(-0x22b9cddLL,0x5ae96a3eba9c0LL),
+      reale(0x119beacaLL,0x62539c3ab7a00LL),
+      reale(-0x69b336eLL,0x85395d792240LL),
+      reale(0x304d69aLL,0xf42d6a1912780LL),
+      reale(-0x26fd218LL,0x37da509e28ec0LL),
+      reale(0x127dc4bLL,0xc578a6be65d00LL),
+      reale(-0x11b073eLL,0xcf4fbcc191740LL),
+      reale(0x703610LL,0xa4f0c77ab4280LL),reale(-0x542f99LL,0x39bdbba9de3c0LL),
+      reale(0x2e519cLL,0x619b33f1391d2LL),
+      reale(0x2dd761028LL,0x56b51693aedc3LL),
+      // _C4x[40]
+      reale(-210363LL,0x894c962cfda20LL),reale(-399460LL,0xe15065310f550LL),
+      reale(-856142LL,0x1dd6068d45900LL),reale(-0x21accbLL,0xf106ca37844b0LL),
+      reale(-0x787db1LL,0x94f439683f7e0LL),
+      reale(-0x401a6b3LL,0xd339cce20e210LL),
+      reale(0x18b03a63LL,0x2b5605d0252c0LL),
+      reale(-0x1ccc4710LL,0xf5fd24e8a2970LL),
+      reale(-0x2bb69a8LL,0x3e7fbdda905a0LL),
+      reale(0x10b6e02dLL,0xa9af8baa076d0LL),
+      reale(-0x6341c45LL,0x856e0a4adac80LL),
+      reale(0x303e0d6LL,0x9d940e3bb2630LL),
+      reale(-0x2535447LL,0x9596aaa47e360LL),
+      reale(0x13b8847LL,0x5f0f1f3a9390LL),
+      reale(-0x1221aedLL,0xbe96a86974640LL),
+      reale(0x8c6533LL,0xc21b589061af0LL),reale(-0x7cca79LL,0x52e1754897120LL),
+      reale(0x28d6e8LL,0xd6956da2a1850LL),reale(661843LL,0xede00571b821dLL),
+      reale(0x2dd761028LL,0x56b51693aedc3LL),
+      // _C4x[41]
+      reale(-852920LL,0x957d30569cf80LL),reale(-0x2165d8LL,0xdf35a289d0800LL),
+      reale(-0x76d1b2LL,0xcbde23356e080LL),
+      reale(-0x3ebd49cLL,0xe2a9f41fb6f00LL),
+      reale(0x17e7b72bLL,0x8c48395cfc980LL),
+      reale(-0x1b576830LL,0xdde8a3cd90600LL),
+      reale(-0x321c36bLL,0xab56475d73a80LL),
+      reale(0xfedb7e2LL,0x9f71e62ba7d00LL),
+      reale(-0x5e066beLL,0xa982ebb2fe380LL),
+      reale(0x2fb3d49LL,0x7efcd81e48400LL),
+      reale(-0x23a48a7LL,0x54086addc7480LL),
+      reale(0x1464878LL,0xfc61768bbcb00LL),
+      reale(-0x121cb8cLL,0xadcb9cd1f9d80LL),
+      reale(0x9ec922LL,0xe1fef86250200LL),reale(-0x915091LL,0x1a8199afc0e80LL),
+      reale(0x431bbdLL,0x8a16c0de4d900LL),reale(-0x2cbd42LL,0x58c787b347780LL),
+      reale(0x1aeb62LL,0xc6396b58af30cLL),
+      reale(0x2dd761028LL,0x56b51693aedc3LL),
+      // _C4x[42]
+      reale(-0x7520d0LL,0xa4d593a093f00LL),
+      reale(-0x3d6e840LL,0xb30e02f756bd0LL),
+      reale(0x172fcf79LL,0x614b445047d20LL),
+      reale(-0x1a12258eLL,0x2cf605a6bef70LL),
+      reale(-0x36b5f45LL,0xf9506795e5f40LL),
+      reale(0xf3c2617LL,0x61702d3245910LL),
+      reale(-0x59a6acbLL,0xd6db4f4dda960LL),
+      reale(0x2ee8dc0LL,0xa4967a4d0acb0LL),
+      reale(-0x2245593LL,0x330fa794d1f80LL),
+      reale(0x14b53a7LL,0x3869a07cfee50LL),
+      reale(-0x11e3e06LL,0x30c37e68585a0LL),
+      reale(0xaab4d0LL,0x277eed08021f0LL),reale(-0x9bc884LL,0x43ccf6bb79fc0LL),
+      reale(0x54ae2dLL,0x5f33e35304b90LL),reale(-0x460d74LL,0x6f09191b631e0LL),
+      reale(0x19d34aLL,0x5de933ef26f30LL),reale(420297LL,0x50d0b3d8c1d9bLL),
+      reale(0x2dd761028LL,0x56b51693aedc3LL),
+      // _C4x[43]
+      reale(0x1686954eLL,0xab0ca9f0672c0LL),
+      reale(-0x18f39aa3LL,0xf7f66145ac080LL),
+      reale(-0x3a0925aLL,0xc1505cc0bac40LL),
+      reale(0xe9e6ab6LL,0xf5560cf897d00LL),
+      reale(-0x55e9003LL,0x4be7d5e16f9c0LL),
+      reale(0x2dfded5LL,0xa87e22e4ae980LL),
+      reale(-0x210f9a6LL,0xd4fc0153d9340LL),
+      reale(0x14cb451LL,0xa9bac4593e00LL),
+      reale(-0x1194a26LL,0x8a1a78ee4b0c0LL),
+      reale(0xb2463cLL,0x18da60c9eb280LL),reale(-0xa0e480LL,0x8e87a70218a40LL),
+      reale(0x60aabfLL,0xce8110cc57f00LL),reale(-0x54f93fLL,0xe5935645957c0LL),
+      reale(0x2b1f5cLL,0xf4ab3cac7db80LL),reale(-0x1ab50dLL,0xd007feba15140LL),
+      reale(0x10fe97LL,0xd17a5fb748e66LL),
+      reale(0x2dd761028LL,0x56b51693aedc3LL),
+      // _C4x[44]
+      reale(-0x3c6fc9bLL,0xd34acc7afb160LL),
+      reale(0xe116580LL,0xed659df2db350LL),
+      reale(-0x52a727eLL,0xffad8c41641c0LL),
+      reale(0x2d05c8bLL,0xc1161d91d1e30LL),
+      reale(-0x1ffbf42LL,0xc2e0c3245ca20LL),
+      reale(0x14bb8abLL,0xd5c3b2c9df710LL),
+      reale(-0x113cc2bLL,0xdedc39fe27680LL),
+      reale(0xb6df41LL,0x3d2e52a8729f0LL),reale(-0xa301b9LL,0xe303054ea72e0LL),
+      reale(0x68e7b4LL,0xeec2e9924a2d0LL),reale(-0x5dfa39LL,0xc76d5123eb40LL),
+      reale(0x371da9LL,0x775a08e9d4db0LL),reale(-0x2b6819LL,0xb0252b48b0ba0LL),
+      reale(0x113fb3LL,0xe52285ff91690LL),reale(281319LL,0xf8ed6ce679421LL),
+      reale(0x2dd761028LL,0x56b51693aedc3LL),
+      // _C4x[45]
+      reale(-0x4fc6b00LL,0x820ca48963200LL),
+      reale(0x2c0b360LL,0x6a662d0fec800LL),
+      reale(-0x1f04678LL,0xf40bb5c19fe00LL),
+      reale(0x14938faLL,0xbd1dba7599c00LL),
+      reale(-0x10e2e1eLL,0x24347398b6a00LL),
+      reale(0xb96b4fLL,0x7c587583d3000LL),reale(-0xa36311LL,0x5867f9190b600LL),
+      reale(0x6e8d73LL,0x8aa6d7e27c400LL),reale(-0x63715bLL,0x600d3b9d02200LL),
+      reale(0x3f9bdfLL,0x7a21919979800LL),reale(-0x3632afLL,0xd9fb83aefee00LL),
+      reale(0x1d4599LL,0x786d4fd8aec00LL),reale(-0x1143f8LL,0x8185d98965a00LL),
+      reale(747310LL,0xbb693903a2f10LL),reale(0x2dd761028LL,0x56b51693aedc3LL),
+      // _C4x[46]
+      reale(-0x1e24384LL,0x64d59dbaed640LL),
+      reale(0x145c2e7LL,0xec111ef51efd0LL),
+      reale(-0x108a397LL,0x394a627ab09e0LL),reale(0xba89acLL,0xad54b9902f0LL),
+      reale(-0xa2bd3cLL,0x34d362ea79980LL),reale(0x725efbLL,0x2bbe593f97c10LL),
+      reale(-0x66b513LL,0xa42eeb676d920LL),reale(0x45b201LL,0xbb95797dfef30LL),
+      reale(-0x3d5447LL,0xf1e804c231cc0LL),reale(0x25e556LL,0x18261977df050LL),
+      reale(-0x1cd4a6LL,0xdad5c47c0b860LL),reale(789608LL,0x3727b34041370LL),
+      reale(196748LL,0x5030b26b63d7fLL),reale(0x2dd761028LL,0x56b51693aedc3LL),
+      // _C4x[47]
+      reale(-0x1034534LL,0xc405c56ad5a40LL),
+      reale(0xbaa7b6LL,0xc216625651e80LL),reale(-0xa17973LL,0x357b3fbb388c0LL),
+      reale(0x74e090LL,0x22fef68736200LL),reale(-0x688f11LL,0x40b466cfaf340LL),
+      reale(0x4a13daLL,0x78ae9dfa88580LL),reale(-0x421a5dLL,0xa7af3ee26e1c0LL),
+      reale(0x2c33dbLL,0x8330e6242d100LL),reale(-0x24c91aLL,0xc3b1b4d8a9c40LL),
+      reale(0x14bed6LL,0x6f5bc7e308c80LL),reale(-775170LL,0x8fa57bc96ac0LL),
+      reale(525423LL,0x9fd72933d2d3aLL),reale(0x2dd761028LL,0x56b51693aedc3LL),
+      // _C4x[48]
+      reale(-0x9fd70bLL,0x7f1c067b14aa0LL),reale(0x766e0aLL,0x6cb2d37d31d50LL),
+      reale(-0x697adaLL,0xfda8b47ab7080LL),reale(0x4d39c0LL,0xbff13b9f8e7b0LL),
+      reale(-0x454f1bLL,0x637a9e07aa660LL),reale(0x30df9aLL,0x45874de1c0010LL),
+      reale(-0x2a5d4cLL,0xffdcce166a840LL),reale(0x1b2c49LL,0x24244086de270LL),
+      reale(-0x14295dLL,0x482bbfb553220LL),reale(572110LL,0xf0d923e3d0ad0LL),
+      reale(142666LL,0x15ad08c690505LL),reale(0x2dd761028LL,0x56b51693aedc3LL),
+      // _C4x[49]
+      reale(-0x69c69cLL,0xa63944a9080LL),reale(0x4f76d4LL,0x9d4c81592dc00LL),
+      reale(-0x4771c3LL,0x210630fab5780LL),reale(0x345bb6LL,0xdcd7f0ab97d00LL),
+      reale(-0x2e5455LL,0x14687e301c680LL),reale(0x200137LL,0x35c6f48ae00LL),
+      reale(-0x1a294cLL,0x54bab8747ad80LL),reale(997568LL,0xe75b4df283f00LL),
+      reale(-555002LL,0xca908d5b6dc80LL),reale(383325LL,0x3033ad4799914LL),
+      reale(0x2dd761028LL,0x56b51693aedc3LL),
+      // _C4x[50]
+      reale(-0x184705LL,0xbaef75047f680LL),reale(0x125255LL,0xfaaefe8d2aff0LL),
+      reale(-0x1063bfLL,0xdbb4e733e02e0LL),reale(779463LL,0x6e55e2794e4d0LL),
+      reale(-667444LL,0x80d8c24af2b40LL),reale(440073LL,0xbd38cdf5ffbb0LL),
+      reale(-320491LL,0x4f6fd43f9bba0LL),reale(142410LL,0x1eb038cc00090LL),
+      reale(35531LL,0x5cce3f7afbb81LL),reale(0xf47cb00dLL,0x723c5cdbe4f41LL),
+      // _C4x[51]
+      reale(-223721LL,0x5258f2178e240LL),reale(168212LL,0x95f7a36b8e780LL),
+      reale(-147709LL,0xb9c628ebecec0LL),reale(104570LL,0x398040c96dd00LL),
+      reale(-84305LL,0xd835d01d0d740LL),reale(50205LL,0xd862a9f308280LL),
+      reale(-27427LL,0x4181f76ca23c0LL),reale(19210LL,0x9794de13dcf52LL),
+      reale(0x30e5bccfLL,0x7d3f45c59430dLL),
+      // _C4x[52]
+      reale(-27300LL,0xe18051b90d520LL),reale(20250LL,0xb050f61211530LL),
+      reale(-17171LL,0xe335304bf84c0LL),reale(11560LL,0x5557506ac7a50LL),
+      reale(-8301LL,0xe11e2013f0c60LL),reale(3760LL,0xc5da39149a170LL),
+      real(0x3aaaad07e2dbe15fLL),reale(0x86e3b09LL,0x4a8f52a67aa75LL),
+      // _C4x[53]
+      real(-0x26adfa4c2bcf8500LL),real(0x1be7e116f09bc400LL),
+      real(-0x1641521374362300LL),real(0xd7dd4a2b1831200LL),
+      real(-0x7449d087ac65100LL),real(0x525502d56a2a1d8LL),
+      reale(0x459eceLL,0xc0573436eb2ebLL),
+      // _C4x[54]
+      real(-0x226e68a74f6c2c0LL),real(0x178fbd94c6e4130LL),
+      real(-0x10bafa7048ffb60LL),real(0x7b204e43552d10LL),
+      real(0x1ebd785c76c649LL),reale(369943LL,0xaebaf6655156dLL),
+      // _C4x[55]
+      real(-0x780f9f651c0LL),real(0x49cd6538080LL),real(-0x275396e6f40LL),
+      real(0x1c1406225eaLL),real(0x1e2d6465e2b066fLL),
+      // _C4x[56]
+      real(-0x2f7e4f2fca0LL),real(0x161b06db8f0LL),real(0x5852679557LL),
+      real(0x145a25f15d59339LL),
+      // _C4x[57]
+      real(-0x7815280LL),real(0x564fffcLL),real(0x73d4d30e25bLL),
+      // _C4x[58]
+      real(917561LL),real(0x3fc3dd0781LL),
+      // _C4x[59]
+      real(0x24546bc28a93e0LL),real(0x2f6c4d745b8e40LL),
+      real(0x3e90f252c210a0LL),real(0x5380c389acd700LL),
+      real(0x70da9adde57d60LL),real(0x9aa08aca5a9fc0LL),
+      real(0xd7127fe199fa20LL),real(0x130248120008880LL),
+      real(0x1b6103e1c56a6e0LL),real(0x283fa247b6e3140LL),
+      real(0x3c89da46fe8a3a0LL),real(0x5d71643158b3a00LL),
+      real(0x948b363af771060LL),real(0xf445a32263b42c0LL),
+      real(0x1a1d56e9fe070d20LL),real(0x2ecb290f0241eb80LL),
+      real(0x58a5da95527fb9e0LL),reale(2876LL,0x680343126d440LL),
+      reale(6354LL,0x3e35c062e36a0LL),reale(15689LL,0x7d2910c199d00LL),
+      reale(45107LL,0x47d6102c9a360LL),reale(162386LL,0x35cf6d6d5e5c0LL),
+      reale(857038LL,0x54e3334f72020LL),reale(0xb1da29LL,0x4f45203874e80LL),
+      reale(-0x7d0d651LL,0x44365584dcce0LL),
+      reale(0x1694323eLL,0x9046972ad7740LL),
+      reale(-0x18d63745LL,0x2e18c01dac9a0LL),
+      reale(0x95054b9LL,0xceb6b7f4df464LL),
+      reale(0x4c66f7043LL,0x3b2dd04b78c45LL),
+      // _C4x[60]
+      real(0xc4c78b5f73e700LL),real(0x1046756e5efb980LL),
+      real(0x15cbc98d9fba400LL),real(0x1d9279681ffce80LL),
+      real(0x28b2f34344c6100LL),real(0x38e6214caec8380LL),
+      real(0x50f0f0d0c655e00LL),real(0x7563dc0de2d1880LL),
+      real(0xadfad5eb325db00LL),real(0x1083ab8775a8cd80LL),
+      real(0x19c9d8efc1ad1800LL),real(0x29945e7f0056e280LL),
+      real(0x4594bf2102ba5500LL),real(0x79a9d12705de9780LL),
+      reale(3587LL,0xb2b264e0cd200LL),reale(7053LL,0x1d58043372c80LL),
+      reale(15040LL,0x44c8073c3cf00LL),reale(35667LL,0x702872e47e180LL),
+      reale(97902LL,0x6929355be8c00LL),reale(334186LL,0x1d1de4e87f680LL),
+      reale(0x19542bLL,0xed2beccfc4900LL),reale(0x1421dbfLL,0x53559189eab80LL),
+      reale(-0xd3da750LL,0x738f3f8fc4600LL),
+      reale(0x24d22a8dLL,0x694fabb034080LL),
+      reale(-0x2dda3ea7LL,0x902db171dc300LL),
+      reale(0x1b183c4bLL,0x1387e899cf580LL),
+      reale(-0x6358dd2LL,0xcb8630076b268LL),
+      reale(0x4c66f7043LL,0x3b2dd04b78c45LL),
+      // _C4x[61]
+      real(0x2b077c634ede840LL),real(0x39e80232e455600LL),
+      real(0x4f004399e9803c0LL),real(0x6d6a8dd96e7d980LL),
+      real(0x9a16639c690ff40LL),real(0xdd0eb6a29ee1d00LL),
+      real(0x143ca2e567649ac0LL),real(0x1e583a687f6ce080LL),
+      real(0x2ebb5ae27bca9640LL),real(0x4a366ef6d0a8e400LL),
+      real(0x7a244f6987aeb1c0LL),reale(3355LL,0xff6a995ee780LL),
+      reale(6059LL,0x95d9afc38ad40LL),reale(11647LL,0x91c4ac30bab00LL),
+      reale(24220LL,0xbe377a4d448c0LL),reale(55835LL,0xd9394a033ee80LL),
+      reale(148417LL,0x27a782b394440LL),reale(488256LL,0xe5126fdac7200LL),
+      reale(0x237053LL,0xb040a0735fc0LL),reale(0x1ab8c92LL,0x3d9464fe1f580LL),
+      reale(-0x10652586LL,0xd6f2b98ea5b40LL),
+      reale(0x28ea01e9LL,0x6984a82213900LL),
+      reale(-0x286594f9LL,0x60904c969f6c0LL),
+      reale(0x9081419LL,0x682a2ddefc80LL),reale(0xa12db56LL,0xfd6a53329f240LL),
+      reale(-0x5148b4fLL,0xec568463291f8LL),
+      reale(0x4c66f7043LL,0x3b2dd04b78c45LL),
+      // _C4x[62]
+      real(0x7d5242068d47400LL),real(0xac3832c9e621080LL),
+      real(0xf0840d5e59cf500LL),real(0x155fabefd3362980LL),
+      real(0x1f01ffac4c30b600LL),real(0x2e0489bbd6aca280LL),
+      real(0x461560bdbc05f700LL),real(0x6df6210d29c3bb80LL),
+      reale(2857LL,0xf2e1b87d2f800LL),reale(4836LL,0xd8d8f4249b480LL),
+      reale(8600LL,0x17271d36df900LL),reale(16248LL,0x163bc1ffccd80LL),
+      reale(33146LL,0xc23750bad3a00LL),reale(74792LL,0x260310eab4680LL),
+      reale(194024LL,0xef2cdae46fb00LL),reale(620545LL,0xfcf47db535f80LL),
+      reale(0x2b8b50LL,0x7228ad7b17c00LL),reale(0x1f74e40LL,0x1c4ce82435880LL),
+      reale(-0x122cfb29LL,0x7c10d8d02fd00LL),
+      reale(0x28ff4a54LL,0xf9e0f9c397180LL),
+      reale(-0x1f608828LL,0x5e31db7d1be00LL),
+      reale(-0x6088182LL,0x4f9a39083ea80LL),
+      reale(0x1483dee1LL,0xf79ee4a13ff00LL),
+      reale(-0x908141aLL,0xf97d5d2210380LL),
+      reale(0xe96e56LL,0x380aba4a19708LL),
+      reale(0x4c66f7043LL,0x3b2dd04b78c45LL),
+      // _C4x[63]
+      real(0x14f52a063dc5fc20LL),real(0x1d93a1e9ceb48740LL),
+      real(0x2a911c303b723a60LL),real(0x3ea26bba66a54980LL),
+      real(0x5e84fad71b3608a0LL),reale(2349LL,0x85d3117e94bc0LL),
+      reale(3776LL,0x1c9d51cf2c6e0LL),reale(6317LL,0x5193932d16e00LL),
+      reale(11091LL,0xc7716ff97d520LL),reale(20667LL,0xe33c2c4a29040LL),
+      reale(41523LL,0x1a30a42ae9360LL),reale(92100LL,0xbd0a1f1419280LL),
+      reale(234309LL,0x70b77706661a0LL),reale(732507LL,0x72fafb4df54c0LL),
+      reale(0x320008LL,0xe462aef209fe0LL),reale(0x22dbcdeLL,0x4c4d10a4b700LL),
+      reale(-0x132620deLL,0x8df40e97cae20LL),
+      reale(0x279e24c2LL,0x65892c55e9940LL),
+      reale(-0x17be2cbaLL,0xd47d10be3ec60LL),
+      reale(-0xd74bd77LL,0xdbfaff29db80LL),
+      reale(0x13b0d7ddLL,0xbb7252695baa0LL),
+      reale(-0x4e95abdLL,0xc80efb51f5dc0LL),
+      reale(-0x4bd947LL,0xad40a333378e0LL),
+      reale(-0x32055cLL,0x61b48ef01f1ecLL),
+      reale(0x4c66f7043LL,0x3b2dd04b78c45LL),
+      // _C4x[64]
+      real(0x367dbe5da7953e00LL),real(0x4f9a921ac6fb1900LL),
+      real(0x773454548df74400LL),reale(2938LL,0xbc18faed4af00LL),
+      reale(4681LL,0x407a350a64a00LL),reale(7756LL,0xa0ed83ee90500LL),
+      reale(13477LL,0x2fbfd87edd000LL),reale(24826LL,0x9ea174e739b00LL),
+      reale(49249LL,0xd3391f1d95600LL),reale(107696LL,0xcac2013cff100LL),
+      reale(269571LL,0xe064d3a745c00LL),reale(826840LL,0x70825da398700LL),
+      reale(0x3724baLL,0x7ef0aa40a6200LL),reale(0x254ed8eLL,0xc5673698bdd00LL),
+      reale(-0x13a3a62cLL,0xac09a5366e800LL),
+      reale(0x25c56c79LL,0xfeb5c44027300LL),
+      reale(-0x11eb40c6LL,0x130f604156e00LL),
+      reale(-0x10bb26e7LL,0xf311f5df8c900LL),
+      reale(0x10d91d96LL,0x7b726e8a17400LL),
+      reale(-0x2c8e4a1LL,0xee20173aa5f00LL),
+      reale(0x1670215LL,0x90f427ad67a00LL),
+      reale(-0x2047cb8LL,0xa153ca0f2b500LL),
+      reale(0x71c5e9LL,0x7c1f0b332cab0LL),
+      reale(0x4c66f7043LL,0x3b2dd04b78c45LL),
+      // _C4x[65]
+      reale(2297LL,0xe5959dcaf9680LL),reale(3515LL,0xaf44e93439a00LL),
+      reale(5557LL,0xf844363205d80LL),reale(9134LL,0x3148872cf3100LL),
+      reale(15730LL,0x1f27208afe480LL),reale(28695LL,0xbe2e993314800LL),
+      reale(56314LL,0x2c7b05479ab80LL),reale(121661LL,0x287926e675f00LL),
+      reale(300328LL,0xfc8a376113280LL),reale(906274LL,0xf1fb199eef600LL),
+      reale(0x3b3ff8LL,0x5f528c391f980LL),reale(0x2711f7cLL,0xe6e08c5558d00LL),
+      reale(-0x13d5918eLL,0x7d7d5b5af8080LL),
+      reale(0x23da480bLL,0xf6ba284c8a400LL),
+      reale(-0xd8ea982LL,0x9bd02ddc54780LL),
+      reale(-0x11f820b7LL,0x41a6893a5bb00LL),
+      reale(0xe32cb81LL,0x57c5b91e6ce80LL),
+      reale(-0x20fb023LL,0xbe1353b0a5200LL),
+      reale(0x27c3b47LL,0xee870caef9580LL),
+      reale(-0x1fa5626LL,0xf5ba90863e900LL),
+      reale(0x157973LL,0x27b05f0931c80LL),reale(329283LL,0x26010fabff570LL),
+      reale(0x4c66f7043LL,0x3b2dd04b78c45LL),
+      // _C4x[66]
+      reale(6397LL,0xfcd62c9faa400LL),reale(10440LL,0x3fc8ff8e75700LL),
+      reale(17841LL,0xb7bede1dba00LL),reale(32272LL,0x7935213063d00LL),
+      reale(62742LL,0x8933a9bfd5000LL),reale(134128LL,0x223daf23d6300LL),
+      reale(327129LL,0xfca43cca0e600LL),reale(973230LL,0x31dda9e44900LL),
+      reale(0x3e8918LL,0x3528b970ffc00LL),reale(0x2854891LL,0xe5d54d5326f00LL),
+      reale(-0x13d86e35LL,0x130258a921200LL),
+      reale(0x2204540aLL,0x2878cf4ff5500LL),
+      reale(-0xa4650f0LL,0xa8774aceea800LL),
+      reale(-0x12377ba5LL,0x639a033827b00LL),
+      reale(0xc19598aLL,0xbd0aab0ad3e00LL),
+      reale(-0x1ebd7dbLL,0xc0fbf92136100LL),
+      reale(0x2f4e7c7LL,0xc747777555400LL),
+      reale(-0x1a78aa1LL,0xcdc4004e98700LL),
+      reale(0x74c561LL,0x1c15203ae6a00LL),reale(-0xb3ca97LL,0xd487d80dc6d00LL),
+      reale(0x3a28edLL,0x362856b8e6d30LL),
+      reale(0x4c66f7043LL,0x3b2dd04b78c45LL),
+      // _C4x[67]
+      reale(19809LL,0x63304b335a660LL),reale(35566LL,0xcb4164f348e40LL),
+      reale(68577LL,0xe86c972757e20LL),reale(145245LL,0xbc9cc7446e200LL),
+      reale(350489LL,0x7e29a3d4285e0LL),reale(0xfb676LL,0x45087f82835c0LL),
+      reale(0x412afaLL,0x2203011585da0LL),reale(0x2937edeLL,0xa65b618eca980LL),
+      reale(-0x13bdb295LL,0x576332adca560LL),
+      reale(0x205195efLL,0x200e3727c5d40LL),
+      reale(-0x7c632f7LL,0xc474e2af2fd20LL),
+      reale(-0x11fc547cLL,0xd3b27c9077100LL),
+      reale(0xa7f0802LL,0x8ddfe73d104e0LL),
+      reale(-0x1fbd3e8LL,0x73ed1d57a04c0LL),
+      reale(0x3152629LL,0x23cc103525ca0LL),
+      reale(-0x16778e7LL,0x8901f18f03880LL),
+      reale(0xca2edcLL,0x69c1c450ca460LL),reale(-0xdeb585LL,0x2757f5c2a2c40LL),
+      reale(0x1c3526LL,0x7d3564e37c20LL),reale(506231LL,0x2a6100a6a6db4LL),
+      reale(0x4c66f7043LL,0x3b2dd04b78c45LL),
+      // _C4x[68]
+      reale(73868LL,0xf53613318fd00LL),reale(155158LL,0x6bea1fc037e80LL),
+      reale(370865LL,0xe686995a3a800LL),reale(0x10711bLL,0xb6b00d00e5180LL),
+      reale(0x4346d6LL,0x1d5f244685300LL),reale(0x29d4026LL,0xf94485a638480LL),
+      reale(-0x139055a1LL,0xdab4c7fcfbe00LL),
+      reale(0x1ec53d8aLL,0x48cfde1d3d780LL),
+      reale(-0x5d7cb8fLL,0x38dd86fe2a900LL),
+      reale(-0x1187fe00LL,0xbe22a3400a80LL),
+      reale(0x946226dLL,0xc58331ae9d400LL),
+      reale(-0x218a06fLL,0x93c7df2f8dd80LL),
+      reale(0x30a8d25LL,0xfcae9f00dff00LL),
+      reale(-0x140f356LL,0x94f7bf31f1080LL),
+      reale(0x103f195LL,0xa0ab037f7ea00LL),
+      reale(-0xdd91faLL,0xdf676e1036380LL),reale(0x41f2a0LL,0xda1143d705500LL),
+      reale(-0x51369eLL,0x61264bb869680LL),reale(0x210ac3LL,0xa5af00ad58358LL),
+      reale(0x4c66f7043LL,0x3b2dd04b78c45LL),
+      // _C4x[69]
+      reale(388658LL,0x19c7c6f8ea2c0LL),reale(0x110f13LL,0xaadcbdb38ac00LL),
+      reale(0x44f688LL,0xaee28ee393540LL),reale(0x2a3a167LL,0xe09b9f50af680LL),
+      reale(-0x135760f0LL,0xfa3ff451d67c0LL),
+      reale(0x1d5df81cLL,0x7d1cc3fd18100LL),
+      reale(-0x454aadbLL,0x4bd7f940e7a40LL),
+      reale(-0x10fb9d46LL,0xa8337b5aa8b80LL),
+      reale(0x854bb7cLL,0x33e950dc3acc0LL),
+      reale(-0x233fdffLL,0x108f3ffa45600LL),
+      reale(0x2ed8284LL,0xa052562f03f40LL),
+      reale(-0x12c4f6cLL,0x455afdd952080LL),
+      reale(0x125c4c6LL,0xc3af9265b71c0LL),
+      reale(-0xd1e3eeLL,0xd0f69f3f32b00LL),reale(0x64b5a8LL,0x6565773f88440LL),
+      reale(-0x71df96LL,0x40467d1acb580LL),reale(0x162aa7LL,0x6b2cd84feb6c0LL),
+      reale(390635LL,0x965de9321fbe8LL),reale(0x4c66f7043LL,0x3b2dd04b78c45LL),
+      // _C4x[70]
+      reale(0x464e57LL,0xc9d7900c88800LL),reale(0x2a76e7cLL,0x61b96ac1eb380LL),
+      reale(-0x13176d8fLL,0x5d892cbaf1700LL),
+      reale(0x1c18ba77LL,0x4d0623cc86a80LL),
+      reale(-0x321a1a4LL,0xbfb0e5a4f6600LL),
+      reale(-0x10682b73LL,0xccb744abc180LL),
+      reale(0x7976d08LL,0xbf0504ec13500LL),
+      reale(-0x2499455LL,0x8b7cc14387880LL),
+      reale(0x2ca231aLL,0x6a3245e5c4400LL),
+      reale(-0x122405bLL,0xc425eef0e4f80LL),
+      reale(0x136dcbaLL,0xf7fc04d85300LL),reale(-0xc63e4eLL,0x7da8fffdd0680LL),
+      reale(0x7fc999LL,0xba502a56d2200LL),reale(-0x7cedeaLL,0xf72b757445d80LL),
+      reale(0x2b02dcLL,0x7113503f27100LL),reale(-0x2b403fLL,0xdfc70fb41480LL),
+      reale(0x146a3dLL,0xc906f381aecf8LL),
+      reale(0x4c66f7043LL,0x3b2dd04b78c45LL),
+      // _C4x[71]
+      reale(-0x12d3870aLL,0xfed855e046aa0LL),
+      reale(0x1af1fec8LL,0x32f06289dc340LL),
+      reale(-0x22b4154LL,0x36fa2d22f43e0LL),
+      reale(-0xfd64a70LL,0xbeb3c369ad080LL),
+      reale(0x70055d1LL,0xb44ff33f8ed20LL),
+      reale(-0x258d145LL,0x461ade3a39dc0LL),
+      reale(0x2a627afLL,0x98c20ae94660LL),
+      reale(-0x11de8e4LL,0x6f772f6318b00LL),
+      reale(0x13d399eLL,0x74772cb6e2fa0LL),
+      reale(-0xbd323eLL,0x3c6343e91f840LL),reale(0x9300dfLL,0x48be8ec7788e0LL),
+      reale(-0x7f0b78LL,0x70edb92224580LL),reale(0x3d3a8fLL,0x8a9763f933220LL),
+      reale(-0x415d9eLL,0xf1ea42a8bd2c0LL),reale(0x103fd6LL,0x3e0322e890b60LL),
+      reale(281445LL,0x189dacfa2913cLL),reale(0x4c66f7043LL,0x3b2dd04b78c45LL),
+      // _C4x[72]
+      reale(-0x1637607LL,0x7417d1cb19c00LL),
+      reale(-0xf4a37f1LL,0xed9b0a7914a00LL),
+      reale(0x685a0eeLL,0x9692235ce1800LL),
+      reale(-0x2626f1aLL,0x890b853866600LL),
+      reale(0x28415acLL,0x9175627089400LL),
+      reale(-0x11c63deLL,0xc9f2fbcc70200LL),
+      reale(0x13d0a4bLL,0x32d7f69c1000LL),reale(-0xb6c839LL,0xc3903196e1e00LL),
+      reale(0x9fb99bLL,0x890cbd2438c00LL),reale(-0x7dd5a8LL,0xa26a576d6ba00LL),
+      reale(0x4c02caLL,0x2e83f5dba0800LL),reale(-0x4c42fdLL,0xb72db6f1bd600LL),
+      reale(0x1dc01cLL,0xd6b9d613a8400LL),reale(-0x19bddbLL,0xbd7bf32987200LL),
+      reale(881316LL,0x5154c853b06e0LL),reale(0x4c66f7043LL,0x3b2dd04b78c45LL),
+      // _C4x[73]
+      reale(0x62050b9LL,0x98fe5a9192500LL),
+      reale(-0x2677ae9LL,0x333f7657aec00LL),
+      reale(0x264e114LL,0x6e617f3b73300LL),
+      reale(-0x11c1132LL,0x6aac92aa89a00LL),
+      reale(0x1390795LL,0xd39b96f5ec100LL),
+      reale(-0xb265f0LL,0x83eeab44f4800LL),reale(0xa78bc2LL,0x40d1adbe6cf00LL),
+      reale(-0x7bab0eLL,0xb5bcc4049f600LL),reale(0x575fc7LL,0xc3b2b2965d00LL),
+      reale(-0x51597cLL,0x5baa627f3a400LL),reale(0x290935LL,0x7cf2f82446b00LL),
+      reale(-0x28df61LL,0x86fb00d475200LL),reale(779755LL,0xfacbca777f900LL),
+      reale(203539LL,0xb4670b88476e0LL),reale(0x4c66f7043LL,0x3b2dd04b78c45LL),
+      // _C4x[74]
+      reale(0x248be97LL,0x1e48683dc9800LL),
+      reale(-0x11c1252LL,0x8d886e0720600LL),
+      reale(0x132e820LL,0xb841223d75400LL),
+      reale(-0xaf6a02LL,0x67c70d66ce200LL),reale(0xabd6beLL,0x21fd3747b1000LL),
+      reale(-0x79788dLL,0xf8aeca1163e00LL),reale(0x5fc04eLL,0xa8a2fa972cc00LL),
+      reale(-0x537d4eLL,0xf6ba20bb91a00LL),reale(0x3240f2LL,0x6eab44c698800LL),
+      reale(-0x31b62aLL,0xaa6209a607600LL),reale(0x1560e1LL,0x756ea738a4400LL),
+      reale(-0x1094a6LL,0xb6346b575200LL),reale(610116LL,0x479bdc6c290e0LL),
+      reale(0x4c66f7043LL,0x3b2dd04b78c45LL),
+      // _C4x[75]
+      reale(0x12bba7dLL,0x3eb0d373a0e0LL),reale(-0xad54abLL,0xf67170f6ec640LL),
+      reale(0xadaa07LL,0xacc1b03fd73a0LL),reale(-0x778be1LL,0xf6d8be422c500LL),
+      reale(0x65b1d0LL,0xa317edb25b660LL),reale(-0x542b13LL,0xc007833bc43c0LL),
+      reale(0x399755LL,0xd5e83edc68920LL),reale(-0x36d934LL,0x413609e8fe280LL),
+      reale(0x1d1eb0LL,0x61c5f793c0be0LL),reale(-0x1b40eeLL,0x50c085e64140LL),
+      reale(579905LL,0x9d50696085ea0LL),reale(150042LL,0xa9efa9004c604LL),
+      reale(0x4c66f7043LL,0x3b2dd04b78c45LL),
+      // _C4x[76]
+      reale(0xadcce1LL,0xa8f910291300LL),reale(-0x75f1e7LL,0x90dc30b83db80LL),
+      reale(0x69bb72LL,0x5fb765e065c00LL),reale(-0x5425f0LL,0xa14f789ec9c80LL),
+      reale(0x3f4bc6LL,0x27d6c40aa500LL),reale(-0x39cf42LL,0x10ccffe37d80LL),
+      reale(0x2370a9LL,0x1de03c2bc2e00LL),reale(-0x2225b7LL,0x88489bd46be80LL),
+      reale(0xfd491LL,0x571c66f013700LL),reale(-742166LL,0x73c6192a49f80LL),
+      reale(439349LL,0xf7cfa6e796fc8LL),reale(0x4c66f7043LL,0x3b2dd04b78c45LL),
+      // _C4x[77]
+      reale(0x241ac8LL,0x4fc26559c91c0LL),reale(-0x1bf00eLL,0xb28cda67dbe00LL),
+      reale(0x168b71LL,0x62c9a90a52a40LL),reale(-0x13d469LL,0x1840867dcae80LL),
+      reale(885946LL,0x5cb0a99f5e2c0LL),reale(-843741LL,0xb8eac147bdf00LL),
+      reale(469359LL,0x79db9d7cfb40LL),reale(-417112LL,0xe5b3a1db88f80LL),
+      reale(146559LL,0x51b0aa3dcb3c0LL),reale(37677LL,0x6dd5ee66abd48LL),
+      reale(0x1977a7ac1LL,0x13b9f01928417LL),
+      // _C4x[78]
+      reale(0x46db68LL,0x71b79cbf7cc00LL),reale(-0x3c6911LL,0x7c1c75b062e80LL),
+      reale(0x2ca63cLL,0x6f81ce5fc3900LL),reale(-0x298bb1LL,0x22fc20ad7d380LL),
+      reale(0x1a1b5cLL,0xc70403130e600LL),reale(-0x1875afLL,0x6144896985880LL),
+      reale(787738LL,0x6bf60987b1300LL),reale(-530213LL,0x321d57754fd80LL),
+      reale(326645LL,0xab9033855e368LL),reale(0x4c66f7043LL,0x3b2dd04b78c45LL),
+      // _C4x[79]
+      reale(0xff64cLL,0x25a6222f26060LL),reale(-949437LL,0xeb5c58dd0e7c0LL),
+      reale(652845LL,0xb96689ab42720LL),reale(-615920LL,0x90ecba54afa80LL),
+      reale(356624LL,0x982d38f2a9de0LL),reale(-303840LL,0xdd3c82a37cd40LL),
+      reale(113262LL,0x286189b57e4a0LL),reale(28978LL,0x12ae8b059bc84LL),
+      reale(0x1977a7ac1LL,0x13b9f01928417LL),
+      // _C4x[80]
+      reale(24830LL,0x3d0fb879bb600LL),reale(-23213LL,0x5eff9ca332500LL),
+      reale(14957LL,0x147cd156ba400LL),reale(-13654LL,0xae15b46376300LL),
+      reale(7024LL,0x2535370909200LL),reale(-4512LL,0xc509c49f36100LL),
+      reale(2865LL,0xf50f5adcce1f0LL),reale(0xe0d0d0fLL,0x7c44346acc6c3LL),
+      // _C4x[81]
+      real(0x67b92a8524a18e80LL),real(-0x609d7d3ca356ae00LL),
+      real(0x39db180d1b52d580LL),real(-0x2fa1e9183dec9700LL),
+      real(0x1294d8f2627edc80LL),real(0x4bc94ddbc9bad70LL),
+      reale(0x15c1a09LL,0xc1b4051297e97LL),
+      // _C4x[82]
+      real(0xc83679b433c00LL),real(-0xb29b6d58dfb00LL),real(0x5f4e3bdd4de00LL),
+      real(-0x3affd9960e900LL),real(0x2665fb625f490LL),
+      reale(15809LL,0x8f200ee7e2a7dLL),
+      // _C4x[83]
+      real(0x11462b92d913a0LL),real(-0xdd4620ebadc40LL),
+      real(0x5974730e46be0LL),real(0x16bcec57851ccLL),
+      reale(33547LL,0x1cf91962af003LL),
+      // _C4x[84]
+      real(0x601aa15d00LL),real(-0x39c62a4580LL),real(0x2655784c18LL),
+      real(0x4d882f0532d9e9LL),
+      // _C4x[85]
+      real(0x40b1fa340LL),real(0x1068358d8LL),real(0x74e318fa9c07fLL),
+      // _C4x[86]
+      real(185528LL),real(0x715c339b9LL),
+      // _C4x[87]
+      real(-0x10330cb256200LL),real(-0x172cb16211100LL),
+      real(-0x21a8187537800LL),real(-0x31b06260f1f00LL),
+      real(-0x4ab014ab28e00LL),real(-0x7280309c9cd00LL),
+      real(-0xb366eef7be400LL),real(-0x11ff8a58b05b00LL),
+      real(-0x1dae666558ba00LL),real(-0x327547ac4a0900LL),
+      real(-0x58c9207d125000LL),real(-0xa2826b77361700LL),
+      real(-0x137557a5841e600LL),real(-0x275355b4b1bc500LL),
+      real(-0x54b37d85300bc00LL),real(-0xc517d06239a5300LL),
+      real(-0x1f8f2f623d981200LL),real(-0x5b85a3034c390100LL),
+      reale(-5021LL,0x5d11943ced800LL),reale(-21966LL,0xb72ce88a8f100LL),
+      reale(-144344LL,0xb3b965d7ac200LL),reale(-0x268b38LL,0x492c763e44300LL),
+      reale(0x249ddb5LL,0x415c2de726c00LL),
+      reale(-0x9b9ee43LL,0xaa383ce99b500LL),
+      reale(0x1373dc84LL,0xab8f862cc9600LL),
+      reale(-0x12102833LL,0xf2faba4420700LL),
+      reale(0x6358dd1LL,0x3479cff894d98LL),
+      reale(0x6af68d05eLL,0x1fa68a0342ac7LL),
+      // _C4x[88]
+      real(-0x30fab48eb2c00LL),real(-0x4779db0cde000LL),
+      real(-0x6a1a5308c1400LL),real(-0xa07c7893bf800LL),
+      real(-0xf7d15b087bc00LL),real(-0x1878e181999000LL),
+      real(-0x27ab652bf7a400LL),real(-0x422ed0b6682800LL),
+      real(-0x721448fff54c00LL),real(-0xcc1e5699294000LL),
+      real(-0x17d5829db9a3400LL),real(-0x2ed74923dde5800LL),
+      real(-0x61c84aba5ffdc00LL),real(-0xdbaa1b53c88f000LL),
+      real(-0x21cc8beefe3fc400LL),real(-0x5da8efb832aa8800LL),
+      reale(-4877LL,0xa27c79e8c9400LL),reale(-20083LL,0x744650f3b6000LL),
+      reale(-123006LL,0x682eafd4bac00LL),reale(-0x1e42b0LL,0x9a1fba0274800LL),
+      reale(0x1a279caLL,0x9c6669ee40400LL),
+      reale(-0x6436c41LL,0x17399d517b000LL),
+      reale(0xb71548aLL,0x46cce583c1c00LL),
+      reale(-0xb1da295LL,0xbadfc78b1800LL),
+      reale(0x58ed14aLL,0x7a2901c3a7400LL),
+      reale(-0x1210284LL,0xdf2faba442070LL),
+      reale(0x23a784574LL,0xb53783566b8edLL),
+      // _C4x[89]
+      real(-0x32b69e04189800LL),real(-0x4bd39320660300LL),
+      real(-0x73a508e7ef1600LL),real(-0xb44a7ec206b900LL),
+      real(-0x1200d9d52c6d400LL),real(-0x1d916a5ad4bcf00LL),
+      real(-0x321a3f994641200LL),real(-0x57fce6d660f8500LL),
+      real(-0xa10c564a22b1000LL),real(-0x1356fa3ebba41b00LL),
+      real(-0x275fd13435900e00LL),real(-0x5604e2d76283d100LL),
+      reale(-3284LL,0x2070ad378b400LL),reale(-8784LL,0x7223f68ff1900LL),
+      reale(-27452LL,0xebc1e860af600LL),reale(-107904LL,0x1b738290a6300LL),
+      reale(-625733LL,0x1d5410be27800LL),reale(-0x902489LL,0x533e63f8bcd00LL),
+      reale(0x72c06c4LL,0x5507fb0eafa00LL),
+      reale(-0x18988720LL,0x3c017dc891700LL),
+      reale(0x25bc2ea8LL,0xd19d26ed03c00LL),
+      reale(-0x18eb8d7bLL,0x7b2ccab700100LL),
+      reale(-0xd13ce6LL,0xb1cccb08dfe00LL),
+      reale(0x9b9ee42LL,0x55c7c31664b00LL),
+      reale(-0x3b0d6fcLL,0x8ae0c4d412ef8LL),
+      reale(0x6af68d05eLL,0x1fa68a0342ac7LL),
+      // _C4x[90]
+      real(-0xe0ca252d14c000LL),real(-0x15a70af15f24000LL),
+      real(-0x222b3f817554000LL),real(-0x375f97b48cd8000LL),
+      real(-0x5c7b9631f8ac000LL),real(-0x9fe2527c7fcc000LL),
+      real(-0x11face3d5ef34000LL),real(-0x21e77d8dabde0000LL),
+      real(-0x439dcbf7fdccc000LL),reale(-2311LL,0xe8ce2f330c000LL),
+      reale(-5374LL,0xca11d3eaac000LL),reale(-13966LL,0xc6123cd18000LL),
+      reale(-42248LL,0x5f55f4e354000LL),reale(-159931LL,0x5dce658a64000LL),
+      reale(-887132LL,0x3edc05794c000LL),reale(-0xc191a8LL,0x9dbc8de510000LL),
+      reale(0x8fac044LL,0x968da6a8b4000LL),
+      reale(-0x1bda5771LL,0xe9ef52573c000LL),
+      reale(0x23bc5202LL,0x5feb9b1dac000LL),
+      reale(-0xccedba9LL,0xeaff8a5b08000LL),
+      reale(-0xe97725aLL,0xac42b4d454000LL),
+      reale(0x103e53d2LL,0x88b0e96a94000LL),
+      reale(-0x53b1f56LL,0xd851e038cc000LL),
+      reale(0x58ed14LL,0xa7a2901c3a740LL),
+      reale(0x6af68d05eLL,0x1fa68a0342ac7LL),
+      // _C4x[91]
+      real(-0x38123cee860f400LL),real(-0x59d375c04e8be00LL),
+      real(-0x942bf86bd4c1800LL),real(-0xfcbda8858afb200LL),
+      real(-0x1c02af2dc3443c00LL),real(-0x33fc822f8d2b6600LL),
+      real(-0x65e35fc07de4e000LL),reale(-3415LL,0x3814d6814a600LL),
+      reale(-7776LL,0xe3f177bd67c00LL),reale(-19732LL,0x95ce6ed10f200LL),
+      reale(-58090LL,0x6b8e19ff25800LL),reale(-213112LL,0xea59cce39fe00LL),
+      reale(-0x11614cLL,0x8811931d33400LL),
+      reale(-0xed6da9LL,0xcc2995f504a00LL),
+      reale(0xa5fba68LL,0x2f0a20e9d9000LL),
+      reale(-0x1d766c12LL,0x261b89e445600LL),
+      reale(0x1fe4cb30LL,0xe9f8f195ec00LL),
+      reale(-0x32a45c1LL,0x6c0944416a200LL),
+      reale(-0x13c5edbaLL,0x884009c80c800LL),
+      reale(0xceef01fLL,0x987f3afb7ae00LL),
+      reale(-0x14190caLL,0x7fbc15002a400LL),
+      reale(-0x3fdf64LL,0x5c00896e7fa00LL),
+      reale(-0x47ecefLL,0x2d1e65cb0cf50LL),
+      reale(0x6af68d05eLL,0x1fa68a0342ac7LL),
+      // _C4x[92]
+      real(-0xd828cefda55a800LL),real(-0x16c6eac98e7b6000LL),
+      real(-0x27e1e798049c9800LL),real(-0x490330552dbbf000LL),
+      reale(-2256LL,0x7715d478bf800LL),reale(-4648LL,0x773993ce08000LL),
+      reale(-10391LL,0x2ec0caa9f0800LL),reale(-25837LL,0x32aa1d24f000LL),
+      reale(-74325LL,0x3f4000f179800LL),reale(-265481LL,0xa31986dc6000LL),
+      reale(-0x14f9b8LL,0x5f4ef3570a800LL),
+      reale(-0x1138c86LL,0x8dc89e4d1d000LL),
+      reale(0xb6f1f87LL,0xc85920c253800LL),
+      reale(-0x1e0ff20dLL,0x916caffd04000LL),
+      reale(0x1bbdcb17LL,0xbaa71ebb04800LL),
+      reale(0x384d292LL,0xf120275a2b000LL),
+      reale(-0x1470545eLL,0xa56cece8cd800LL),
+      reale(0x8b932d3LL,0x9f9c2b8142000LL),
+      reale(-0x190d15LL,0xe17459d35e800LL),
+      reale(0x1ba0870LL,0x51c8dabef9000LL),
+      reale(-0x19e121dLL,0xfc26ca6267800LL),
+      reale(0x40d611LL,0xd55e5a0325120LL),
+      reale(0x6af68d05eLL,0x1fa68a0342ac7LL),
+      // _C4x[93]
+      real(-0x354d49acec3dd800LL),real(-0x606a7d34c50a0200LL),
+      reale(-2940LL,0x23b8583df6400LL),reale(-5972LL,0x98e0d26252a00LL),
+      reale(-13141LL,0x32060cd802000LL),reale(-32102LL,0x94515a4461600LL),
+      reale(-90512LL,0xbf74565dcdc00LL),reale(-315894LL,0x3681a17ad4200LL),
+      reale(-0x184830LL,0x31cf272e1800LL),
+      reale(-0x1345666LL,0x74bd8d19f2e00LL),
+      reale(0xc3bb22cLL,0x21c1cf60c5400LL),
+      reale(-0x1e0e44bfLL,0x4d4e7e4305a00LL),
+      reale(0x17dc8eadLL,0xa384192d01000LL),
+      reale(0x7ea8886LL,0x4094526254600LL),
+      reale(-0x13412ff9LL,0x2a97f22f1cc00LL),
+      reale(0x5aae31eLL,0xbfbbc74d27200LL),
+      reale(-0x7e571eLL,0x93186fe6a0800LL),
+      reale(0x2c5c2fdLL,0x8e0e73ffc5e00LL),
+      reale(-0x13c5b2fLL,0xc710b4d114400LL),reale(-922542LL,0xd5e26bb78a00LL),
+      reale(-491670LL,0xa42f82e6a24d0LL),
+      reale(0x6af68d05eLL,0x1fa68a0342ac7LL),
+      // _C4x[94]
+      reale(-3668LL,0x745b704814000LL),reale(-7356LL,0x21a269e124000LL),
+      reale(-15964LL,0xec72d7fbcc000LL),reale(-38394LL,0xff9a4ef3a0000LL),
+      reale(-106359LL,0xe335b9f234000LL),reale(-363724LL,0x88012a511c000LL),
+      reale(-0x1b4accLL,0x4b9f771bec000LL),
+      reale(-0x1506447LL,0x82acf9b038000LL),
+      reale(0xcd4b711LL,0x7c4e47994000LL),
+      reale(-0x1db11135LL,0x3f8814c794000LL),
+      reale(0x146f8fbeLL,0x4b25e0bbcc000LL),
+      reale(0xab9ff11LL,0x7ca6ea4dd0000LL),
+      reale(-0x117bd98aLL,0x4b1bc06334000LL),
+      reale(0x3c3652aLL,0xbcee02f98c000LL),
+      reale(-0x13f376fLL,0x23146f606c000LL),
+      reale(0x2f300a8LL,0x7088e98168000LL),
+      reale(-0xc2d459LL,0xe11e273414000LL),reale(0x6a06d0LL,0xd8f6969c04000LL),
+      reale(-0xa26926LL,0xb993988ecc000LL),reale(0x269a8aLL,0x161dcdf222440LL),
+      reale(0x6af68d05eLL,0x1fa68a0342ac7LL),
+      // _C4x[95]
+      reale(-18811LL,0xb688093225a00LL),reale(-44618LL,0xaf855dda9900LL),
+      reale(-121681LL,0xd9372fc875000LL),reale(-408671LL,0x5233927078700LL),
+      reale(-0x1e040dLL,0x28ce2df824600LL),
+      reale(-0x168553bLL,0xa3e5e05241500LL),
+      reale(0xd460a5cLL,0x695506ba87c00LL),
+      reale(-0x1d1f6a90LL,0x1d549843b8300LL),
+      reale(0x117beb33LL,0x10f016a3f3200LL),
+      reale(0xc7942baLL,0x4db1c2b811100LL),
+      reale(-0xfa98bd1LL,0x64b609f6ba800LL),
+      reale(0x2a942daLL,0x3acb33bfff00LL),
+      reale(-0x1e808f3LL,0xdd80ec7631e00LL),
+      reale(0x2b833f4LL,0x9e16c6ccb8d00LL),reale(-0x8d8b02LL,0x704e959ad400LL),
+      reale(0xd8c1bcLL,0x289c377eefb00LL),reale(-0xaf5345LL,0xf36b71bf80a00LL),
+      reale(414830LL,0x163387d5d8900LL),reale(117690LL,0xc756ec17c4aa8LL),
+      reale(0x6af68d05eLL,0x1fa68a0342ac7LL),
+      // _C4x[96]
+      reale(-136366LL,0x8c5e030195400LL),reale(-450639LL,0x2f8b8af0cc000LL),
+      reale(-0x207899LL,0xab180153b2c00LL),
+      reale(-0x17cbd19LL,0x6d563e036e800LL),
+      reale(0xd98bb6bLL,0x85d44607e4400LL),
+      reale(-0x1c715c1cLL,0x81961af0f9000LL),
+      reale(0xef76e2aLL,0x1896eb4cd1c00LL),
+      reale(0xd8423cdLL,0xac7cda7d93800LL),
+      reale(-0xdfe665dLL,0xeb33b4f123400LL),
+      reale(0x20f4d8dLL,0x4230b4bd66000LL),
+      reale(-0x25e66aeLL,0xc57a7de380c00LL),
+      reale(0x25ec068LL,0x42dd69fc98800LL),
+      reale(-0x8bc9f7LL,0x63e586d292400LL),
+      reale(0x11875ecLL,0xf302f56753000LL),
+      reale(-0x942362LL,0xa7e8f72cffc00LL),reale(0x300c72LL,0x8380fab1bd800LL),
+      reale(-0x4d1219LL,0x75a9a1c171400LL),reale(0x17e82dLL,0x6fd98617e9df0LL),
+      reale(0x6af68d05eLL,0x1fa68a0342ac7LL),
+      // _C4x[97]
+      reale(-0x22adf4LL,0xa8028f7589000LL),
+      reale(-0x18e1ea1LL,0xec99313826300LL),
+      reale(0xdd3af0fLL,0xafe6927fcde00LL),
+      reale(-0x1bb5bb95LL,0xdb3a3c686a900LL),
+      reale(0xcd372fbLL,0xaf8273d716c00LL),
+      reale(0xe17c340LL,0xab29f0bfd4f00LL),
+      reale(-0xc89991bLL,0xc980057487a00LL),
+      reale(0x1c16fdbLL,0x2f129bee9500LL),reale(-0x2a6690aLL,0x630204744800LL),
+      reale(0x207b019LL,0xda8305b9abb00LL),
+      reale(-0xa2ee28LL,0x6cabc2bb71600LL),
+      reale(0x1306b52LL,0xbb16c712a0100LL),
+      reale(-0x7b8e30LL,0x3c7a80e132400LL),reale(0x5e0fd5LL,0x8a1d8a85ca700LL),
+      reale(-0x62ff6bLL,0x56d3a913ab200LL),reale(653539LL,0x4a58f163aed00LL),
+      reale(193289LL,0xc4fa7fb371708LL),reale(0x6af68d05eLL,0x1fa68a0342ac7LL),
+      // _C4x[98]
+      reale(0xdfc26c8LL,0x48818da828000LL),
+      reale(-0x1af5ada0LL,0xd945577fc8000LL),
+      reale(0xb013e7bLL,0xde7b734758000LL),
+      reale(0xe5c8f15LL,0x4db221ae90000LL),
+      reale(-0xb4b2676LL,0x12b3e1c928000LL),
+      reale(0x19f447dLL,0x55324802d8000LL),
+      reale(-0x2cb5e23LL,0x1a03202358000LL),
+      reale(0x1be83feLL,0x1147d57660000LL),
+      reale(-0xc183feLL,0xc311ac2ba8000LL),
+      reale(0x12fb7b0LL,0x70537f02e8000LL),
+      reale(-0x6efed7LL,0x406e8457d8000LL),reale(0x81688dLL,0x438c3da230000LL),
+      reale(-0x61e562LL,0x36a3647da8000LL),reale(0x1debc0LL,0x685dc04df8000LL),
+      reale(-0x29e3a7LL,0x77cbf92d8000LL),reale(0xf9fcaLL,0x4eef421f04580LL),
+      reale(0x6af68d05eLL,0x1fa68a0342ac7LL),
+      // _C4x[99]
+      reale(0x9739608LL,0x763cf17d39800LL),
+      reale(0xe6d5383LL,0xf358b9d531400LL),
+      reale(-0xa3d7c6fLL,0x4255ab8af000LL),
+      reale(0x195579eLL,0xe59a1e6b54c00LL),
+      reale(-0x2d81446LL,0x7024246c44800LL),
+      reale(0x18526baLL,0x124aa89300400LL),
+      reale(-0xdeae1dLL,0x9aae697f4a000LL),
+      reale(0x1225919LL,0x27fd86c303c00LL),
+      reale(-0x6cc1e4LL,0xbf5bdfad0f800LL),reale(0x977895LL,0x1876eddc2f400LL),
+      reale(-0x5ae203LL,0x481d0c0e5000LL),reale(0x343742LL,0xde3cf0f552c00LL),
+      reale(-0x3ba70bLL,0xb31925d21a800LL),reale(606166LL,0xec68c0e73e400LL),
+      reale(172919LL,0x9ad62b665b520LL),reale(0x6af68d05eLL,0x1fa68a0342ac7LL),
+      // _C4x[100]
+      reale(-0x95993b9LL,0x64b5bc8313000LL),
+      reale(0x19833fdLL,0x84cabd1d8c000LL),
+      reale(-0x2d4f233LL,0xbe71c1af5000LL),
+      reale(0x159e01bLL,0xeea5410a3a000LL),
+      reale(-0xf6d1b2LL,0x3b3115df47000LL),
+      reale(0x10fe38aLL,0xfb6c54d608000LL),
+      reale(-0x70f49eLL,0xdba66dd969000LL),reale(0xa28476LL,0xeb52d29456000LL),
+      reale(-0x54cfeeLL,0x2259552bb000LL),reale(0x479180LL,0xc3737ed884000LL),
+      reale(-0x40d431LL,0x4b44b2549d000LL),reale(0x1516fcLL,0xc755b095f2000LL),
+      reale(-0x191f36LL,0xb38784a86f000LL),reale(701746LL,0xdc0286e009640LL),
+      reale(0x6af68d05eLL,0x1fa68a0342ac7LL),
+      // _C4x[101]
+      reale(-0x2c7f85aLL,0x86bfab9d9f000LL),
+      reale(0x139fa77LL,0xb72d09f420c00LL),
+      reale(-0x1090fe9LL,0x3b9f41478c800LL),
+      reale(0xfc9140LL,0x8d133b2d84400LL),reale(-0x784a2bLL,0xc3e7e4efea000LL),
+      reale(0xa5d467LL,0x95ba8c80bfc00LL),reale(-0x518725LL,0xce5cb67f07800LL),
+      reale(0x561035LL,0x12558783a3400LL),reale(-0x40ba3cLL,0xb859b4ed35000LL),
+      reale(0x21a30aLL,0xf7d60f21fec00LL),reale(-0x2640adLL,0x91b912bec2800LL),
+      reale(503732LL,0xa322eb69a2400LL),reale(139663LL,0x777cb98300b20LL),
+      reale(0x6af68d05eLL,0x1fa68a0342ac7LL),
+      // _C4x[102]
+      reale(-0x115c944LL,0xc0b6f29128000LL),
+      reale(0xea7ca5LL,0xa666c37198000LL),reale(-0x808d04LL,0x469ec5a258000LL),
+      reale(0xa444d1LL,0x17c6156160000LL),reale(-0x50e048LL,0x2cff6bf0a8000LL),
+      reale(0x5fbb5eLL,0xba1b2aa228000LL),reale(-0x3f2228LL,0x95cd4a43d8000LL),
+      reale(0x2d0aebLL,0x3ffeb65fb0000LL),reale(-0x2c3c07LL,0xc7378bc3a8000LL),
+      reale(0xfae21LL,0x2c3889c5b8000LL),reale(-0x10368fLL,0x8375b5b7d8000LL),
+      reale(500325LL,0x147f19cd83980LL),reale(0x6af68d05eLL,0x1fa68a0342ac7LL),
+      // _C4x[103]
+      reale(-0x8873cbLL,0xc479dd519d600LL),reale(0x9ff0d0LL,0x1e7c948175300LL),
+      reale(-0x521d13LL,0x7cfb6727ff800LL),reale(0x6565cbLL,0x535f47efddd00LL),
+      reale(-0x3db3c2LL,0x645630ec71a00LL),reale(0x36610aLL,0x6253b3df24700LL),
+      reale(-0x2e78cdLL,0x1d0e085eefc00LL),reale(0x17a2b8LL,0x4828fbf665100LL),
+      reale(-0x19dae4LL,0x9c2303ec75e00LL),reale(406057LL,0xe76a74dc3bb00LL),
+      reale(110280LL,0xa64ca1bbeb438LL),reale(0x6af68d05eLL,0x1fa68a0342ac7LL),
+      // _C4x[104]
+      reale(-0x54796bLL,0xbe5923681ac00LL),reale(0x680df6LL,0x7020ae33aa000LL),
+      reale(-0x3cfb52LL,0x82fb5a29a1400LL),reale(0x3d6fe0LL,0x4a526eb153800LL),
+      reale(-0x2f0357LL,0x6dd208c353c00LL),reale(0x1eeec3LL,0x8c3cc70035000LL),
+      reale(-0x1f3887LL,0xb33643ae4a400LL),reale(787253LL,0x8fa9057e6800LL),
+      reale(-725368LL,0xde2260039cc00LL),reale(368582LL,0x69a43eb914890LL),
+      reale(0x6af68d05eLL,0x1fa68a0342ac7LL),
+      // _C4x[105]
+      reale(-0x3d0313LL,0xc8b58adf29800LL),reale(0x4266d0LL,0x89a9dbf785900LL),
+      reale(-0x2ef6ddLL,0xb472360429200LL),reale(0x252cd4LL,0x9b47462d3fb00LL),
+      reale(-0x22086cLL,0xf25c66cdc4c00LL),reale(0x1183edLL,0x7a5199072bd00LL),
+      reale(-0x123fedLL,0x6e44b8c2c8600LL),reale(325643LL,0x5e75ef9e35f00LL),
+      reale(87110LL,0x728c765d95698LL),reale(0x6af68d05eLL,0x1fa68a0342ac7LL),
+      // _C4x[106]
+      reale(-0x2edbf2LL,0xf0eb506e9c000LL),reale(0x2a38e1LL,0x4d2d51bbc4000LL),
+      reale(-0x236efbLL,0x9dc16f0c4000LL),reale(0x1687c8LL,0x4ed8bf53f8000LL),
+      reale(-0x16be26LL,0x81ec1545bc000LL),reale(616004LL,0x8b84c9ea6c000LL),
+      reale(-517488LL,0xce8712c64000LL),reale(279040LL,0x23dc4dd774ec0LL),
+      reale(0x6af68d05eLL,0x1fa68a0342ac7LL),
+      // _C4x[107]
+      reale(-81631LL,0x30aa006397400LL),reale(60811LL,0x59dd5ef6a6e00LL),
+      reale(-57593LL,0x9ba80fa657800LL),reale(30387LL,0x2572e53b9c200LL),
+      reale(-30168LL,0x1ee4b96f27c00LL),reale(9044LL,0xd72699d03d600LL),
+      reale(2392LL,0x21f43a8f7f830LL),reale(0x3b039d41LL,0x9eb428d5a933LL),
+      // _C4x[108]
+      real(-0xdd5f9d233a5800LL),real(0x8b724926c9e000LL),
+      real(-0x8af41510346800LL),real(0x3d05686ce77000LL),
+      real(-0x2f9901c72df800LL),real(0x1ae74f29ea4ce0LL),
+      reale(223345LL,0xf3eec944ed143LL),
+      // _C4x[109]
+      real(-0xc3e38d2fc36800LL),real(0x6a604d6faf7a00LL),
+      real(-0x650b3de948f400LL),real(0x20a6596010be00LL),
+      real(0x88f534a1fae70LL),reale(275086LL,0x53fa9cf60167fLL),
+      // _C4x[110]
+      real(-0x33418e8004000LL),real(0x17b00d59dc000LL),
+      real(-0x11669ade1c000LL),real(0xa37322475bc0LL),
+      reale(6709LL,0x6c31d1e089667LL),
+      // _C4x[111]
+      real(-0x15f49b7dd3600LL),real(0x7876e24c6900LL),real(0x1f5dd75c0b28LL),
+      reale(4837LL,0x68f14547adebLL),
+      // _C4x[112]
+      real(-0xc171ac00LL),real(0x7522aaf0LL),real(0x17609e98859b3LL),
+      // _C4x[113]
+      real(594728LL),real(0x6a467061d7LL),
+      // _C4x[114]
+      real(0xe07098dae00LL),real(0x16338b625000LL),real(0x23dda179f200LL),
+      real(0x3b41a69cf400LL),real(0x645a89a6b600LL),real(0xaeabe0e09800LL),
+      real(0x1397028dcfa00LL),real(0x246014e923c00LL),real(0x4633de275be00LL),
+      real(0x8d95c8a56e000LL),real(0x12c670f9ba0200LL),
+      real(0x2a433484738400LL),real(0x6608a70542c600LL),
+      real(0x10c10ac322d2800LL),real(0x30ddb4b92590a00LL),
+      real(0xa2e30513d28cc00LL),real(0x289386109855ce00LL),
+      reale(3347LL,0x17499d2cb7000LL),reale(26358LL,0x5763b5c021200LL),
+      reale(564821LL,0x99c65b39a1400LL),reale(-0xa53014LL,0xa750d62f6d600LL),
+      reale(0x39d0d39LL,0x23d4ea299b800LL),
+      reale(-0xa4c65b0LL,0x59e1316fd1a00LL),
+      reale(0x10ac73dfLL,0x6e7b054af5c00LL),
+      reale(-0xde50b3bLL,0xce997b96dde00LL),
+      reale(0x4840a0cLL,0x8341516ef7e40LL),
+      reale(0x898623079LL,0x41f43bb0c949LL),
+      // _C4x[115]
+      real(0xc0b5b2cac000LL),real(0x139ac5d2ed800LL),real(0x20abe97223000LL),
+      real(0x37e2f8cba0800LL),real(0x6269b1d1ba000LL),real(0xb3074a8a43800LL),
+      real(0x151de1e3911000LL),real(0x298e5ccaa76800LL),
+      real(0x55d208375c8000LL),real(0xbb7ea958fd9800LL),
+      real(0x1b5e1854857f000LL),real(0x4547c4b8360c800LL),
+      real(0xc1cdc899e5d6000LL),real(0x2682d6f5e00af800LL),
+      reale(2326LL,0xf44888e46d000LL),reale(11275LL,0x7d4afe8b62800LL),
+      reale(82638LL,0x859516eee4000LL),reale(0x18d8c7LL,0xc1653179c5800LL),
+      reale(-0x1af9d3aLL,0x3ce064e2db000LL),
+      reale(0x86a9f98LL,0x2bb5164778800LL),
+      reale(-0x150fbacaLL,0x9cddde5df2000LL),
+      reale(0x1e0b24ccLL,0x730ece181b800LL),
+      reale(-0x18d8d4d5LL,0x8384e90dc9000LL),
+      reale(0xb1da294LL,0xf45203874e800LL),
+      reale(-0x2158e7cLL,0x12309f56a1480LL),
+      reale(0x898623079LL,0x41f43bb0c949LL),
+      // _C4x[116]
+      real(0x628e4f4bb7800LL),real(0xa60e374943000LL),real(0x11fae77940e800LL),
+      real(0x2022ddc061a000LL),real(0x3b7f2e2d7a5800LL),
+      real(0x72aa26ca9f1000LL),real(0xe77392a11fc800LL),
+      real(0x1ed1e51d0348000LL),real(0x460248a5fa93800LL),
+      real(0xabd9e84dc89f000LL),real(0x1d078c2cd5cea800LL),
+      real(0x58c9fda5cf076000LL),reale(5134LL,0xa77137081800LL),
+      reale(23653LL,0x63d76094d000LL),reale(163469LL,0x772f4630d8800LL),
+      reale(0x2dd8fbLL,0x8d384291a4000LL),
+      reale(-0x2dbc35fLL,0x2ac0ecb56f800LL),
+      reale(0xccfee38LL,0xfe0a5a4ffb000LL),
+      reale(-0x1ba24a18LL,0x4006a589c6800LL),
+      reale(0x1eefd234LL,0x411553aad2000LL),
+      reale(-0xe24ea9eLL,0x2a9a05055d800LL),
+      reale(-0x5064327LL,0xfef05400a9000LL),
+      reale(0x88012eaLL,0x607af3a3b4800LL),
+      reale(-0x2c768a6LL,0xc2eb7f1e2c600LL),
+      reale(0x898623079LL,0x41f43bb0c949LL),
+      // _C4x[117]
+      real(0x2814d49c0c5000LL),real(0x468b0d3a3db800LL),
+      real(0x80724d98876000LL),real(0xf31dbc49b20800LL),
+      real(0x1e12cb4a6a67000LL),real(0x3eb5a58b5455800LL),
+      real(0x8b1eef20fbf8000LL),real(0x14cb29a266eda800LL),
+      real(0x36974c82ca289000LL),reale(2585LL,0xefae20720f800LL),
+      reale(9007LL,0x1d6baf437a000LL),reale(39779LL,0x24ec74fd54800LL),
+      reale(261696LL,0x442f64f42b000LL),reale(0x4532bfLL,0xa5b17f809800LL),
+      reale(-0x402994cLL,0xb2640fa9fc000LL),
+      reale(0x10513946LL,0xd27122c18e800LL),
+      reale(-0x1e7406cbLL,0xffbf2aea4d000LL),
+      reale(0x198dce95LL,0x53ee2b6143800LL),
+      reale(-0x6fd952LL,0xc8416b7a7e000LL),
+      reale(-0x106ef95bLL,0x51e9c9b688800LL),
+      reale(0xc2ebeddLL,0xe684af0fef000LL),
+      reale(-0x321b621LL,0x8b9ccea8bd800LL),
+      reale(0x1f62bbLL,0xfeee14beab380LL),
+      reale(0x898623079LL,0x41f43bb0c949LL),
+      // _C4x[118]
+      real(0xeb8379f6b27c00LL),real(0x1b6c4de1f1d7000LL),
+      real(0x355a1dadc956400LL),real(0x6d308de46411800LL),
+      real(0xed54313f63d4c00LL),real(0x22ae87428a2ac000LL),
+      real(0x58ce5dd980bc3400LL),reale(4090LL,0xd3c824bc46800LL),
+      reale(13806LL,0x44b4a8a441c00LL),reale(58809LL,0x7ab991df81000LL),
+      reale(370898LL,0xe410033e70400LL),reale(0x5d39b4LL,0x6402b9f6fb800LL),
+      reale(-0x511ced4LL,0xb40bb9356ec00LL),
+      reale(0x12ece898LL,0x1b63894556000LL),
+      reale(-0x1ed2ac20LL,0x585c774a5d400LL),
+      reale(0x127ec06aLL,0xe98bc80130800LL),
+      reale(0x95b946bLL,0xaa3cf3c05bc00LL),
+      reale(-0x12a1ebd9LL,0x22d7dff12b000LL),
+      reale(0x775489bLL,0xf01e02788a400LL),reale(0x3e6faaLL,0xb5091207e5800LL),
+      reale(-866060LL,0x3658630e08c00LL),reale(-0x4b6f8eLL,0xb8de01ac7480LL),
+      reale(0x898623079LL,0x41f43bb0c949LL),
+      // _C4x[119]
+      real(0x55091490e3fe000LL),real(0xab3101736f26800LL),
+      real(0x16d77945c4e3b000LL),real(0x345d2a91137d7800LL),
+      reale(2099LL,0xc55d2c398000LL),reale(5898LL,0x424192198800LL),
+      reale(19366LL,0xa6f5f449f5000LL),reale(79943LL,0x847cdfac49800LL),
+      reale(486014LL,0x6a1dc16732000LL),reale(0x74e06dLL,0x94cc8fca800LL),
+      reale(-0x602ae68LL,0x9aefb9112f000LL),
+      reale(0x14c7530fLL,0x22ddc22bfb800LL),
+      reale(-0x1dca92a2LL,0xb20d8a9dcc000LL),
+      reale(0xbcc9b9bLL,0x77a0b2f8bc800LL),
+      reale(0xefae33eLL,0x2663cfb2e9000LL),
+      reale(-0x107b961bLL,0x1d6d98f5ed800LL),
+      reale(0x312ad04LL,0x6a67a23666000LL),reale(0x554400LL,0x5e92831b6e800LL),
+      reale(0x1f045a2LL,0xed2ae23e23000LL),
+      reale(-0x14223e1LL,0xb9bfecc91f800LL),
+      reale(0x25fe41LL,0xe3c1e337a6d80LL),
+      reale(0x898623079LL,0x41f43bb0c949LL),
+      // _C4x[120]
+      real(0x20b0c3dbe662b800LL),real(0x49a4ee6b654d5000LL),
+      reale(2895LL,0xbb9a481b3e800LL),reale(7963LL,0xd6290c9168000LL),
+      reale(25525LL,0x742091bd91800LL),reale(102493LL,0xec03f49fb000LL),
+      reale(603292LL,0x6fe940faa4800LL),reale(0x8b88e9LL,0x3f081030e000LL),
+      reale(-0x6d45eb4LL,0x6afd099bf7800LL),
+      reale(0x160a34dcLL,0x159b783921000LL),
+      reale(-0x1c0a52ddLL,0xbdac853f0a800LL),
+      reale(0x623a0cfLL,0x33db2118b4000LL),
+      reale(0x11a373b2LL,0xfd504b0d5d800LL),
+      reale(-0xd2a4c31LL,0x297a6f3647000LL),
+      reale(0xb87456LL,0x3b87c77470800LL),reale(-0xf3a065LL,0x8338f465a000LL),
+      reale(0x2a9779eLL,0xbb68d3ddc3800LL),
+      reale(-0xaa398fLL,0xce94a8d56d000LL),
+      reale(-0x155fb6LL,0x6e288e66d6800LL),reale(-909991LL,0xa4b2342326e00LL),
+      reale(0x898623079LL,0x41f43bb0c949LL),
+      // _C4x[121]
+      reale(3796LL,0xb8b80a685d000LL),reale(10243LL,0xe5415b1644800LL),
+      reale(32134LL,0x75fe9c2f28000LL),reale(125896LL,0x13cc0b67cb800LL),
+      reale(720062LL,0x2eb5ef2cf3000LL),reale(0xa0de48LL,0x8e7784ebe2800LL),
+      reale(-0x788bbdfLL,0x56bd2fd2de000LL),
+      reale(0x16da2c6dLL,0xa914c081a9800LL),
+      reale(-0x19faa310LL,0x61e71b2209000LL),
+      reale(0x19ac988LL,0xa17bcee040800LL),
+      reale(0x12770767LL,0x432113bb94000LL),
+      reale(-0xa062e05LL,0xa594a26c7800LL),
+      reale(-0x1a7124LL,0x87b72ef09f000LL),
+      reale(-0x225d2aaLL,0x900fa56c5e800LL),
+      reale(0x26013eaLL,0x4a7ce5d24a000LL),
+      reale(-0x35b805LL,0xed2b265025800LL),reale(0x789d2fLL,0x47211641b5000LL),
+      reale(-0x8dcd8fLL,0xee1ad4893c800LL),reale(0x1a20deLL,0xd1c47193d5a80LL),
+      reale(0x898623079LL,0x41f43bb0c949LL),
+      // _C4x[122]
+      reale(39064LL,0xc457745427a00LL),reale(149707LL,0xe179ab818a000LL),
+      reale(834482LL,0xb3de3faf4c600LL),reale(0xb4b9faLL,0x43801d34c0c00LL),
+      reale(-0x822b550LL,0x9f953b0b49200LL),
+      reale(0x17547e84LL,0x8b1b355567800LL),
+      reale(-0x17d76448LL,0xa93ae2dcde00LL),
+      reale(-0x1ed1258LL,0x98f34e326e400LL),
+      reale(0x123f4adcLL,0x47c0d4df8aa00LL),
+      reale(-0x778c6c4LL,0xed3c824ec5000LL),
+      reale(-0x17a2d5LL,0x9e21984e2f600LL),
+      reale(-0x2dc770cLL,0xe1086e035bc00LL),
+      reale(0x1c54b5bLL,0x80264b6e6c200LL),
+      reale(-0x326da5LL,0x26f2532122800LL),reale(0xedf8dcLL,0x1c41b85df0e00LL),
+      reale(-0x7f40ddLL,0x8ce3a49309400LL),reale(-264320LL,0xcdacecc56da00LL),
+      reale(-128184LL,0xe028d0b38fac0LL),reale(0x898623079LL,0x41f43bb0c949LL),
+      // _C4x[123]
+      reale(945329LL,0x3e694a5630000LL),reale(0xc711f4LL,0xd11553dc81000LL),
+      reale(-0x8a57da0LL,0x93a442fb0a000LL),
+      reale(0x178fa170LL,0x9758cc3483000LL),
+      reale(-0x15c14d37LL,0xb25ba3b9a4000LL),
+      reale(-0x4a0fec8LL,0x809fe5a025000LL),
+      reale(0x117acf50LL,0xdb46a6c9be000LL),
+      reale(-0x58a681cLL,0x9728fd0b27000LL),
+      reale(0x4874cbLL,0xd717292318000LL),
+      reale(-0x3233dd5LL,0x218de81149000LL),
+      reale(0x1374bafLL,0xa831b35d72000LL),
+      reale(-0x6d54d8LL,0x1d2510de4b000LL),
+      reale(0x11abf83LL,0x70f1fa908c000LL),
+      reale(-0x53290fLL,0x66a09e0ded000LL),reale(0x2d8d44LL,0xf423c13426000LL),
+      reale(-0x47558cLL,0xb3664e8bef000LL),reale(0x1185f5LL,0xaa811667d8300LL),
+      reale(0x898623079LL,0x41f43bb0c949LL),
+      // _C4x[124]
+      reale(-0x91428afLL,0x61168ef4e1000LL),
+      reale(0x179c7facLL,0xf6300698d2000LL),
+      reale(-0x13c91260LL,0xd5d9103743000LL),
+      reale(-0x6ac7e50LL,0xbf6334abb4000LL),
+      reale(0x1074fe92LL,0x8592b62d25000LL),
+      reale(-0x4231b66LL,0xfd1b9a6496000LL),reale(0xc368dcLL,0xaa4a38387000LL),
+      reale(-0x31f4b46LL,0x55c5529a78000LL),
+      reale(0xd375d5LL,0x7d9fda6f69000LL),reale(-0xb5f816LL,0xe80970145a000LL),
+      reale(0x112944cLL,0x2633a57dcb000LL),
+      reale(-0x3bea5eLL,0x63ccb2593c000LL),reale(0x64df29LL,0xa84ec063ad000LL),
+      reale(-0x518269LL,0x301f3a801e000LL),reale(171304LL,0xc92dc0ce0f000LL),
+      reale(53498LL,0x8a12fdd94c400LL),reale(0x898623079LL,0x41f43bb0c949LL),
+      // _C4x[125]
+      reale(-0x11f62759LL,0xe085960ca6000LL),
+      reale(-0x8349edeLL,0x7e88936265000LL),
+      reale(0xf59250aLL,0xa27a71193c000LL),
+      reale(-0x324d5e9LL,0xf571a60bb3000LL),
+      reale(0x1393a0dLL,0x3707e00852000LL),
+      reale(-0x2f19e78LL,0xe986595aa1000LL),
+      reale(0x9976c9LL,0xa546ce8428000LL),reale(-0xf38a3aLL,0x865870956f000LL),
+      reale(0xf1873bLL,0x3b7a7e96fe000LL),reale(-0x3dab08LL,0xac7a9f725d000LL),
+      reale(0x89909cLL,0x8a056dcb14000LL),reale(-0x45261cLL,0x4e702837ab000LL),
+      reale(0x188b87LL,0x5c81da4aaa000LL),reale(-0x27fab0LL,0x463fc5db99000LL),
+      reale(790676LL,0xf12036cb88d00LL),reale(0x898623079LL,0x41f43bb0c949LL),
+      // _C4x[126]
+      reale(0xe3f269eLL,0x7928c61a8b800LL),
+      reale(-0x274a9f8LL,0xfeb83f4ee2000LL),
+      reale(0x19cf514LL,0xac3757be98800LL),
+      reale(-0x2b10690LL,0x3bed30e087000LL),
+      reale(0x7f7c1dLL,0xf8b6ea7445800LL),
+      reale(-0x11e1a4cLL,0xb18c883fec000LL),
+      reale(0xcad2bcLL,0xfed958edd2800LL),reale(-0x4ed02eLL,0xd955cefa51000LL),
+      reale(0x98f828LL,0x43fec217f800LL),reale(-0x38b25eLL,0xf12a5bbcf6000LL),
+      reale(0x33f5e8LL,0xc16fe1018c800LL),reale(-0x347f8aLL,0x934f1b0d1b000LL),
+      reale(291108LL,0x30be23439800LL),reale(90314LL,0xe93f4121c6900LL),
+      reale(0x898623079LL,0x41f43bb0c949LL),
+      // _C4x[127]
+      reale(0x1eb4769LL,0xd679f8ae1c000LL),
+      reale(-0x26b6a63LL,0xc8e983a10b000LL),
+      reale(0x7adfaaLL,0x2eda271162000LL),
+      reale(-0x13624eeLL,0x32cb1100e9000LL),
+      reale(0xa84f4aLL,0x5827875768000LL),reale(-0x65ab3dLL,0x697a0f03a7000LL),
+      reale(0x98d4acLL,0xfa65faac6e000LL),reale(-0x3387a2LL,0xe109fde185000LL),
+      reale(0x4aa6a0LL,0x94cb79bcb4000LL),reale(-0x3369e0LL,0x6cbc80e2c3000LL),
+      reale(0x104eb1LL,0xdee482d47a000LL),reale(-0x185dd5LL,0x34c1d97fa1000LL),
+      reale(562334LL,0xcf5270735f500LL),reale(0x898623079LL,0x41f43bb0c949LL),
+      // _C4x[128]
+      reale(0x830429LL,0xffd2991fd000LL),reale(-0x13f4e9bLL,0x228cc28de6000LL),
+      reale(0x8da59dLL,0x193483c94f000LL),reale(-0x7beaf6LL,0x64aaffbeb8000LL),
+      reale(0x8fe67fLL,0x90c0e29221000LL),reale(-0x359704LL,0xff7f3d538a000LL),
+      reale(0x592063LL,0x1886eb4173000LL),reale(-0x2eb64dLL,0x54e5874b5c000LL),
+      reale(0x1f4608LL,0x4067911445000LL),reale(-0x22fb2eLL,0x9e83fab52e000LL),
+      reale(297833LL,0x966e637f97000LL),reale(88539LL,0x9a2e50b8c6400LL),
+      reale(0x898623079LL,0x41f43bb0c949LL),
+      // _C4x[129]
+      reale(0x7b2faeLL,0x8bff962f2e000LL),reale(-0x8e6239LL,0x171efbfa1f000LL),
+      reale(0x835afeLL,0x42ad0321d8000LL),reale(-0x3c6b42LL,0xb38873e1d1000LL),
+      reale(0x5fdf52LL,0x55033b3d82000LL),reale(-0x2b37b4LL,0x4424e87f63000LL),
+      reale(0x2d1757LL,0x929c8347ec000LL),reale(-0x2585bcLL,0x2bc2b63c95000LL),
+      reale(787004LL,0x9cc4866d6000LL),reale(-0xfdb00LL,0x94e67c5327000LL),
+      reale(412222LL,0xf695367aa1b00LL),reale(0x898623079LL,0x41f43bb0c949LL),
+      // _C4x[130]
+      reale(0x767497LL,0xd98a0c3214600LL),reale(-0x45753eLL,0x9a2c75ab3000LL),
+      reale(0x60dce4LL,0x7dcc619ba1a00LL),reale(-0x2a62f7LL,0xeef6e23c7e400LL),
+      reale(0x379edfLL,0x5af876afd6e00LL),reale(-0x24adadLL,0xed96d3cd99800LL),
+      reale(0x150456LL,0xde24866584200LL),reale(-0x183231LL,0xde6d41594c00LL),
+      reale(268682LL,0xb0f056b079600LL),reale(77255LL,0xca5a822ebf740LL),
+      reale(0x898623079LL,0x41f43bb0c949LL),
+      // _C4x[131]
+      reale(0x5e3725LL,0x53f34a829c000LL),reale(-0x2c0886LL,0x220fe5f0ca800LL),
+      reale(0x3e6878LL,0x588848e445000LL),reale(-0x233c7dLL,0x8c97ccdf37800LL),
+      reale(0x1dc39dLL,0xac1b944ace000LL),reale(-0x1b9e87LL,0x5db3f814b4800LL),
+      reale(609590LL,0x74daa18497000LL),reale(-712108LL,0xe9300871a1800LL),
+      reale(310317LL,0x16957f6a36b80LL),reale(0x898623079LL,0x41f43bb0c949LL),
+      // _C4x[132]
+      reale(0x41e7a1LL,0xe5044c1364800LL),reale(-0x2279b3LL,0x3fbc5119cd000LL),
+      reale(0x251936LL,0xcceb783bf5800LL),reale(-0x1c77dbLL,0x77b6fd365e000LL),
+      reale(996566LL,0x94ae3b7946800LL),reale(-0x115309LL,0xd34e3cf7ef000LL),
+      reale(231629LL,0x92b25177d7800LL),reale(64961LL,0x89605803fda00LL),
+      reale(0x898623079LL,0x41f43bb0c949LL),
+      // _C4x[133]
+      reale(7399LL,0xe4703b1ceb000LL),reale(-4926LL,0x8e7408af10800LL),
+      reale(3656LL,0xc01290e152000LL),reale(-3595LL,0x651f510443800LL),
+      real(0x5080258211e79000LL),real(-0x5458466826cf9800LL),
+      real(0x27a09e95cf36b080LL),reale(0x5d628dfLL,0xc3bd6c206251LL),
+      // _C4x[134]
+      real(0x183393315f62f400LL),real(-0x147c8a635ba4f000LL),
+      real(0xaadb07a361e2c00LL),real(-0xbd0a07cdca37800LL),
+      real(0x2c490db64a86400LL),real(0xc3000bbe3e2580LL),
+      reale(0x7f11bdLL,0x62a2be2e87a79LL),
+      // _C4x[135]
+      real(0x640278dc982000LL),real(-0x64de2b5e388800LL),
+      real(0x266cf1cb211000LL),real(-0x24af02897bd800LL),
+      real(0x125236c4932c80LL),reale(225070LL,0xa1cd0c0f186c5LL),
+      // _C4x[136]
+      real(0x1e30d5f17398800LL),real(-0x20335f44c005000LL),
+      real(0x8656a9da59d800LL),real(0x246f3281df3200LL),
+      reale(0x1c9038LL,0xea4bbbb5bea41LL),
+      // _C4x[137]
+      real(0xdf868e997000LL),real(-0xc54488fde800LL),real(0x67996a8dfb80LL),
+      reale(6219LL,0x86ed0fee71e5LL),
+      // _C4x[138]
+      real(0x4b0c377a00LL),real(0x141ef9cec0LL),real(0x12e7203d54087bdLL),
+      // _C4x[139]
+      real(0x44f600LL),real(0x13ed3512585LL),
+      // _C4x[140]
+      real(-0x15f6510c000LL),real(-0x26e7bc2d800LL),real(-0x46d3779b000LL),
+      real(-0x84e1d0c0800LL),real(-0x101cbc30a000LL),real(-0x2073376e3800LL),
+      real(-0x442adb8b9000LL),real(-0x963884ff6800LL),real(-0x15dbd71e08000LL),
+      real(-0x363ebc6d59800LL),real(-0x9122bbd857000LL),
+      real(-0x1a90a4ab06c800LL),real(-0x56f0a68cd06000LL),
+      real(-0x147a29992a8f800LL),real(-0x5d1402e6c175000LL),
+      real(-0x228e263277d22800LL),reale(-5079LL,0xa7b39ec4fc000LL),
+      reale(-128864LL,0xff6ddcc67a800LL),reale(0x2d8172LL,0xd360aa0ed000LL),
+      reale(-0x13c02eeLL,0xa44199bee7800LL),
+      reale(0x48aec0dLL,0x519df32cfe000LL),
+      reale(-0xa38931eLL,0x85c9cdac4800LL),
+      reale(0xe62962aLL,0x2d1ed763cf000LL),
+      reale(-0xb1da295LL,0xbadfc78b1800LL),
+      reale(0x37942ceLL,0x8c59a11a48880LL),
+      reale(0xa815b9093LL,0xe897fd72d67cbLL),
+      // _C4x[141]
+      real(-0x1b5badebe000LL),real(-0x326332ca4000LL),real(-0x5fd1bd93a000LL),
+      real(-0xbcd8e5378000LL),real(-0x1837bef256000LL),
+      real(-0x3404424ccc000LL),real(-0x75bf8cd1d2000LL),
+      real(-0x11b50d05060000LL),real(-0x2dc96f11f6e000LL),
+      real(-0x811a6e895f4000LL),real(-0x195036bc82ea000LL),
+      real(-0x5af70d135548000LL),real(-0x187d57cdaa406000LL),
+      reale(-2190LL,0xcd2c6639e4000LL),reale(-18743LL,0xc7a34bd57e000LL),
+      reale(-438376LL,0x295778dfd0000LL),reale(0x8cc26dLL,0x89f7eb41e2000LL),
+      reale(-0x36a2869LL,0x2376664bc000LL),
+      reale(0xb05599fLL,0x331692f966000LL),
+      reale(-0x1554ad77LL,0xceab0490e8000LL),
+      reale(0x19bde44bLL,0x7929b7544a000LL),
+      reale(-0x12ff20f2LL,0x1f0e642c94000LL),
+      reale(0x7d8aeffLL,0xbb852faace000LL),
+      reale(-0x163b453LL,0x6175bf8f16300LL),
+      reale(0xa815b9093LL,0xe897fd72d67cbLL),
+      // _C4x[142]
+      real(-0x1441fa2f35000LL),real(-0x272c726527800LL),
+      real(-0x4ebdd7b856000LL),real(-0xa564301b74800LL),
+      real(-0x16d6333bd37000LL),real(-0x3580dec1951800LL),
+      real(-0x865ae53c178000LL),real(-0x16ec61d7f65e800LL),
+      real(-0x455fa2e228b9000LL),real(-0xef77f4cbfa3b800LL),
+      real(-0x3d9c6e708569a000LL),reale(-5231LL,0x75aee04377800LL),
+      reale(-42197LL,0x3024573145000LL),reale(-920787LL,0xa857f3b1a800LL),
+      reale(0x1102cbfLL,0x2fc56aab44000LL),
+      reale(-0x5f6de95LL,0xa18dfcd50d800LL),
+      reale(0x10e21b46LL,0xc37962f3c3000LL),
+      reale(-0x1b2768abLL,0x1de1d7c9b0800LL),
+      reale(0x17e5fb3aLL,0xf028b16722000LL),
+      reale(-0x7167aefLL,0xab67e90163800LL),
+      reale(-0x6ad24a0LL,0xc9fcb5c1c1000LL),
+      reale(0x742e9cfLL,0x78c43cf486800LL),
+      reale(-0x22a7afaLL,0xbd91e6d784780LL),
+      reale(0xa815b9093LL,0xe897fd72d67cbLL),
+      // _C4x[143]
+      real(-0xc09a6adbf4000LL),real(-0x18cab6e3030000LL),
+      real(-0x359d0ace62c000LL),real(-0x7ab7d9cc438000LL),
+      real(-0x12c67ab580a4000LL),real(-0x31d5f1c0d1c0000LL),
+      real(-0x9233f1c13ddc000LL),real(-0x1e779de654b48000LL),
+      real(-0x789f22a00b054000LL),reale(-9797LL,0xe5d83adcb0000LL),
+      reale(-75090LL,0x51f88f9574000LL),reale(-0x178b5aLL,0x9c7032b3a8000LL),
+      reale(0x1a82b31LL,0x1e96e700fc000LL),
+      reale(-0x87b6e90LL,0x2c52914720000LL),
+      reale(0x15338523LL,0xce7f78ffc4000LL),
+      reale(-0x1c018382LL,0xa676efa498000LL),
+      reale(0xf7702b8LL,0x1370b4ff4c000LL),
+      reale(0x6aff3b9LL,0x36d40ed990000LL),
+      reale(-0xf8c984eLL,0x7ffae6d14000LL),
+      reale(0x90685bbLL,0x58f7b5f388000LL),
+      reale(-0x1ed5c63LL,0x42391cb69c000LL),reale(433029LL,0xe4d3ce78fba00LL),
+      reale(0xa815b9093LL,0xe897fd72d67cbLL),
+      // _C4x[144]
+      real(-0x69d018a3b9e000LL),real(-0xed437c3919a800LL),
+      real(-0x237e48279feb000LL),real(-0x5bea2151a0b3800LL),
+      real(-0x10666acb6ec18000LL),real(-0x350c7e1643d3c800LL),
+      reale(-3248LL,0x1d418b40bb000LL),reale(-15861LL,0xd9725e65aa800LL),
+      reale(-116264LL,0xa1b86f476e000LL),reale(-0x229587LL,0x7ceb4904e1800LL),
+      reale(0x24855b7LL,0xecf46ee8e1000LL),
+      reale(-0xac2cc75LL,0xaaa0612d48800LL),
+      reale(0x17f097f1LL,0x9c33fda5f4000LL),
+      reale(-0x19c3bce2LL,0x725671bbf800LL),
+      reale(0x61191fcLL,0x5dd5e11f87000LL),
+      reale(0xf0adc55LL,0x80f91f9d26800LL),
+      reale(-0xf09e6ecLL,0x661de5767a000LL),
+      reale(0x3c84250LL,0x191a53ee5d800LL),reale(0xc09838LL,0x95e41abad000LL),
+      reale(0x1f06cdLL,0xc3307b9c44800LL),reale(-0x4821ccLL,0xfdf7c75745180LL),
+      reale(0xa815b9093LL,0xe897fd72d67cbLL),
+      // _C4x[145]
+      real(-0x3bd4906e474e000LL),real(-0x97941b80ce3c000LL),
+      real(-0x1a66716bc5afa000LL),real(-0x532298a0bc3e0000LL),
+      reale(-4940LL,0xf256daf8ba000LL),reale(-23309LL,0x879c08dc7c000LL),
+      reale(-164255LL,0xaa736f110e000LL),reale(-0x2ea1f9LL,0xf31091a018000LL),
+      reale(0x2e81dd2LL,0xafc6204b42000LL),
+      reale(-0xcb87175LL,0xf2364e1434000LL),
+      reale(0x19614c39LL,0x15318e0496000LL),
+      reale(-0x1604d6f4LL,0x8a8293c610000LL),
+      reale(-0x1dbc060LL,0xd38b789a4a000LL),
+      reale(0x123f0094LL,0x213b4942ec000LL),
+      reale(-0xad78c47LL,0xd9c4d7699e000LL),reale(568685LL,0x4686791808000LL),
+      reale(-309549LL,0xcb44aacfd2000LL),reale(0x1f72ab4LL,0x34fcc4d2a4000LL),
+      reale(-0xf7e7fcLL,0x7235d22a26000LL),reale(0x168d3dLL,0xdae92a7065f00LL),
+      reale(0xa815b9093LL,0xe897fd72d67cbLL),
+      // _C4x[146]
+      real(-0x274a66713f785000LL),real(-0x78cbe0a9df914800LL),
+      reale(-6987LL,0xa32f129098000LL),reale(-31981LL,0x453597ca04800LL),
+      reale(-217575LL,0x823be2c7b5000LL),reale(-0x3b3fa5LL,0xd12282532d800LL),
+      reale(0x3821f86LL,0xdc7c0f67f2000LL),
+      reale(-0xe59a490LL,0x8723a22086800LL),
+      reale(0x19dacc73LL,0x318800cb6f000LL),
+      reale(-0x11c7eeb4LL,0xf548a3602f800LL),
+      reale(-0x7ba74f6LL,0x9910db8c4c000LL),
+      reale(0x12375406LL,0x94b6a51048800LL),
+      reale(-0x681978eLL,0xa6ccff24a9000LL),
+      reale(-0x112c4d0LL,0xfbc4de1ef1800LL),
+      reale(-0x1c0fa13LL,0x9e52e88ea6000LL),
+      reale(0x246376aLL,0xf0096c8a4a800LL),
+      reale(-0x477522LL,0x11c664e463000LL),
+      reale(-0x118b1eLL,0x40b99a8073800LL),
+      reale(-0x10e331LL,0x73d31536c1e80LL),
+      reale(0xa815b9093LL,0xe897fd72d67cbLL),
+      // _C4x[147]
+      reale(-9363LL,0x968ca53630000LL),reale(-41699LL,0x39ab2cddLL<<20),
+      reale(-274852LL,0xa91d4207d0000LL),reale(-0x4816caLL,0x57c4a3fe60000LL),
+      reale(0x4133f40LL,0x5baadc4870000LL),reale(-0xfac3dcfLL,0x97946dc0000LL),
+      reale(0x19a74e8cLL,0x66a0aab610000LL),
+      reale(-0xd9c7fd5LL,0x9b5dc96920000LL),
+      reale(-0xbb63ba2LL,0x3909340eb0000LL),
+      reale(0x108fbe05LL,0x73e3e2e80000LL),
+      reale(-0x3409bfaLL,0xc0fc6f1050000LL),
+      reale(-0x9f28cfLL,0xe614f5fbe0000LL),
+      reale(-0x2dff97eLL,0x68964278f0000LL),
+      reale(0x1946da3LL,0xd8be140f40000LL),reale(733724LL,0x9fb250690000LL),
+      reale(0x89382aLL,0x9e09f3a6a0000LL),reale(-0x793ff1LL,0x35e09d7730000LL),
+      reale(0x11f3b6LL,0x79934ee544800LL),
+      reale(0xa815b9093LL,0xe897fd72d67cbLL),
+      // _C4x[148]
+      reale(-334886LL,0x3942380350000LL),reale(-0x54e5e9LL,0x5c5bfa560f000LL),
+      reale(0x499ebdeLL,0x955c2ca786000LL),
+      reale(-0x10b98057LL,0x9f02d32fed000LL),
+      reale(0x19008912LL,0x135ebd637c000LL),
+      reale(-0x9c87f97LL,0x2fc1aca86b000LL),
+      reale(-0xe333bb3LL,0x6a09e3cf2000LL),reale(0xe4ac950LL,0x6d53e5d49000LL),
+      reale(-0x13236e9LL,0xb505beb9a8000LL),
+      reale(0x61a648LL,0x53e56b4c47000LL),
+      reale(-0x32e8783LL,0x4ab2ce9f5e000LL),
+      reale(0xc918dcLL,0x7f23319325000LL),reale(-0x30af60LL,0x8e0ebab3d4000LL),
+      reale(0xf35327LL,0x7112262fa3000LL),reale(-0x5567cdLL,0x276e897cca000LL),
+      reale(-517467LL,0xc78d24bf81000LL),reale(-280399LL,0xc849a31a35b00LL),
+      reale(0xa815b9093LL,0xe897fd72d67cbLL),
+      // _C4x[149]
+      reale(0x5159322LL,0xc7e70a9f1c000LL),
+      reale(-0x118b71aaLL,0x5047121068000LL),
+      reale(0x1810e57dLL,0xda2cbc2e94000LL),
+      reale(-0x66778e7LL,0x65170cb790000LL),
+      reale(-0xf96514fLL,0xfb4257b94c000LL),
+      reale(0xbf4cf6bLL,0xcaf344c1b8000LL),
+      reale(-0x16c677LL,0xe3f4c18ec4000LL),
+      reale(0x1620f4bLL,0x98196f9e60000LL),
+      reale(-0x2f24ee0LL,0x7df63fe7c000LL),reale(0x468025LL,0x4eb0e8bd08000LL),
+      reale(-0x9fd65eLL,0xcbc53357f4000LL),reale(0xfd40fdLL,0x1fd2e38d30000LL),
+      reale(-0x23f561LL,0xc44119eaac000LL),reale(0x3194f4LL,0x1edbdd7e58000LL),
+      reale(-0x40b45eLL,0x6cf17c0624000LL),reale(851256LL,0x2b979a0197a00LL),
+      reale(0xa815b9093LL,0xe897fd72d67cbLL),
+      // _C4x[150]
+      reale(0x16f68781LL,0xc522d651da000LL),
+      reale(-0x37e2828LL,0x7efd7619c3000LL),
+      reale(-0x10331b71LL,0x69423fe444000LL),
+      reale(0x9d098fdLL,0xfc4f4e3665000LL),reale(0x5e2551LL,0xa7ea1cfd2e000LL),
+      reale(0x229920aLL,0xf1d4bf77a7000LL),
+      reale(-0x2769d7dLL,0xa6caafd0d8000LL),
+      reale(0x1576f9LL,0xae66a659c9000LL),reale(-0xffa185LL,0x94f2f05382000LL),
+      reale(0xcec3fdLL,0x7d5a3390b000LL),reale(-0x1aefb0LL,0x7ae491796c000LL),
+      reale(0x6cfbdcLL,0xca525091ad000LL),reale(-0x3fd575LL,0x7e73a676d6000LL),
+      reale(-96165LL,0x5bcf853fef000LL),reale(-44021LL,0xd7e3d2faea500LL),
+      reale(0xa815b9093LL,0xe897fd72d67cbLL),
+      // _C4x[151]
+      reale(-0x1049519bLL,0xbc3bc38b38000LL),
+      reale(0x7f7b74aLL,0x952bfc30e0000LL),reale(0x6b8bceLL,0x68e4684408000LL),
+      reale(0x2acdc41LL,0xdb6a70b90000LL),
+      reale(-0x1edede8LL,0xeac4616e58000LL),
+      reale(0x1e9d3bLL,0xa0ac245340000LL),
+      reale(-0x1382e05LL,0xf62e5d8128000LL),
+      reale(0x93015bLL,0x6e1e5ebef0000LL),reale(-0x341c58LL,0x72efe2f378000LL),
+      reale(0x8ab64fLL,0x3d33d105a0000LL),reale(-0x2b7a31LL,0x15b9e03c48000LL),
+      reale(0x17b833LL,0x1bfff1de50000LL),reale(-0x258cfbLL,0x9abfabd298000LL),
+      reale(615586LL,0x6f27f96118400LL),reale(0xa815b9093LL,0xe897fd72d67cbLL),
+      // _C4x[152]
+      reale(0x3e7d45LL,0x789aeb9e64000LL),reale(0x2f3f4fcLL,0x46ab457e8d000LL),
+      reale(-0x172d674LL,0xfe330f229e000LL),
+      reale(0x476747LL,0x21a30e03df000LL),
+      reale(-0x14a9b26LL,0xf13444e798000LL),
+      reale(0x621a4aLL,0x6611bb6911000LL),reale(-0x5b001fLL,0x80ba019392000LL),
+      reale(0x8b7c4cLL,0xab5773fc63000LL),reale(-0x1f2f95LL,0xa3590ccccc000LL),
+      reale(0x3756fbLL,0xd85dd12c15000LL),reale(-0x2c8e14LL,0x45f0207986000LL),
+      reale(85758LL,0x333e03c667000LL),reale(28339LL,0x9119c9ad54d00LL),
+      reale(0xa815b9093LL,0xe897fd72d67cbLL),
+      // _C4x[153]
+      reale(-0x10fef3bLL,0xbc31d01c6c000LL),
+      reale(0x7bcf45LL,0x34042cf6f8000LL),
+      reale(-0x14146ecLL,0xe27dc86d24000LL),
+      reale(0x440754LL,0xaba1762760000LL),reale(-0x7ff03eLL,0xabf7bede1c000LL),
+      reale(0x7b4775LL,0xcbb99849c8000LL),reale(-0x2125efLL,0xafccca12d4000LL),
+      reale(0x4e4655LL,0x3b8a4c21b0000LL),reale(-0x25dda0LL,0x521386aecc000LL),
+      reale(934125LL,0x1149047298000LL),reale(-0x175f39LL,0x633afb5584000LL),
+      reale(453383LL,0xd34e451346a00LL),reale(0xa815b9093LL,0xe897fd72d67cbLL),
+      // _C4x[154]
+      reale(-0x127792cLL,0xc55293d82000LL),reale(0x37ddd5LL,0x231a8ee911000LL),
+      reale(-0x9b350bLL,0x643ebbbae8000LL),reale(0x657928LL,0x1449aa44ff000LL),
+      reale(-0x2d822fLL,0x4d0ecc294e000LL),reale(0x587365LL,0x225c7b8fcd000LL),
+      reale(-0x1e96e9LL,0x4cc2f0ac74000LL),reale(0x1fdbcfLL,0x2718a4e53b000LL),
+      reale(-0x1f259dLL,0x463b57281a000LL),reale(150337LL,0x64e8ec0109000LL),
+      reale(48205LL,0x4eea8f2f13300LL),reale(0xa815b9093LL,0xe897fd72d67cbLL),
+      // _C4x[155]
+      reale(-0xaaeacdLL,0x650ed01570000LL),reale(0x5156bcLL,0xd37ba10880000LL),
+      reale(-0x3e519fLL,0x5b8c134590000LL),reale(0x5823d2LL,0xc1238f4360000LL),
+      reale(-0x1c3bcfLL,0x81c9aeb8b0000LL),reale(0x2f2a39LL,0x298f1b5c40000LL),
+      reale(-0x1e3275LL,0xf67ab4a4d0000LL),reale(651396LL,0xde4e2e0920000LL),
+      reale(-0xf66e6LL,0xa1e7873ff0000LL),reale(341219LL,0x67868049b6800LL),
+      reale(0xa815b9093LL,0xe897fd72d67cbLL),
+      // _C4x[156]
+      reale(-0x4ee2b4LL,0x37e2479104000LL),reale(0x5182f3LL,0xe957aa505800LL),
+      reale(-0x1f44cdLL,0xd168ac9993000LL),reale(0x38fc96LL,0xdcd2e44998800LL),
+      reale(-0x1ae334LL,0x14143dae02000LL),reale(0x1469f4LL,0xa441c7cbb800LL),
+      reale(-0x1635daLL,0x81e7523fb1000LL),reale(163809LL,0xd9aab3cbce800LL),
+      reale(50215LL,0x8f7a6f7ead780LL),reale(0xa815b9093LL,0xe897fd72d67cbLL),
+      // _C4x[157]
+      reale(-191648LL,0xe77088a526000LL),reale(308186LL,0x45ee8f2434000LL),
+      reale(-124929LL,0x2de5b6ceb2000LL),reale(153616LL,0xaed0e35eb8000LL),
+      reale(-118467LL,0x3b495d565e000LL),reale(38029LL,0x77ad4b77bc000LL),
+      reale(-53613LL,0xbe09f47cea000LL),reale(20169LL,0xecfa5f7fa8900LL),
+      reale(0xcedfa8a8LL,0xea81d86b4b937LL),
+      // _C4x[158]
+      reale(-126384LL,0xa0947ea9b1000LL),reale(192332LL,0x2215a4d90d800LL),
+      reale(-113393LL,0x76c6d70356000LL),reale(71665LL,0x3fb557978e800LL),
+      reale(-81792LL,0x5906afc0bb000LL),reale(12036LL,0x1a6fad5adf800LL),
+      reale(3561LL,0x9aef6f2cefa80LL),reale(0xcedfa8a8LL,0xea81d86b4b937LL),
+      // _C4x[159]
+      real(-0x13b86e0d5c5dc000LL),real(0x135f9b0385fb0000LL),
+      real(-0x10df1064c3304000LL),real(0x58b0ae17a818000LL),
+      real(-0x70d05036b8ec000LL),real(0x2e5299a0b610e00LL),
+      reale(0x9b4e92LL,0x2338af8e3405bLL),
+      // _C4x[160]
+      real(-0xe48436400f9e000LL),real(0x825cbe3b5113800LL),
+      real(-0x9657faac8f9f000LL),real(0x1ac735d19d16800LL),
+      real(0x7b639e59c13780LL),reale(0x821f3cLL,0x2b5901ca2b961LL),
+      // _C4x[161]
+      real(-0x4519d2e6066000LL),real(0x17b1d503134000LL),
+      real(-0x1b53dc2d3c2000LL),real(0xc104a529c3b00LL),
+      reale(207992LL,0x1a086a30a3679LL),
+      // _C4x[162]
+      real(-0xb7a8cf8589000LL),real(0x25cdf8a9f5800LL),real(0xaa8ee05df480LL),
+      reale(53207LL,0x4825dfa147919LL),
+      // _C4x[163]
+      real(-0x97662e0000LL),real(0x4701a0b000LL),real(0x171a7cbcbc0a5e7LL),
+      // _C4x[164]
+      real(0x2f6e00LL),real(0x4338129a0b3LL),
+      // _C4x[165]
+      real(0x3be9413000LL),real(0x788a76e000LL),real(0xfb6e649000LL),
+      real(0x221f7064000LL),real(0x4d84a37f000LL),real(0xb958155a000LL),
+      real(0x1d5dd0db5000LL),real(0x4faa5a050000LL),real(0xea04686eb000LL),
+      real(0x2f40e3db46000LL),real(0xab8623d121000LL),real(0x2d147c4903c000LL),
+      real(0xe63ae874e57000LL),real(0x60cd21bcc932000LL),
+      real(0x3f869e23e408d000LL),reale(29814LL,0xcc97221028000LL),
+      reale(-808727LL,0x927c8409c3000LL),reale(0x663f4cLL,0x1daf27af1e000LL),
+      reale(-0x1cc1cd7LL,0x7a6bcd6bf9000LL),
+      reale(0x5229b89LL,0x7da76bf014000LL),
+      reale(-0x9d7aa1dLL,0x247f1bc92f000LL),
+      reale(0xc86d881LL,0xd18cc55d0a000LL),
+      reale(-0x92776d6LL,0xfa8f486365000LL),
+      reale(0x2c768a5LL,0x3d1480e1d3a00LL),
+      reale(0xc6a54f0aeLL,0xcd10b72aa064dLL),
+      // _C4x[166]
+      real(0x239fd418000LL),real(0x4ba47734000LL),real(0xa7b994d0000LL),
+      real(0x1869c5c6c000LL),real(0x3c23e3d88000LL),real(0x9e1c8b7a4000LL),
+      real(0x1c0ba4ea40000LL),real(0x573ad5a4dc000LL),real(0x12f915ab6f8000LL),
+      real(0x4c1f4084014000LL),real(0x170ced7cbfb0000LL),
+      real(0x921b89aca54c000LL),real(0x599b4a7922068000LL),
+      reale(38914LL,0x1efa73f084000LL),reale(-964916LL,0xae5925f520000LL),
+      reale(0x6dde12LL,0x92a23dbc000LL),reale(-0x1b531f7LL,0xfca92159d8000LL),
+      reale(0x438e649LL,0x39cdeca8f4000LL),
+      reale(-0x6d8cf62LL,0x320c56a90000LL),
+      reale(0x75051e2LL,0xd9bfe74e2c000LL),
+      reale(-0x4f4a46cLL,0x6125254348000LL),
+      reale(0x1ed5c62LL,0xbdc6e34964000LL),
+      reale(-0x53b1f6LL,0xad851e038cc00LL),
+      reale(0x42371a58fLL,0x99b03d0e3576fLL),
+      // _C4x[167]
+      real(0x72e86a7de000LL),real(0x10573642f8000LL),real(0x273ffc1812000LL),
+      real(0x64635c5cac000LL),real(0x11473cdd246000LL),
+      real(0x33fd816c260000LL),real(0xae6e2137a7a000LL),
+      real(0x29ff10928814000LL),real(0xc26a115cf4ae000LL),
+      real(0x492994f20c1c8000LL),reale(10833LL,0x80f3c9e4e2000LL),
+      reale(274842LL,0xd406a2037c000LL),reale(-0x6012e6LL,0x357fd12f16000LL),
+      reale(0x28c06b5LL,0xb6f3d1e130000LL),
+      reale(-0x902ffe5LL,0xbe5818774a000LL),
+      reale(0x131b9685LL,0xae49526ee4000LL),
+      reale(-0x18d0ede1LL,0x4737bba17e000LL),
+      reale(0x11c7fea3LL,0xb52957c098000LL),
+      reale(-0x28f7716LL,0x87866451b2000LL),
+      reale(-0x7256b3fLL,0x8fcbd36a4c000LL),
+      reale(0x631cd86LL,0x8691916be6000LL),
+      reale(-0x1bce7e3LL,0xd04a5c2dd1400LL),
+      reale(0xc6a54f0aeLL,0xcd10b72aa064dLL),
+      // _C4x[168]
+      real(0x65fa8c6bf0000LL),real(0xfe88642ae4000LL),real(0x2aa82304e58000LL),
+      real(0x7ca8bddcccc000LL),real(0x194fd4427cc0000LL),
+      real(0x5e16320d44b4000LL),real(0x1a2859bf40b28000LL),
+      reale(2409LL,0x1b825da69c000LL),reale(21179LL,0xabe6860d90000LL),
+      reale(506292LL,0x5b6e5f0684000LL),reale(-0xa4f38dLL,0x111e7797f8000LL),
+      reale(0x4035506LL,0xa18a80786c000LL),
+      reale(-0xcb7af66LL,0x186553be60000LL),
+      reale(0x171a9b67LL,0x51e3ba1054000LL),
+      reale(-0x1713e5f0LL,0x2aafbf94c8000LL),
+      reale(0x740ec42LL,0x2400c6e23c000LL),
+      reale(0xa4defabLL,0x9e57682f30000LL),
+      reale(-0xdbd43c5LL,0x48b18f0224000LL),
+      reale(0x6b2cfe6LL,0x4eee70a198000LL),
+      reale(-0x1357fecLL,0xbd6b61840c000LL),reale(-288687LL,0x6772cbaf58400LL),
+      reale(0xc6a54f0aeLL,0xcd10b72aa064dLL),
+      // _C4x[169]
+      real(0x5808512b12b000LL),real(0xfaa729276e2000LL),
+      real(0x3175560e4519000LL),real(0xb21b680b3a90000LL),
+      real(0x2fcbc5fe71407000LL),reale(4229LL,0xf0de326e3e000LL),
+      reale(35532LL,0x38e22907f5000LL),reale(805604LL,0x42db4fa3ec000LL),
+      reale(-0xf66e10LL,0x1b2982ae3000LL),reale(0x58b9699LL,0xf6628ead9a000LL),
+      reale(-0xfdac3daLL,0xc676bce6d1000LL),
+      reale(0x18b1f302LL,0x970145dd48000LL),
+      reale(-0x11f40565LL,0x3ab63845bf000LL),
+      reale(-0x31575d3LL,0xb1ef9c44f6000LL),
+      reale(0x106e189fLL,0x10481031ad000LL),
+      reale(-0xb2eb6deLL,0xf7a0fff6a4000LL),
+      reale(0x180fbb0LL,0x4ada23b49b000LL),reale(0xd45c14LL,0x3da6dc4452000LL),
+      reale(0x3e0d9bLL,0x8660f73889000LL),reale(-0x428dceLL,0x1567cdc2f8200LL),
+      reale(0xc6a54f0aeLL,0xcd10b72aa064dLL),
+      // _C4x[170]
+      real(0x55d873de6520000LL),real(0x12c7cfeef6810000LL),
+      real(0x4e200e3f1e1LL<<20),reale(6671LL,0xd2467fb9f0000LL),
+      reale(53806LL,0x18686edce0000LL),reale(0x11c054LL,0xd1cfb7f3d0000LL),
+      reale(-0x1502fabLL,0xc33ac28c0000LL),
+      reale(0x70b92b2LL,0x1061a8e5b0000LL),
+      reale(-0x124b5eeeLL,0x8d105894a0000LL),
+      reale(0x186f43c7LL,0xba4df5f90000LL),
+      reale(-0xba838f9LL,0x599212f080000LL),
+      reale(-0xa9ce7e3LL,0xb32b0c3170000LL),
+      reale(0x10dc1f5cLL,0xd715020c60000LL),
+      reale(-0x5f059dbLL,0xeee6c2b50000LL),
+      reale(-0x1403a99LL,0x499ecb840000LL),
+      reale(-0x85d82cLL,0xe5da701d30000LL),
+      reale(0x1de84a4LL,0xdb2c51c420000LL),
+      reale(-0xbe6604LL,0xdfff24d710000LL),reale(873590LL,0xbe0d3e9693000LL),
+      reale(0xc6a54f0aeLL,0xcd10b72aa064dLL),
+      // _C4x[171]
+      real(0x75cff722d22b8000LL),reale(9742LL,0x9cc7b8c380000LL),
+      reale(75734LL,0x79163f0448000LL),reale(0x17efacLL,0xd935dd4310000LL),
+      reale(-0x1ae82b9LL,0x7724ca0dd8000LL),
+      reale(0x873bb7eLL,0xe4716652a0000LL),
+      reale(-0x140d6db0LL,0x8555b08f68000LL),
+      reale(0x16ef83e9LL,0xe2aff0230000LL),
+      reale(-0x583b23fLL,0x42bacdd8f8000LL),
+      reale(-0xf10562eLL,0xb981ce61c0000LL),
+      reale(0xe4dc8aaLL,0xfd893c3a88000LL),
+      reale(-0x1b34f0bLL,0xebb6cd8150000LL),
+      reale(-0x1184f43LL,0xa3275b0418000LL),
+      reale(-0x2528095LL,0x87489d70e0000LL),
+      reale(0x1c9fc2bLL,0xb37b1485a8000LL),reale(-654616LL,0xf5695d4070000LL),
+      reale(-667572LL,0x7a3be40f38000LL),reale(-0x120754LL,0xe37e4557a9000LL),
+      reale(0xc6a54f0aeLL,0xcd10b72aa064dLL),
+      // _C4x[172]
+      reale(100946LL,0x14f5785LL<<20),reale(0x1eaeeeLL,0x3c46708bb0000LL),
+      reale(-0x20e75cdLL,0x91f6240c60000LL),
+      reale(0x9bbbb9eLL,0x527fb2e110000LL),
+      reale(-0x1535afb2LL,0xf1ddb263c0000LL),
+      reale(0x14b4a72eLL,0x3243b82e70000LL),
+      reale(-0x27da33LL,0x51c09edb20000LL),
+      reale(-0x110cefc7LL,0xfe6e06c3d0000LL),
+      reale(0xaca2ebcLL,0x45b975c280000LL),reale(0xa8ab13LL,0x8ea9e8f130000LL),
+      reale(0x51b2f5LL,0xc704cb69e0000LL),reale(-0x308183aLL,0xed5150690000LL),
+      reale(0xd69cccLL,0x546dd42140000LL),reale(0x1aaec6LL,0x2e869553f0000LL),
+      reale(0x944d30LL,0x671cfc38a0000LL),reale(-0x667356LL,0x8955702950000LL),
+      reale(816805LL,0x9ce5b98e4f000LL),reale(0xc6a54f0aeLL,0xcd10b72aa064dLL),
+      // _C4x[173]
+      reale(-0x26dd225LL,0x786da908ea000LL),
+      reale(0xae0225fLL,0x62c00442f4000LL),
+      reale(-0x15de519cLL,0x1dca9779fe000LL),
+      reale(0x121d771bLL,0x2a6218fe88000LL),
+      reale(0x435e53fLL,0xa70aa30512000LL),
+      reale(-0x1157138dLL,0xf33e0b21c000LL),
+      reale(0x76abd1aLL,0x116d522626000LL),
+      reale(0x176fc4eLL,0x49539549b0000LL),
+      reale(0x1c72a5aLL,0x6d4c4f193a000LL),
+      reale(-0x2c10a3aLL,0x3297f53144000LL),
+      reale(0x13211dLL,0x8798d15a4e000LL),reale(-0x58f317LL,0xcd63e8d4d8000LL),
+      reale(0xe7993aLL,0x87d0f72562000LL),reale(-0x34150bLL,0x9fbfa8206c000LL),
+      reale(-544538LL,0xecbc2ef676000LL),reale(-371793LL,0xa13fc7f54cc00LL),
+      reale(0xc6a54f0aeLL,0xcd10b72aa064dLL),
+      // _C4x[174]
+      reale(-0x16212c18LL,0x16c7bb2cd0000LL),
+      reale(0xf69ed07LL,0x3ab9b44ef8000LL),
+      reale(0x798b2aeLL,0xd7dad2fc20000LL),
+      reale(-0x10954e75LL,0xf88cfefd48000LL),
+      reale(0x4a43339LL,0xad9b189b70000LL),reale(0x14cda06LL,0xb09d2ff98000LL),
+      reale(0x2c7bc58LL,0x890e9d12c0000LL),
+      reale(-0x2046117LL,0xda4d755de8000LL),
+      reale(-0x2f3f88LL,0x905ab56a10000LL),
+      reale(-0xe1f069LL,0x5791192038000LL),reale(0xcaa92eLL,0xf66e06a960000LL),
+      reale(-452378LL,0xca32634e88000LL),reale(0x3743b3LL,0x85d91d8b0000LL),
+      reale(-0x39dba6LL,0xc57f8ef0d8000LL),reale(636887LL,0x5f8cc1d1bc800LL),
+      reale(0xc6a54f0aeLL,0xcd10b72aa064dLL),
+      // _C4x[175]
+      reale(0xa1cfd82LL,0xfc4e53058c000LL),
+      reale(-0xf4147a2LL,0x32be9906d0000LL),
+      reale(0x290cdd7LL,0x58bada2414000LL),reale(0xa79c68LL,0x79ecf34458000LL),
+      reale(0x3415dffLL,0xb3c2ab069c000LL),
+      reale(-0x13b713eLL,0xab846519e0000LL),reale(-762959LL,0xf369289524000LL),
+      reale(-0x135075fLL,0x528b3bcf68000LL),
+      reale(0x7e2193LL,0x9541dc37ac000LL),reale(-0x1345d0LL,0x6ba7b8acf0000LL),
+      reale(0x71293dLL,0xebded0d634000LL),reale(-0x2fa11fLL,0xe90ab3fa78000LL),
+      reale(-225539LL,0x7bccdd8bc000LL),reale(-111164LL,0xbe10787a44800LL),
+      reale(0xc6a54f0aeLL,0xcd10b72aa064dLL),
+      // _C4x[176]
+      reale(0x12106e1LL,0xd940803e20000LL),
+      reale(-0x2592f9LL,0x39b84a49c8000LL),
+      reale(0x34f8699LL,0x9a9f25d270000LL),
+      reale(-0x9b608eLL,0x20034e6118000LL),reale(0x49ccafLL,0xb44e233ec0000LL),
+      reale(-0x1469307LL,0xffa7235468000LL),
+      reale(0x3a3e7bLL,0xbef1c88b10000LL),reale(-0x440a5cLL,0x66dedf2bb8000LL),
+      reale(0x81bd21LL,0xac3fb5bf60000LL),reale(-0x1746f2LL,0x7f4749ef08000LL),
+      reale(0x192bcbLL,0x4cebe6e3b0000LL),reale(-0x22cd3cLL,0xb0af81a658000LL),
+      reale(482782LL,0x1ffc428c24800LL),reale(0xc6a54f0aeLL,0xcd10b72aa064dLL),
+      // _C4x[177]
+      reale(0x3179e51LL,0x1c6021da42000LL),
+      reale(-0x33b538LL,0xbad0d1ddbc000LL),reale(0xa7bf8aLL,0x58785d1036000LL),
+      reale(-0x128c9d4LL,0xd79d21c630000LL),
+      reale(0x163a87LL,0xebc764482a000LL),reale(-0x78e350LL,0x7270b07ea4000LL),
+      reale(0x70c4a4LL,0xfe1ce59e1e000LL),reale(-0x10403cLL,0xfd5d5f9318000LL),
+      reale(0x3b140dLL,0x7ef447ee12000LL),reale(-0x248d46LL,0x720bb40f8c000LL),
+      reale(-40352LL,0x4a68585406000LL),reale(-17708LL,0x145d230e3ec00LL),
+      reale(0xc6a54f0aeLL,0xcd10b72aa064dLL),
+      // _C4x[178]
+      reale(0xf6bf9fLL,0xf66942f9a0000LL),reale(-0xf35175LL,0x786c81e010000LL),
+      reale(0x12301eLL,0xa960c2f480000LL),reale(-0x9e694eLL,0x98569ef8f0000LL),
+      reale(0x526a10LL,0xec5f94af60000LL),reale(-0x1d3dbaLL,0x60d48299d0000LL),
+      reale(0x4ed6c3LL,0x6caf07ba40000LL),reale(-0x19a815LL,0x5f6b5a52b0000LL),
+      reale(912008LL,0xad6a83a520000LL),reale(-0x162bc1LL,0xc0ecbfb390000LL),
+      reale(367621LL,0xca46f4fdbb000LL),reale(0xc6a54f0aeLL,0xcd10b72aa064dLL),
+      // _C4x[179]
+      reale(0x2478c2LL,0x71ea4526d8000LL),reale(-0xaf1110LL,0xa0ac4eb8c0000LL),
+      reale(0x366a3cLL,0xe9fdb6daa8000LL),reale(-0x34ca42LL,0x424052a290000LL),
+      reale(0x514febLL,0xe507b89678000LL),reale(-0x125a98LL,0x4100e69c60000LL),
+      reale(0x21b128LL,0x527339ea48000LL),reale(-0x1b05eeLL,0x48e351f630000LL),
+      reale(48626LL,0x557ebf6618000LL),reale(16670LL,0x4a1716aa8d000LL),
+      reale(0xc6a54f0aeLL,0xcd10b72aa064dLL),
+      // _C4x[180]
+      reale(183603LL,0xf87cf65480000LL),reale(-387952LL,0x76cb6870f0000LL),
+      reale(363243LL,0x9b8677d760000LL),reale(-100928LL,0xf9523861d0000LL),
+      reale(246790LL,0x6a45746a40000LL),reale(-115868LL,0x31a9e68ab0000LL),
+      reale(45470LL,0x976a005d20000LL),reale(-74790LL,0x9413f53b90000LL),
+      reale(21823LL,0x7d1eb3d72b000LL),reale(0xf47cb00dLL,0x723c5cdbe4f41LL),
+      // _C4x[181]
+      reale(293467LL,0x7db7c77729000LL),reale(-146629LL,0xfb9026d01a000LL),
+      reale(282074LL,0xcdca0f3f8b000LL),reale(-92436LL,0xe8b14d3cbc000LL),
+      reale(105774LL,0xf5edeb18ed000LL),reale(-100727LL,0x877c6fad5e000LL),
+      reale(6619LL,0xde4489894f000LL),reale(2174LL,0xdeb0a21cf2e00LL),
+      reale(0xf47cb00dLL,0x723c5cdbe4f41LL),
+      // _C4x[182]
+      reale(279883LL,0xa92c150938000LL),reale(-86798LL,0x2ef3960ac4000LL),
+      reale(160072LL,0xfd9d58a4d0000LL),reale(-96732LL,0x3d4c2e98dc000LL),
+      reale(32938LL,0x46d62be868000LL),reale(-52163LL,0x3d81d264f4000LL),
+      reale(17103LL,0x67a9fde667c00LL),reale(0xf47cb00dLL,0x723c5cdbe4f41LL),
+      // _C4x[183]
+      reale(17715LL,0xdb1cfba26000LL),reale(-7690LL,0x66892806b8000LL),
+      reale(6474LL,0xb1047d5d4a000LL),reale(-6856LL,0x591154455c000LL),
+      real(0x2ac3e335ea26e000LL),real(0xd6d2e7c22e28400LL),
+      reale(0x1639e175LL,0x96057cce2c163LL),
+      // _C4x[184]
+      real(0x10bc6a9e4ee30000LL),real(-0xc179e3d40c9c000LL),
+      real(0x3edf483df118000LL),real(-0x5c91fff78634000LL),
+      real(0x216fdab58654400LL),reale(0x99c7d2LL,0xbedd8dc0620e7LL),
+      // _C4x[185]
+      real(0x297e6b0e9e1000LL),real(-0x2e90de909aa000LL),
+      real(0x6148b0a84b000LL),real(0x1d77336bca600LL),
+      reale(207992LL,0x1a086a30a3679LL),
+      // _C4x[186]
+      real(0x642bf3240000LL),real(-0x876551ce0000LL),real(0x350bfa156000LL),
+      reale(4837LL,0x68f14547adebLL),
+      // _C4x[187]
+      real(0x3c8190000LL),real(0x11d12e000LL),real(0x219ae3fb400f15LL),
+      // _C4x[188]
+      real(139264LL),real(0xed069a73dLL),
+      // _C4x[189]
+      real(-0x1190ae0000LL),real(-0x28e92d0000LL),real(-0x63f2a40000LL),
+      real(-0x101b8fb0000LL),real(-0x2c2c61a0000LL),real(-0x8210e690000LL),
+      real(-0x1a03615LL<<20),real(-0x5bebf1b70000LL),real(-0x16e928a860000LL),
+      real(-0x6a5f183250000LL),real(-0x25b29487fc0000LL),
+      real(-0x11b5c31caf30000LL),real(-0xd14cd352ff20000LL),
+      reale(-6970LL,0x4e82e769f0000LL),reale(216834LL,0xe733e07580000LL),
+      reale(-0x1fd87cLL,0xeacaf9510000LL),reale(0xa93ca1LL,0x4b9d7f7a20000LL),
+      reale(-0x2484521LL,0x566041ce30000LL),
+      reale(0x57a3f81LL,0x9718fbaac0000LL),
+      reale(-0x9563212LL,0xbe72819150000LL),
+      reale(0xb03347dLL,0x6102c9a360000LL),
+      reale(-0x7b5718bLL,0x8e472da70000LL),
+      reale(0x249ddb5LL,0x415c2de726c00LL),
+      reale(0xe534e50c9LL,0xb18970e26a4cfLL),
+      // _C4x[190]
+      real(-0x2d470940000LL),real(-0x71ae7bLL<<20),real(-0x12ee0a8c0000LL),
+      real(-0x360310f80000LL),real(-0xa6fff6c40000LL),real(-0x23849d7cLL<<20),
+      real(-0x87e0edbbc0000LL),real(-0x25a8132a880000LL),
+      real(-0xcadd965ff40000LL),real(-0x59fdf46f7dLL<<20),
+      real(-0x3e4f1a2b29ec0000LL),reale(-30848LL,0x62a4d51e80000LL),
+      reale(882325LL,0x7fea51fdc0000LL),reale(-0x759934LL,0x3a79442LL<<20),
+      reale(0x22e2ad0LL,0x28af9d6e40000LL),
+      reale(-0x697b063LL,0x8d593f0580000LL),
+      reale(0xd895360LL,0x9e98f54ac0000LL),
+      reale(-0x13411d4cLL,0x97892681LL<<20),
+      reale(0x12bb199cLL,0xb5ebcf2b40000LL),
+      reale(-0xbdfd6a7LL,0xa4c0e3cc80000LL),
+      reale(0x467ae98LL,0x8d3450a7c0000LL),
+      reale(-0xb902a6LL,0xf8d56ac47a800LL),
+      reale(0xe534e50c9LL,0xb18970e26a4cfLL),
+      // _C4x[191]
+      real(-0x48a0a3640000LL),real(-0xc9814e4b0000LL),real(-0x25c525dfa0000LL),
+      real(-0x7c4fe70d90000LL),real(-0x1ca738085LL<<20),
+      real(-0x7a02179d470000LL),real(-0x274586580a60000LL),
+      real(-0x10907db87bd50000LL),reale(-2774LL,0x6efa5dac40000LL),
+      reale(-80425LL,0xffb54a33d0000LL),reale(0x209010LL,0xd8c3d9bae0000LL),
+      reale(-0x10469ddLL,0x78f6777af0000LL),
+      reale(0x4577ed4LL,0xce98cb3d80000LL),
+      reale(-0xb7fa2deLL,0xbb7ab71410000LL),
+      reale(0x13ceefd4LL,0xa61d5e5020000LL),
+      reale(-0x15b7842fLL,0xd9f1867b30000LL),
+      reale(0xcd32ef0LL,0xfd6630ec0000LL),reale(0x50e620LL,0x177c84ac50000LL),
+      reale(-0x71131b7LL,0x95aaf49560000LL),
+      reale(0x55092a7LL,0x5c73fd2370000LL),
+      reale(-0x16d9d9cLL,0x8a3809d99cc00LL),
+      reale(0xe534e50c9LL,0xb18970e26a4cfLL),
+      // _C4x[192]
+      real(-0x6597eabbLL<<20),real(-0x1448d4182LL<<20),
+      real(-0x4866a1e49LL<<20),real(-0x1295eca79LL<<24),
+      real(-0x5bf59820d7LL<<20),real(-0x251667dfd9eLL<<20),
+      reale(-5904LL,0xd0f54b9bLL<<20),reale(-161528LL,0x78562a54LL<<20),
+      reale(0x3d21c2LL,0x4bcc950dLL<<20),reale(-0x1c31d50LL,0x638e5e46LL<<20),
+      reale(0x6cf9729LL,0x8be6b97fLL<<20),reale(-0xfd832e7LL,0xe1ce6c38LL<<20),
+      reale(0x169aa451LL,0xfa7fa6f1LL<<20),
+      reale(-0x1172181cLL,0x7709822aLL<<20),
+      reale(0x12fe2bbLL,0xdf619b63LL<<20),reale(0xbc8d686LL,0x5c064e1cLL<<20),
+      reale(-0xbc41c83LL,0xc9b184d5LL<<20),reale(0x5014eeaLL,0x2e2b1e0eLL<<20),
+      reale(-0xc41e5eLL,0xafca6147LL<<20),reale(-602477LL,0xa03d7c8f54000LL),
+      reale(0xe534e50c9LL,0xb18970e26a4cfLL),
+      // _C4x[193]
+      real(-0x98838ab2280000LL),real(-0x25e72e362c40000LL),
+      real(-0xb4eb768b34LL<<20),real(-0x4616f301f1bc0000LL),
+      reale(-10660LL,0x17f0af3a80000LL),reale(-276844LL,0xeaf150cc0000LL),
+      reale(0x628feeLL,0x1955d6d9LL<<20),reale(-0x2a3b5a2LL,0xdcad2d7d40000LL),
+      reale(0x94c6c4bLL,0xf835425780000LL),
+      reale(-0x13107e6eLL,0x54794f65c0000LL),
+      reale(0x163219a4LL,0xa7c7f066LL<<20),
+      reale(-0x9f23cf6LL,0x4514d1f640000LL),
+      reale(-0x8debedaLL,0x18edabb480000LL),
+      reale(0xf860e5aLL,0x13d2525ec0000LL),
+      reale(-0x7d8dfc8LL,0xe67aaef3LL<<20),reale(0x2a5aadLL,0xa4d87cf40000LL),
+      reale(0xbbc726LL,0xbbbb48d180000LL),reale(0x51b751LL,0x8c165777c0000LL),
+      reale(-0x3c855fLL,0x343f7404e9000LL),
+      reale(0xe534e50c9LL,0xb18970e26a4cfLL),
+      // _C4x[194]
+      real(-0x13bc5107d5fLL<<20),real(-0x75f6b32585LL<<24),
+      reale(-17218LL,0x7dbad4ffLL<<20),reale(-426470LL,0xbd931c8aLL<<20),
+      reale(0x8f9bafLL,0x43ffc94dLL<<20),reale(-0x39817fbLL,0xf009fa44LL<<20),
+      reale(0xb9bb58dLL,0x6d6ce16bLL<<20),reale(-0x1509419eLL,0xc15c8beLL<<20),
+      reale(0x139068ebLL,0x8f597f39LL<<20),
+      reale(-0x20f5f87LL,0x540ccfd8LL<<20),
+      reale(-0xecdd73fLL,0x16982497LL<<20),reale(0xd82af57LL,0xa70b7772LL<<20),
+      reale(-0x26418d9LL,0x51eb3365LL<<20),reale(-0x18b2ccdLL,0xab2a76cLL<<20),
+      reale(-0xf4cf65LL,0x68ad2d83LL<<20),reale(0x1b5e758LL,0xd9a227a6LL<<20),
+      reale(-0x928681LL,0x6ebd74d1LL<<20),reale(502063LL,0xa52218333a000LL),
+      reale(0xe534e50c9LL,0xb18970e26a4cfLL),
+      // _C4x[195]
+      reale(-25658LL,0xa24a336cLL<<20),reale(-608652LL,0x5343bf2a40000LL),
+      reale(0xc2c394LL,0x3febf40680000LL),
+      reale(-0x4943b9aLL,0xd17b059ec0000LL),
+      reale(0xda1446bLL,0xf63dc5d1LL<<20),
+      reale(-0x15e0ed11LL,0x8a9235b40000LL),
+      reale(0xfb43f95LL,0xff62b37b80000LL),
+      reale(0x4aeefb2LL,0xffb10f8fc0000LL),
+      reale(-0x10e69c67LL,0x2a0f4fb6LL<<20),
+      reale(0x938931eLL,0x897e8b6c40000LL),
+      reale(0x102713cLL,0x39ce093080000LL),
+      reale(-0x622837LL,0x8a50a620c0000LL),
+      reale(-0x29061dfLL,0xc790fe9bLL<<20),
+      reale(0x15108abLL,0xaa7600dd40000LL),reale(0x196a29LL,0xfe01d2a580000LL),
+      reale(-163222LL,0x1f5352d1c0000LL),reale(-0x1225fcLL,0x8993dd9f5d000LL),
+      reale(0xe534e50c9LL,0xb18970e26a4cfLL),
+      // _C4x[196]
+      reale(0xfa8152LL,0x8f8d14ffLL<<20),reale(-0x58ed16cLL,0x45c460aeLL<<20),
+      reale(0xf514970LL,0xeef1eddLL<<20),reale(-0x15ce9c39LL,0x339e324cLL<<20),
+      reale(0xb60efdeLL,0x595d0ebbLL<<20),reale(0x9bd7c06LL,0xa9a9ebeaLL<<20),
+      reale(-0x105baed2LL,0x60f6c899LL<<20),
+      reale(0x4f1d79dLL,0x4e054188LL<<20),reale(0x204a5c8LL,0x6713c077LL<<20),
+      reale(0x181ac5fLL,0xb2418726LL<<20),reale(-0x2bb8732LL,0x1dd89a55LL<<20),
+      reale(0x4483c0LL,0x373890c4LL<<20),reale(0xf6cd4LL,0x292bca33LL<<20),
+      reale(0x98cb2bLL,0x7b999262LL<<20),reale(-0x56064cLL,0x84bb3411LL<<20),
+      reale(570308LL,0x8f0afe45ec000LL),reale(0xe534e50c9LL,0xb18970e26a4cfLL),
+      // _C4x[197]
+      reale(0x10aa9f77LL,0xd9972cba40000LL),
+      reale(-0x150d3784LL,0x97847cdde0000LL),
+      reale(0x71746cfLL,0x84cfe68e80000LL),
+      reale(0xd1e6767LL,0x1ac8f62b20000LL),
+      reale(-0xe5a8a42LL,0x863e23d2c0000LL),
+      reale(0x1ac644cLL,0xec7a345460000LL),reale(0x179c9f1LL,0x6c65b99fLL<<20),
+      reale(0x2dca296LL,0xb5345431a0000LL),
+      reale(-0x1edfab8LL,0x3845370b40000LL),
+      reale(-0x4d70c0LL,0xbf9adf9ae0000LL),
+      reale(-0x8ac6b1LL,0x3f2f732f80000LL),reale(0xd01d74LL,0x1b75c36820000LL),
+      reale(-0x1b0e0dLL,0xeaaa1b23c0000LL),reale(-460477LL,0xae54a57160000LL),
+      reale(-423739LL,0xa2676cb6dd800LL),
+      reale(0xe534e50c9LL,0xb18970e26a4cfLL),
+      // _C4x[198]
+      reale(0x3221594LL,0x16732a4380000LL),reale(0xf12442eLL,0x43ccb16eLL<<20),
+      reale(-0xbc0c6ecLL,0x26fd76b080000LL),
+      reale(-0x65e757LL,0x2c41c549LL<<20),reale(0x44f4dbLL,0xd91075f580000LL),
+      reale(0x3606438LL,0x1abdf574LL<<20),reale(-0xe94bbdLL,0xc3c7390280000LL),
+      reale(-0x38a850LL,0xac5435dfLL<<20),
+      reale(-0x110d691LL,0x2650b0c780000LL),reale(0x90e1d6LL,0xb2883a7aLL<<20),
+      reale(492167LL,0x56a6ee3480000LL),reale(0x3c4f9aLL,0xffff0735LL<<20),
+      reale(-0x333dbcLL,0x6719a23980000LL),reale(480004LL,0x1e727719e9000LL),
+      reale(0xe534e50c9LL,0xb18970e26a4cfLL),
+      // _C4x[199]
+      reale(-0x9192c40LL,0xe2c29b7e80000LL),
+      reale(-0x17049d9LL,0x2caeb0c720000LL),
+      reale(-0x10205dbLL,0x8757db9ac0000LL),
+      reale(0x337cb8eLL,0xc115854860000LL),reale(-0x2174afLL,0x3bada23fLL<<20),
+      reale(0x3acb11LL,0x1500d47da0000LL),
+      reale(-0x13bb400LL,0xb0e3688340000LL),
+      reale(0x35a000LL,0xf1b4463ee0000LL),reale(-0x1baec9LL,0x89846f7f80000LL),
+      reale(0x703a13LL,0xbd88356420000LL),reale(-0x21b08bLL,0xfd266e4bc0000LL),
+      reale(-269544LL,0xe44ca5c560000LL),reale(-156647LL,0x8434c4c595800LL),
+      reale(0xe534e50c9LL,0xb18970e26a4cfLL),
+      // _C4x[200]
+      reale(-0x20e15e1LL,0xbf46d1bfLL<<20),reale(0x2ac48aeLL,0x61685b62LL<<20),
+      reale(0x4649e0LL,0x5db54885LL<<20),reale(0xbeaec0LL,0x64563de8LL<<20),
+      reale(-0x116ccf0LL,0xa3fd094bLL<<20),reale(-128701LL,0xa77a706eLL<<20),
+      reale(-0x5dac8aLL,0xd6ec6011LL<<20),reale(0x70afd6LL,0x17f62ef4LL<<20),
+      reale(-590510LL,0x5a1128d7LL<<20),reale(0x1b799aLL,0x5358957aLL<<20),
+      reale(-0x1fecf6LL,0x2b71ef9dLL<<20),reale(381025LL,0x99466ecd7c000LL),
+      reale(0xe534e50c9LL,0xb18970e26a4cfLL),
+      // _C4x[201]
+      reale(0x58abcbLL,0xeb3253d980000LL),reale(0x1244ba7LL,0x5d4a7ae6c0000LL),
+      reale(-0xc9f225LL,0x9cbf654eLL<<20),reale(-473730LL,0x5331198540000LL),
+      reale(-0x93dd40LL,0xb6af590280000LL),reale(0x4f9f93LL,0x4eb5945bc0000LL),
+      reale(-699194LL,0x3a7fd467LL<<20),reale(0x3d87afLL,0xb01d955a40000LL),
+      reale(-0x1d03d5LL,0x4d30d0eb80000LL),reale(-111198LL,0xf5575470c0000LL),
+      reale(-51623LL,0x225dac5061000LL),reale(0xe534e50c9LL,0xb18970e26a4cfLL),
+      // _C4x[202]
+      reale(-0x78a763LL,0xe12263dLL<<20),reale(0x186fcbLL,0x9fe6dc38LL<<20),
+      reale(-0xab7c69LL,0x33b40ed3LL<<20),reale(0x29e3c4LL,0xd51ea2faLL<<20),
+      reale(-0x237bd0LL,0x79b81299LL<<20),reale(0x4b60a3LL,0xa9ce0b9cLL<<20),
+      reale(-0xf94c7LL,0xdedf92efLL<<20),reale(952760LL,0xc26e557eLL<<20),
+      reale(-0x14d541LL,0xc6765135LL<<20),reale(299618LL,0x2f589c3f22000LL),
+      reale(0xe534e50c9LL,0xb18970e26a4cfLL),
+      // _C4x[203]
+      reale(-0xa5aec8LL,0x777cc83eLL<<20),reale(0x11a17dLL,0xa514064740000LL),
+      reale(-0x4343d4LL,0xdeea4d3680000LL),reale(0x4492b2LL,0xa8330ec1c0000LL),
+      reale(-693748LL,0x1fe425dfLL<<20),reale(0x23a5c6LL,0x8456366440000LL),
+      reale(-0x16e099LL,0x6b88f7a780000LL),reale(-18467LL,0xa097fb1ec0000LL),
+      reale(-7819LL,0x911b78647d000LL),reale(0xe534e50c9LL,0xb18970e26a4cfLL),
+      // _C4x[204]
+      reale(-467158LL,0xbe6f51b1LL<<20),reale(258178LL,0x5a0948aaLL<<20),
+      reale(-91475LL,0xdea433a3LL<<20),reale(248285LL,0x28df051cLL<<20),
+      reale(-82822LL,0xf2367e95LL<<20),reale(44668LL,0x7dd558eLL<<20),
+      reale(-71457LL,0x60e16887LL<<20),reale(18220LL,0x9846e079d4000LL),
+      reale(0x11a19b771LL,0xf9f6e14c7e54bLL),
+      // _C4x[205]
+      reale(-169327LL,0xe0a806c9e0000LL),reale(261065LL,0x25b4e353d0000LL),
+      reale(-59143LL,0xf3af66d40000LL),reale(111182LL,0x112090dcb0000LL),
+      reale(-88870LL,0xfc3ddec8a0000LL),reale(2313LL,0xe34bfe3f90000LL),
+      real(0x32dc48b9e1d23400LL),reale(0x11a19b771LL,0xf9f6e14c7e54bLL),
+      // _C4x[206]
+      reale(-5991LL,0x42dcd933c0000LL),reale(14992LL,0xef80deedLL<<20),
+      reale(-6874LL,0x7aef520a40000LL),reale(2782LL,0xeff05a1280000LL),
+      reale(-4584LL,0x3766db4cc0000LL),real(0x52aed30dcf988800LL),
+      reale(0x19a53f38LL,0xe82db7640b7c1LL),
+      // _C4x[207]
+      real(-0x64d0a86bae7c0000LL),real(0x7c07ce24c65f0000LL),
+      real(-0x739ece76489e0000LL),real(0x6e7bce15f550000LL),
+      real(0x24fc420030b8400LL),reale(0x79fd486LL,0x8a371ad88dcafLL),
+      // _C4x[208]
+      real(-0x2af5689902LL<<20),real(0xf13527954LL<<20),
+      real(-0x183402f656LL<<20),real(0x7c00d0f2b78000LL),
+      reale(0x2f9b09LL,0x867e38d993117LL),
+      // _C4x[209]
+      real(-0xd09e1c29LL<<20),real(0x12ca6fb180000LL),real(0x6038c37fa000LL),
+      reale(72555LL,0x626230f3330c5LL),
+      // _C4x[210]
+      real(-323414LL<<20),real(0x1b9da04000LL),real(0xcf8f801ee602cdLL),
+      // _C4x[211]
+      real(0x30c152000LL),real(0x90e6983c364f3dLL),
+      // _C4x[212]
+      real(0x8ec3e0000LL),real(0x18af380000LL),real(0x48d1b20000LL),
+      real(0xe74ecc0000LL),real(0x32102a60000LL),real(0xc018f6LL<<20),
+      real(0x342f821a0000LL),real(0x1092e17f40000LL),real(0x67551030e0000LL),
+      real(0x35a73e8f880000LL),real(0x2c0f1d988820000LL),
+      real(0x66a336663d1c0000LL),reale(-57642LL,0xc0a9505760000LL),
+      reale(631918LL,0xdc4e0a7bLL<<20),reale(-0x3b0f28LL,0xfaa1ffcea0000LL),
+      reale(0xeea5b7LL,0xcc8b836440000LL),
+      reale(-0x2ad019aLL,0xf282821de0000LL),
+      reale(0x5a4bd8dLL,0x4657ccfd80000LL),
+      reale(-0x8ca7609LL,0xa1324f7520000LL),
+      reale(0x9c48325LL,0xbeaba7b6c0000LL),
+      reale(-0x69b85e5LL,0x2c31870460000LL),
+      reale(0x1ed5c62LL,0xbdc6e34964000LL),
+      reale(0x103c47b0e4LL,0x96022a9a34351LL),
+      // _C4x[213]
+      real(0x224b92LL<<20),real(0x69949980000LL),real(0x161630dLL<<20),
+      real(0x51a8b0880000LL),real(0x154c89a8LL<<20),real(0x677d728780000LL),
+      real(0x2660ce143LL<<20),real(0x12dc092af680000LL),
+      real(0xe8fe920bbeLL<<20),reale(8102LL,0xc40d4c3580000LL),
+      reale(-262913LL,0xa90a5af9LL<<20),reale(0x2833faLL,0xeee5962480000LL),
+      reale(-0xde08adLL,0x51a100d4LL<<20),reale(0x31b7db9LL,0xff2660a380000LL),
+      reale(-0x7bf1a66LL,0x57f83f2fLL<<20),
+      reale(0xdd78d25LL,0x42080b9280000LL),
+      reale(-0x11c8a829LL,0x86d597eaLL<<20),
+      reale(0x100ff41bLL,0xef976ed180000LL),
+      reale(-0x9a71832LL,0xa6f5fce5LL<<20),
+      reale(0x37288a3LL,0xe8f14a4080000LL),
+      reale(-0x8cf5d4LL,0xee5975eb08000LL),
+      reale(0x103c47b0e4LL,0x96022a9a34351LL),
+      // _C4x[214]
+      real(0x56f7f42LL<<20),real(0x137048c4LL<<20),real(0x4e394236LL<<20),
+      real(0x16d2fe42LL<<24),real(0x81931b98aLL<<20),real(0x3c9fbdb57cLL<<20),
+      real(0x2c4e5dd087eLL<<20),reale(23168LL,0xb63e7e18LL<<20),
+      reale(-700306LL,0xcb5d6a52LL<<20),reale(0x62a65eLL,0x20152f34LL<<20),
+      reale(-0x1ee9970LL,0x93246246LL<<20),reale(0x62872d7LL,0x8a529a1LL<<24),
+      reale(-0xd408826LL,0x68d9eb9aLL<<20),reale(0x136f6f74LL,0xd4d1fecLL<<20),
+      reale(-0x1279ae0fLL,0x5e5da98eLL<<20),
+      reale(0x8f07171LL,0x93046208LL<<20),reale(0x21fb8d1LL,0x44c61762LL<<20),
+      reale(-0x6bdd802LL,0xaf4f1a4LL<<20),reale(0x498b62fLL,0xe141b856LL<<20),
+      reale(-0x1326f72LL,0x32ac37fef0000LL),
+      reale(0x103c47b0e4LL,0x96022a9a34351LL),
+      // _C4x[215]
+      real(0xd525ae2fLL<<20),real(0x3bfe51acd80000LL),real(0x14751dbf38LL<<20),
+      real(0x9286be006280000LL),real(0x65e9f47db41LL<<20),
+      reale(50386LL,0x86f8894780000LL),reale(-0x15ca2fLL,0x372198eaLL<<20),
+      reale(0xba91d7LL,0xb80fee1c80000LL),reale(-0x3569975LL,0x71629ed3LL<<20),
+      reale(0x9816bb3LL,0xad60df8180000LL),
+      reale(-0x11995ddaLL,0x3ee5339cLL<<20),
+      reale(0x148a4441LL,0xbf8cd61680000LL),
+      reale(-0xc15425aLL,0xc742cde5LL<<20),
+      reale(-0x304fe0dLL,0x583a627b80000LL),
+      reale(0xc08825fLL,0xb446a44eLL<<20),
+      reale(-0x9ed9454LL,0x60047d5080000LL),
+      reale(0x3c543a5LL,0x9bd83d77LL<<20),reale(-0x7c355eLL,0xc4aad73580000LL),
+      reale(-722972LL,0x59e3624598000LL),
+      reale(0x103c47b0e4LL,0x96022a9a34351LL),
+      // _C4x[216]
+      real(0x2b0d53a8d380000LL),real(0x128427872f8LL<<20),
+      reale(3152LL,0x21e0ef9c80000LL),reale(92558LL,0x88d6b079LL<<20),
+      reale(-0x25bd73LL,0xcc4c448580000LL),reale(0x12d7a03LL,0x2af5113aLL<<20),
+      reale(-0x4f4f5f9LL,0x3ab8fbce80000LL),
+      reale(0xca92d12LL,0x7b25aa7bLL<<20),
+      reale(-0x14180130LL,0x5b5be5b780000LL),
+      reale(0x11d6daa4LL,0xa65ca17cLL<<20),
+      reale(-0x30b5c07LL,0x78d6768080000LL),
+      reale(-0xbf87222LL,0xb76dd37dLL<<20),
+      reale(0xd9673edLL,0x4f07ee6980000LL),
+      reale(-0x5366bc7LL,0xec8e7dbeLL<<20),
+      reale(-0x9376a5LL,0x29d081b280000LL),reale(0x949ea1LL,0xe9a6e57fLL<<20),
+      reale(0x5d1998LL,0x9502809b80000LL),reale(-0x36bff2LL,0x7bbdd4c1b0000LL),
+      reale(0x103c47b0e4LL,0x96022a9a34351LL),
+      // _C4x[217]
+      reale(5407LL,0xd1adcca8LL<<20),reale(151556LL,0x14ad8d3780000LL),
+      reale(-0x3a8b7eLL,0x195056e3LL<<20),reale(0x1b69425LL,0xeee8aa0680000LL),
+      reale(-0x6a9225eLL,0x4c3075feLL<<20),reale(0xf50f617LL,0x70ef2a580000LL),
+      reale(-0x14b95b24LL,0xd5944dd9LL<<20),
+      reale(0xce101ceLL,0x4e2988f480000LL),reale(0x543476cLL,0xbc87e254LL<<20),
+      reale(-0xfb71d1dLL,0x5b9566d380000LL),reale(0x9c2aeceLL,0x23dc74fLL<<20),
+      reale(-0x1b8652LL,0x43134e2280000LL),
+      reale(-0x1583d9cLL,0xf311d0aaLL<<20),
+      reale(-0x1437434LL,0x8eb4b8c180000LL),
+      reale(0x187864bLL,0xb973c245LL<<20),reale(-0x712b83LL,0x313bc89080000LL),
+      reale(268690LL,0x9ce0757848000LL),
+      reale(0x103c47b0e4LL,0x96022a9a34351LL),
+      // _C4x[218]
+      reale(-0x53ea18LL,0x8f9d759eLL<<20),reale(0x25035b8LL,0x53465694LL<<20),
+      reale(-0x8587e53LL,0x343466faLL<<20),
+      reale(0x1154a7d9LL,0x4e192088LL<<20),
+      reale(-0x13d3029dLL,0xaac74476LL<<20),
+      reale(0x7164f9bLL,0xae30c5fcLL<<20),reale(0xb4a7542LL,0x1c5614d2LL<<20),
+      reale(-0xf4937a3LL,0x175affbLL<<24),reale(0x4abc2d8LL,0x94a366ceLL<<20),
+      reale(0x21de83bLL,0x12a9f664LL<<20),reale(0x7ac24cLL,0xb8d212aLL<<20),
+      reale(-0x28b7cc9LL,0x364e92d8LL<<20),reale(0xe8201fLL,0x3c5752a6LL<<20),
+      reale(0x2bb045LL,0xd782cdccLL<<20),reale(284029LL,0xe5250202LL<<20),
+      reale(-0x11b778LL,0x93e70d5290000LL),
+      reale(0x103c47b0e4LL,0x96022a9a34351LL),
+      // _C4x[219]
+      reale(-0x9efcbe0LL,0x308817b9LL<<20),
+      reale(0x12ae6dc7LL,0x456ffc2b80000LL),
+      reale(-0x11d592aaLL,0x667fb09aLL<<20),
+      reale(0x1740edfLL,0x9e2d491880000LL),reale(0xec8a086LL,0xc154cbbbLL<<20),
+      reale(-0xc84d74eLL,0xbebcd1580000LL),reale(0xa66dc1LL,0xe50050bcLL<<20),
+      reale(0x1c8f8caLL,0x3cc1e1c280000LL),reale(0x2670572LL,0xa270573dLL<<20),
+      reale(-0x230b2e7LL,0x4751f8bf80000LL),
+      reale(-0x1d847dLL,0xf13cb6deLL<<20),reale(-492519LL,0x721bebac80000LL),
+      reale(0x97d083LL,0x4ad3973fLL<<20),reale(-0x4806caLL,0xf46f4c2980000LL),
+      reale(398374LL,0x9081f25c18000LL),
+      reale(0x103c47b0e4LL,0x96022a9a34351LL),
+      // _C4x[220]
+      reale(-0xf2b7a6fLL,0x1d474944c0000LL),
+      reale(-0x377451dLL,0xa8443a85LL<<20),
+      reale(0x101fd960LL,0x2f7f301540000LL),
+      reale(-0x8f09975LL,0x19b87a0980000LL),
+      reale(-0x1a1005cLL,0x66191615c0000LL),reale(0x3d3755LL,0x309016aeLL<<20),
+      reale(0x34660eeLL,0xaf3dd22640000LL),
+      reale(-0x10ab337LL,0x8b1ad5d280000LL),
+      reale(-0x687e5aLL,0x64417926c0000LL),reale(-0xb55d63LL,0x3b77ecd7LL<<20),
+      reale(0xb2a250LL,0xa1dc1f740000LL),reale(-595379LL,0xb781251b80000LL),
+      reale(-329168LL,0x1f996977c0000LL),reale(-450082LL,0xa6a2e9d6a8000LL),
+      reale(0x103c47b0e4LL,0x96022a9a34351LL),
+      // _C4x[221]
+      reale(0xfe6097eLL,0x7e5f0e72LL<<20),
+      reale(-0x5809df8LL,0xf6b56d0680000LL),
+      reale(-0x25f1140LL,0x5c7b49afLL<<20),
+      reale(-0x1701d2bLL,0x6003312f80000LL),reale(0x31a00bdLL,0x3ee834cLL<<20),
+      reale(-214470LL,0x8f5e194880000LL),reale(-32745LL,0x34f06869LL<<20),
+      reale(-0x1221d5eLL,0x739d847180000LL),reale(0x59fbb5LL,0x5b836626LL<<20),
+      reale(758445LL,0x105399ca80000LL),reale(0x3fdd18LL,0xb1cf9a3LL<<20),
+      reale(-0x2d195eLL,0x5aac587380000LL),reale(363691LL,0xed908404b8000LL),
+      reale(0x103c47b0e4LL,0x96022a9a34351LL),
+      // _C4x[222]
+      reale(-0x2126789LL,0x5bc7259eLL<<20),
+      reale(-0x2b00200LL,0x590f388cLL<<20),reale(0x2528e33LL,0x4c91548aLL<<20),
+      reale(0x7fd60bLL,0xe7688afLL<<24),reale(0xa4e05cLL,0x2043c096LL<<20),
+      reale(-0x117f915LL,0xed6db654LL<<20),reale(-8505LL,0xab065182LL<<20),
+      reale(-0x2bdacbLL,0xcdf5fc78LL<<20),reale(0x6adb6fLL,0x2051f70eLL<<20),
+      reale(-0x1637a0LL,0x89786f1cLL<<20),reale(-262922LL,0x3c6538faLL<<20),
+      reale(-186714LL,0x99e7b25d50000LL),
+      reale(0x103c47b0e4LL,0x96022a9a34351LL),
+      // _C4x[223]
+      reale(0x15fd20dLL,0x8ecc7fd5LL<<20),reale(0x809863LL,0x5fb9cbd280000LL),
+      reale(0x129e408LL,0x57a5b884LL<<20),reale(-0xc0d5caLL,0x54905fd580000LL),
+      reale(-0x1c5fd4LL,0x81456fb3LL<<20),reale(-0x75cdb1LL,0xb9b4f98880000LL),
+      reale(0x5b16e9LL,0x3561cdc2LL<<20),reale(-4465LL,0xaac18f4b80000LL),
+      reale(0x1dd331LL,0xb0f32b11LL<<20),reale(-0x1d1140LL,0x1a331f7e80000LL),
+      reale(302310LL,0x7de136fc28000LL),
+      reale(0x103c47b0e4LL,0x96022a9a34351LL),
+      // _C4x[224]
+      reale(0x1687ccaLL,0x308c5cb580000LL),reale(-0x5949d2LL,0xb286146cLL<<20),
+      reale(255419LL,0xcc27926280000LL),reale(-0xa1215fLL,0xae9e9731LL<<20),
+      reale(0x2eabc7LL,0x9f7d07af80000LL),reale(-782823LL,0xe040cb36LL<<20),
+      reale(0x3e2042LL,0x5a62f9dc80000LL),reale(-0x163ef8LL,0x71af42bbLL<<20),
+      reale(-144541LL,0xe44e322980000LL),reale(-76350LL,0xd3e3da2a70000LL),
+      reale(0x103c47b0e4LL,0x96022a9a34351LL),
+      // _C4x[225]
+      reale(0x429294LL,0x6ef15f2cLL<<20),reale(-0xa122d5LL,0xe816267c80000LL),
+      reale(656010LL,0xb16861d1LL<<20),reale(-0x2ed2c5LL,0xcbbaecd80000LL),
+      reale(0x446663LL,0xed3c1016LL<<20),reale(-516360LL,0x4e1a9bce80000LL),
+      reale(0xf9a79LL,0x1df4b61bLL<<20),reale(-0x136d4aLL,0x99403b9f80000LL),
+      reale(245310LL,0x45a78ad538000LL),
+      reale(0x103c47b0e4LL,0x96022a9a34351LL),
+      // _C4x[226]
+      reale(-105619LL,0x59d20a72LL<<20),reale(-0x51a94aLL,0xa61c793cLL<<20),
+      reale(0x34977aLL,0xc986a916LL<<20),reale(-453182LL,0x778b7be8LL<<20),
+      reale(0x2518e4LL,0xc332ee1aLL<<20),reale(-0x12e926LL,0xf0ee4e14LL<<20),
+      reale(-60031LL,0x396ad3beLL<<20),reale(-26717LL,0x95d5a29630000LL),
+      reale(0x103c47b0e4LL,0x96022a9a34351LL),
+      // _C4x[227]
+      reale(151394LL,0xe6754a3fLL<<20),reale(-105724LL,0xd536926a80000LL),
+      reale(240417LL,0xf928fd4aLL<<20),reale(-54673LL,0x890ab1b980000LL),
+      reale(46185LL,0xc0891895LL<<20),reale(-67791LL,0x87f19e3880000LL),
+      reale(15270LL,0xa469197488000LL),reale(0x13fb6bed6LL,0x81b165bd17b55LL),
+      // _C4x[228]
+      reale(226427LL,0x3825b25420000LL),reale(-36731LL,0x39e1166a80000LL),
+      reale(116830LL,0x2c3ad768e0000LL),reale(-76967LL,0xf6da987d40000LL),
+      real(-0x2a948e8d73a60000LL),real(-0x116572b5168a4000LL),
+      reale(0x13fb6bed6LL,0x81b165bd17b55LL),
+      // _C4x[229]
+      reale(4480LL,0xf38d93cLL<<20),real(-0x5f0bc8cec07LL<<20),
+      real(0x33002b9943eLL<<20),real(-0x51d1e6f78cdLL<<20),
+      real(0x14fb331d33f30000LL),reale(0x8a412feLL,0xe0e91e6ce4f71LL),
+      // _C4x[230]
+      real(0x329e2a986cLL<<20),real(-0x285690bb68LL<<20),
+      real(0x10193db64LL<<20),real(0x5c4a2579a0000LL),
+      reale(0x35f3f9LL,0xba8f0d3ad9e09LL),
+      // _C4x[231]
+      real(0x4fc786eLL<<20),real(-0x837a8d5LL<<20),real(0x259df8d30000LL),
+      reale(4837LL,0x68f14547adebLL),
+      // _C4x[232]
+      real(0x11c82fLL<<20),real(0x60ae460000LL),real(0x21ffb4a731cf423fLL),
+      // _C4x[233]
+      real(0x1c490000LL),real(0x112c657acf71bLL),
+      // _C4x[234]
+      real(-33150LL<<20),real(-0x1b96a80000LL),real(-421083LL<<20),
+      real(-0x1a9b6380000LL),real(-0x7d3598LL<<20),real(-0x2b3428c80000LL),
+      real(-0x125c9155LL<<20),real(-0xa7172a8580000LL),
+      real(-0x97062b5b2LL<<20),real(-0x1855be7c6ee80000LL),
+      reale(15220LL,0x65c177b1LL<<20),reale(-187211LL,0x1c678c9880000LL),
+      reale(0x13ce4bLL,0x7f543134LL<<20),reale(-0x5b9a1eLL,0xd31a9c6f80000LL),
+      reale(0x131570bLL,0xeafca137LL<<20),
+      reale(-0x2fb599eLL,0x34886cf680000LL),
+      reale(0x5b03caeLL,0xfe3eb21aLL<<20),reale(-0x83f8b31LL,0xf584a8d80000LL),
+      reale(0x8bbc08eLL,0x2bfcde3dLL<<20),
+      reale(-0x5bee3bcLL,0x266dd99480000LL),
+      reale(0x1a6e179LL,0x34f39e3ee8000LL),
+      reale(0x12254110ffLL,0x7a7ae451fe1d3LL),
+      // _C4x[235]
+      real(-0x1070a6LL<<20),real(-0x41a48cLL<<20),real(-0x128e0c2LL<<20),
+      real(-0x6214a6LL<<24),real(-0x27bd427eLL<<20),real(-0x15709aa34LL<<20),
+      real(-0x124688a69aLL<<20),real(-0x2c21e34ecc8LL<<20),
+      reale(25645LL,0xc7a2622aLL<<20),reale(-290250LL,0x8f434524LL<<20),
+      reale(0x1becd4LL,0x97e8c70eLL<<20),reale(-0x73c9baLL,0xa17642dLL<<24),
+      reale(0x1540010LL,0x9cff752LL<<20),reale(-0x2dcd0eaLL,0x98d4e37cLL<<20),
+      reale(0x496627cLL,0x9b7ce236LL<<20),reale(-0x56e78b5LL,0xb265fe68LL<<20),
+      reale(0x49e1f30LL,0xb044f6faLL<<20),reale(-0x2a7e0bbLL,0xc12ead4LL<<20),
+      reale(0xeb57a3LL,0x2d0d24deLL<<20),reale(-0x24c5b2LL,0x80f5f23d50000LL),
+      reale(0x60c6b05aaLL,0x7e28f6c5ff5f1LL),
+      // _C4x[236]
+      real(-0xdc9b5f1LL<<20),real(-0x461438ca80000LL),real(-0x1b32457c8LL<<20),
+      real(-0xdfda7610580000LL),real(-0xb4fb8c3a9fLL<<20),
+      reale(-6591LL,0x8d2c3ccf80000LL),reale(223861LL,0x20c31aaLL<<20),
+      reale(-0x23cfe5LL,0x9404a6d480000LL),reale(0xcea485LL,0xe6baed33LL<<20),
+      reale(-0x30392e7LL,0x1c35eb2980000LL),
+      reale(0x7cadd8eLL,0xb6b8581cLL<<20),
+      reale(-0xe4b10bcLL,0x19efcfee80000LL),
+      reale(0x12628d94LL,0xca5d2285LL<<20),
+      reale(-0xf679579LL,0x8d6c834380000LL),
+      reale(0x5f1732fLL,0x1b1e3c8eLL<<20),reale(0x33d2151LL,0x9af24b4880000LL),
+      reale(-0x6513088LL,0xf320c657LL<<20),
+      reale(0x4025aa4LL,0x12b2361d80000LL),
+      reale(-0x105153aLL,0xfa056b19b8000LL),
+      reale(0x12254110ffLL,0x7a7ae451fe1d3LL),
+      // _C4x[237]
+      real(-0x49a1015c4LL<<20),real(-0x24465af3cLL<<24),
+      real(-0x1bf34980cbcLL<<20),reale(-15429LL,0x36b38ef8LL<<20),
+      reale(492912LL,0x78bf270cLL<<20),reale(-0x497a24LL,0x5671033LL<<24),
+      reale(0x1863880LL,0xf60b314LL<<20),reale(-0x525f99dLL,0xe1a84668LL<<20),
+      reale(0xbb9caeaLL,0xcc39c4dcLL<<20),reale(-0x1216a8ebLL,0x37a6362LL<<24),
+      reale(0x11a49c5fLL,0xf95d89e4LL<<20),
+      reale(-0x76c584cLL,0x1f92afd8LL<<20),
+      reale(-0x5c748bcLL,0x72cd2facLL<<20),reale(0xb9c37f8LL,0xcf01911LL<<24),
+      reale(-0x852804aLL,0x8c8be3b4LL<<20),reale(0x2dd1b5fLL,0xcfe3b748LL<<20),
+      reale(-0x4d8bb7LL,0xbe26d37cLL<<20),reale(-749749LL,0x9f9678dfe0000LL),
+      reale(0x12254110ffLL,0x7a7ae451fe1d3LL),
+      // _C4x[238]
+      real(-0x399266be8d8LL<<20),reale(-30245LL,0x1f85840780000LL),
+      reale(913230LL,0x8c812ed3LL<<20),reale(-0x7f81b0LL,0x508faab680000LL),
+      reale(0x2727214LL,0x60c0bdeLL<<20),reale(-0x781e515LL,0x65819f580000LL),
+      reale(0xf11254cLL,0xec1a46a9LL<<20),
+      reale(-0x1340c342LL,0x23b0142480000LL),
+      reale(0xccb9fe8LL,0xaf4c9794LL<<20),reale(0x24da283LL,0x549703a380000LL),
+      reale(-0xd2d2cc0LL,0x5efaa6ffLL<<20),
+      reale(0xb561781LL,0xe7148ad280000LL),reale(-0x33b13ceLL,0xf08dd4aLL<<20),
+      reale(-0xf32c8bLL,0x75bb941180000LL),reale(0x6bde6eLL,0x670632d5LL<<20),
+      reale(0x62d0c8LL,0xeb9461c080000LL),reale(-0x317e9eLL,0x9a2850efa8000LL),
+      reale(0x12254110ffLL,0x7a7ae451fe1d3LL),
+      // _C4x[239]
+      reale(0x16f1c4LL,0xd2212eaaLL<<20),reale(-0xc58993LL,0x92e4dc3cLL<<20),
+      reale(0x385f0ffLL,0xee10705eLL<<20),reale(-0x9dad9c6LL,0x2fe5a098LL<<20),
+      reale(0x116b5b58LL,0x9c464672LL<<20),
+      reale(-0x12059efdLL,0xecd8db74LL<<20),
+      reale(0x60a2bdbLL,0xc1c4d526LL<<20),reale(0xa06a064LL,0xf509b91LL<<24),
+      reale(-0xea175dfLL,0x358cc0baLL<<20),reale(0x65d394dLL,0x892ae5acLL<<20),
+      reale(0x133fcd5LL,0xb4b02d6eLL<<20),reale(-0xf1b930LL,0xc8fd0d88LL<<20),
+      reale(-0x1737347LL,0xdc7fbf82LL<<20),reale(0x159253eLL,0x99455ce4LL<<20),
+      reale(-0x57c159LL,0x2f3d9b36LL<<20),reale(119914LL,0x778fad9290000LL),
+      reale(0x12254110ffLL,0x7a7ae451fe1d3LL),
+      // _C4x[240]
+      reale(0x4b1cd3aLL,0x15c18781LL<<20),reale(-0xc02e239LL,0x325de4f80000LL),
+      reale(0x12aaf616LL,0xbf0cdbeaLL<<20),
+      reale(-0xf10b02bLL,0x5a0a145480000LL),
+      reale(-0xc94803LL,0x7ecf7993LL<<20),reale(0xe685891LL,0xe2ae572980000LL),
+      reale(-0xc079231LL,0x9f7a819cLL<<20),
+      reale(0x1450b43LL,0x9913ddee80000LL),reale(0x2355920LL,0x4acee525LL<<20),
+      reale(0x13a4d35LL,0x131b07c380000LL),
+      reale(-0x25bb844LL,0x688fd54eLL<<20),reale(0x92f150LL,0xd2078bc880000LL),
+      reale(0x332941LL,0x6f4d3337LL<<20),reale(651457LL,0xd471a91d80000LL),
+      reale(-0x10fffdLL,0x8b8abaacb8000LL),
+      reale(0x12254110ffLL,0x7a7ae451fe1d3LL),
+      // _C4x[241]
+      reale(0x12e233e4LL,0xf9f1f348LL<<20),reale(-0xb1ebd27LL,0x86b70d2LL<<24),
+      reale(-0x692a660LL,0x4c7c978LL<<20),reale(0xfad6a73LL,0x4f304d7LL<<24),
+      reale(-0x7cd723eLL,0xce08e28LL<<20),reale(-0x1cfd5e5LL,0xb2eb80cLL<<24),
+      reale(0xd0ca45LL,0x3acd8a58LL<<20),reale(0x2ded6f2LL,0x86f9101LL<<24),
+      reale(-0x1936889LL,0x379c0708LL<<20),reale(-0x566835LL,0x871646LL<<24),
+      reale(-0x215aaeLL,0x58fd4d38LL<<20),reale(0x92ee72LL,0xa8fae6bLL<<24),
+      reale(-0x3c4239LL,0x14e6a5e8LL<<20),reale(276643LL,0x362a460940000LL),
+      reale(0x12254110ffLL,0x7a7ae451fe1d3LL),
+      // _C4x[242]
+      reale(-0xad9f8dbLL,0xdeb76b02LL<<20),
+      reale(0xeb4d0e7LL,0xd90ba4f280000LL),
+      reale(-0x3ac15abLL,0x2613d6e7LL<<20),
+      reale(-0x2b3d719LL,0xe84722d380000LL),
+      reale(-0x13953eeLL,0xdfd6afacLL<<20),reale(0x318b6d0LL,0x74542e480000LL),
+      reale(-0x499a3cLL,0xdd5465f1LL<<20),reale(-0x55d316LL,0x60bebc580000LL),
+      reale(-0xd268bdLL,0x8a02aa56LL<<20),reale(0x93841fLL,0xc1fdfc1680000LL),
+      reale(215496LL,0x532f1d7bLL<<20),reale(-184970LL,0x3b65ba7780000LL),
+      reale(-459827LL,0x50f841a2d8000LL),
+      reale(0x12254110ffLL,0x7a7ae451fe1d3LL),
+      // _C4x[243]
+      reale(-0x7f0f45LL,0xe89dc64aLL<<20),reale(-0x213541bLL,0x7c4907e4LL<<20),
+      reale(-0x2c9f976LL,0xbd97966eLL<<20),reale(0x248f184LL,0xa8d301dLL<<24),
+      reale(0x885f47LL,0x6403fdf2LL<<20),reale(0x5124c3LL,0xf65ffebcLL<<20),
+      reale(-0x11870d8LL,0xd03b1416LL<<20),reale(0x2b66fbLL,0x614fde8LL<<20),
+      reale(593018LL,0xc5d1701aLL<<20),reale(0x41c725LL,0x12317e94LL<<20),
+      reale(-0x278a33LL,0x6ecf293eLL<<20),reale(276451LL,0x9f1a0fb950000LL),
+      reale(0x12254110ffLL,0x7a7ae451fe1d3LL),
+      // _C4x[244]
+      reale(-0x380db6eLL,0xc0617725LL<<20),
+      reale(0x11f5051LL,0xe1e139a280000LL),reale(0xa2fb7bLL,0x8d5913c4LL<<20),
+      reale(0x10295a1LL,0x2144e00580000LL),reale(-0xd9dcf6LL,0x5a8ea4e3LL<<20),
+      reale(-0x20cb95LL,0x10bfa95880000LL),reale(-0x3de568LL,0x9d41a562LL<<20),
+      reale(0x625334LL,0x85894a7b80000LL),reale(-857620LL,0xd337e021LL<<20),
+      reale(-227989LL,0x76ea704e80000LL),reale(-205806LL,0xccbf48c608000LL),
+      reale(0x12254110ffLL,0x7a7ae451fe1d3LL),
+      // _C4x[245]
+      reale(0x39bc21LL,0x20190a0cLL<<20),reale(0x160b633LL,0x7ead70aLL<<24),
+      reale(-0x618904LL,0x846d2bb4LL<<20),reale(-0x1a7196LL,0x7cdd0cb8LL<<20),
+      reale(-0x8687b5LL,0x392a5d1cLL<<20),reale(0x44308eLL,0xebeb665LL<<24),
+      reale(300534LL,0x83fc99c4LL<<20),reale(0x1fd0a3LL,0x978be8e8LL<<20),
+      reale(-0x1a5275LL,0x9321dd2cLL<<20),reale(240877LL,0x8d28f00d60000LL),
+      reale(0x12254110ffLL,0x7a7ae451fe1d3LL),
+      // _C4x[246]
+      reale(341632LL,0xac1a48acLL<<20),reale(0x27a164LL,0x8a0c1f1480000LL),
+      reale(-0x9e43d9LL,0xa4e49531LL<<20),reale(0x1264abLL,0x8ca380d580000LL),
+      reale(-0x1179e5LL,0x9222f2d6LL<<20),reale(0x3ce5afLL,0xb64d248680000LL),
+      reale(-0x105fa4LL,0x302b013bLL<<20),reale(-153112LL,0x183edfc780000LL),
+      reale(-94131LL,0xd7f7d844d8000LL),
+      reale(0x12254110ffLL,0x7a7ae451fe1d3LL),
+      // _C4x[247]
+      reale(-0x83b396LL,0x827c58feLL<<20),reale(-629493LL,0x68c8b6e4LL<<20),
+      reale(-0x3b1eaeLL,0xc3b760baLL<<20),reale(0x3b015eLL,0xf4ed6bd8LL<<20),
+      reale(-159711LL,0x580c5996LL<<20),reale(0x10c91dLL,0xaa4c4b4cLL<<20),
+      reale(-0x12020cLL,0xba191652LL<<20),reale(201643LL,0x9fcf910730000LL),
+      reale(0x12254110ffLL,0x7a7ae451fe1d3LL),
+      // _C4x[248]
+      reale(-0x5b6187LL,0xe396e5bLL<<20),reale(0x23d859LL,0xe3eefe9c80000LL),
+      reale(-426463LL,0xd6e2edb2LL<<20),reale(0x25c4a6LL,0x1c0aded780000LL),
+      reale(-999560LL,0x32e18b49LL<<20),reale(-83147LL,0x6bd67ec280000LL),
+      reale(-41199LL,0xb0fdbdc348000LL),
+      reale(0x12254110ffLL,0x7a7ae451fe1d3LL),
+      // _C4x[249]
+      reale(-133857LL,0xe363482LL<<24),reale(223946LL,0xb024018LL<<24),
+      reale(-32029LL,0xe8f5e8eLL<<24),reale(48931LL,0x82bd2cLL<<24),
+      reale(-63934LL,0x28f5d3aLL<<24),reale(12842LL,0x805d8e65LL<<20),
+      reale(0x16553c63bLL,0x96bea2db115fLL),
+      // _C4x[250]
+      real(-0x2969ddb5824LL<<20),reale(3279LL,0x51285681LL<<20),
+      real(-0x6e93a3242f2LL<<20),real(-0x48275b7b75LL<<20),
+      real(-0x1f18264b9990000LL),reale(0x9a85177LL,0x379b22013c233LL),
+      // _C4x[251]
+      real(-0x8a9317724LL<<20),real(0x6cfa364f8LL<<20),
+      real(-0xa2b1dc5ccLL<<20),real(0x2561f1223e0000LL),
+      reale(0x1419a3LL,0x4f8aa089603a9LL),
+      // _C4x[252]
+      real(-0x174d38452LL<<20),real(-0x24810c5LL<<20),real(-0xe4960490000LL),
+      reale(161925LL,0x30e683ffe0741LL),
+      // _C4x[253]
+      real(-0x195c48LL<<20),real(0x687f5c0000LL),real(0x438da32e1600335LL),
+      // _C4x[254]
+      real(0x41cf0000LL),real(0x3d2e2985830503LL),
+      // _C4x[255]
+      real(57057LL<<20),real(253638LL<<20),real(0x139aebLL<<20),
+      real(478667LL<<24),real(0x35cd075LL<<20),real(0x2144529aLL<<20),
+      real(0x20d243c7fLL<<20),real(0x5cc88e6184LL<<20),
+      reale(-3998LL,0x94b46c09LL<<20),reale(54510LL,0x42c0ca6eLL<<20),
+      reale(-421910LL,0x94ee5c13LL<<20),reale(0x21847fLL,0xc3c98e58LL<<20),
+      reale(-0x7f1665LL,0x8ef9199dLL<<20),reale(0x16e6874LL,0xb3958e42LL<<20),
+      reale(-0x33611beLL,0x5ff561a7LL<<20),reale(0x5a6d78bLL,0x2e272b2cLL<<20),
+      reale(-0x7bac4e8LL,0x3d1d4131LL<<20),reale(0x7dd7c02LL,0x488ce616LL<<20),
+      reale(-0x50e6202LL,0x8837b53bLL<<20),
+      reale(0x16fb8eeLL,0xf664899ae0000LL),
+      reale(0x140e3a711aLL,0x5ef39e09c8055LL),
+      // _C4x[256]
+      real(0x96a1e8LL<<20),real(0x35cdab4LL<<20),real(0x17a7bd4LL<<24),
+      real(0xde7dbbccLL<<20),real(0xcf9aac898LL<<20),real(0x227b02f8de4LL<<20),
+      reale(-22185LL,0x4b5805fLL<<24),reale(279989LL,0x7104d2fcLL<<20),
+      reale(-0x1e4c5cLL,0xe6ceb748LL<<20),reale(0x8ec982LL,0x97858d14LL<<20),
+      reale(-0x1e2deffLL,0x4ea41eaLL<<24),reale(0x4c35427LL,0xeda83e2cLL<<20),
+      reale(-0x9272ee4LL,0x14527df8LL<<20),reale(0xd6e9933LL,0x81a2e844LL<<20),
+      reale(-0xedeaa18LL,0xf78175LL<<24),reale(0xc0556bbLL,0x72040d5cLL<<20),
+      reale(-0x6aa01aaLL,0x57562ca8LL<<20),reale(0x23f4800LL,0xa703af74LL<<20),
+      reale(-0x5840deLL,0xcf1b122cc0000LL),
+      reale(0x140e3a711aLL,0x5ef39e09c8055LL),
+      // _C4x[257]
+      real(0x5cb8dc96LL<<20),real(0x340e1216LL<<24),real(0x2e2a4aa22aLL<<20),
+      real(0x73f12ff5634LL<<20),reale(-70024LL,0x3e7cd6beLL<<20),
+      reale(822756LL,0xd51d4108LL<<20),reale(-0x520a0fLL,0x4455852LL<<20),
+      reale(0x15f995cLL,0x470707dcLL<<20),reale(-0x42678d2LL,0xdc8064e6LL<<20),
+      reale(0x922aa2bLL,0x6b1b50bLL<<24),reale(-0xebaeb4cLL,0x43f0da7aLL<<20),
+      reale(0x10f486a1LL,0x8a758184LL<<20),
+      reale(-0xca440d6LL,0x2938770eLL<<20),reale(0x3a751baLL,0x98680058LL<<20),
+      reale(0x3e6dfcaLL,0xf9f818a2LL<<20),reale(-0x5dddfdbLL,0x636732cLL<<20),
+      reale(0x38698b1LL,0x9347fd36LL<<20),reale(-0xe18952LL,0x4a28bcab40000LL),
+      reale(0x140e3a711aLL,0x5ef39e09c8055LL),
+      // _C4x[258]
+      real(0x79eb8bc84LL<<24),reale(4651LL,0x6e7d259cLL<<20),
+      reale(-165628LL,0x3e78e38LL<<20),reale(0x1bc9a4LL,0xb429d954LL<<20),
+      reale(-0xa82d4fLL,0xa8d76e3LL<<24),reale(0x2925732LL,0xec937c0cLL<<20),
+      reale(-0x6f56f92LL,0x6bb9d228LL<<20),reale(0xd4bc265LL,0xb4537c4LL<<20),
+      reale(-0x11945208LL,0x429b242LL<<24),reale(0xe70a3f0LL,0x4442b67cLL<<20),
+      reale(-0x397c032LL,0xf190ce18LL<<20),
+      reale(-0x778e643LL,0x54fd2234LL<<20),reale(0xad98259LL,0x23a43a1LL<<24),
+      reale(-0x6f60a2cLL,0x9c7024ecLL<<20),reale(0x230e98dLL,0xa4fdd208LL<<20),
+      reale(-0x2eb6afLL,0x1a96e8a4LL<<20),reale(-731282LL,0x55094ecdc0000LL),
+      reale(0x140e3a711aLL,0x5ef39e09c8055LL),
+      // _C4x[259]
+      reale(-326981LL,0xa8a1d443LL<<20),reale(0x339162LL,0xbabcd556LL<<20),
+      reale(-0x1225effLL,0xf27e7ca9LL<<20),reale(0x412635bLL,0xe04a11dcLL<<20),
+      reale(-0x9e278baLL,0x4b2c8d8fLL<<20),
+      reale(0x104e7f60LL,0x38610462LL<<20),
+      reale(-0x11163ea6LL,0x7eac51f5LL<<20),
+      reale(0x7d932e0LL,0xe976d3e8LL<<20),reale(0x61bb3b3LL,0x59ab84dbLL<<20),
+      reale(-0xd27d194LL,0xe512c76eLL<<20),reale(0x9233619LL,0x479cb141LL<<20),
+      reale(-0x1c9485dLL,0x69aa5f4LL<<20),reale(-0x11a4428LL,0x52429227LL<<20),
+      reale(0x46c4bcLL,0x203f167aLL<<20),reale(0x64c58bLL,0x9f07728dLL<<20),
+      reale(-0x2cd05aLL,0x768c9b7420000LL),
+      reale(0x140e3a711aLL,0x5ef39e09c8055LL),
+      // _C4x[260]
+      reale(-0x1be2222LL,0xeb160afLL<<24),reale(0x5c1f497LL,0x28ed0368LL<<20),
+      reale(-0xc8e506fLL,0x70c6dd6LL<<24),reale(0x11bed7d6LL,0x7e237158LL<<20),
+      reale(-0xde12868LL,0xffaed7dLL<<24),reale(779198LL,0xde54d948LL<<20),
+      reale(0xc8cfa6aLL,0xbb351e4LL<<24),reale(-0xc87dffcLL,0xef01df38LL<<20),
+      reale(0x39a2d53LL,0x8c5ad4bLL<<24),reale(0x1d5d416LL,0x2d8a2728LL<<20),
+      reale(-0x7f4692LL,0xcba91f2LL<<24),reale(-0x18b11d6LL,0xb99e5518LL<<20),
+      reale(0x12dae20LL,0x719f219LL<<24),reale(-0x444bceLL,0x59e20d08LL<<20),
+      reale(24304LL,0x9251c55380000LL),reale(0x140e3a711aLL,0x5ef39e09c8055LL),
+      // _C4x[261]
+      reale(-0xeb82d91LL,0x7c357414LL<<20),reale(0x119dd076LL,0x1c583fbLL<<24),
+      reale(-0x90ee930LL,0x617b994cLL<<20),
+      reale(-0x6d1d35fLL,0x36379468LL<<20),reale(0xed625caLL,0x7550e084LL<<20),
+      reale(-0x85d2565LL,0x4237b52LL<<24),reale(-0xf0718aLL,0xb8ad3dbcLL<<20),
+      reale(0x1c0a2f3LL,0xaf8e45d8LL<<20),reale(0x1c5921dLL,0x94fe4f4LL<<20),
+      reale(-0x21517f9LL,0xfdaaea9LL<<24),reale(0x50bbf6LL,0x7344ca2cLL<<20),
+      reale(0x34139cLL,0x80d8c748LL<<20),reale(939828LL,0x497a2164LL<<20),
+      reale(-0x102689LL,0xbc8f6ea380000LL),
+      reale(0x140e3a711aLL,0x5ef39e09c8055LL),
+      // _C4x[262]
+      reale(-0x3aeb36bLL,0xa247ef6LL<<24),reale(-0xbb01e73LL,0x45608dd8LL<<20),
+      reale(0xdd43f7dLL,0xb33886dLL<<24),reale(-0x38b865fLL,0x705e0ac8LL<<20),
+      reale(-0x2c2f6d1LL,0x10312a4LL<<24),reale(-0x5301a0LL,0xb7f985b8LL<<20),
+      reale(0x2f53ff0LL,0x61c43dbLL<<24),reale(-0xfeab81LL,0xd03e2a8LL<<20),
+      reale(-0x703a42LL,0xd68c252LL<<24),reale(-0x3982ddLL,0x512f0598LL<<20),
+      reale(0x8b8c76LL,0xccf9449LL<<24),reale(-0x326f67LL,0x4ecfd288LL<<20),
+      reale(189374LL,0xbae6241b80000LL),
+      reale(0x140e3a711aLL,0x5ef39e09c8055LL),
+      // _C4x[263]
+      reale(0xaebb9bbLL,0x9a6909c3LL<<20),reale(0x368691LL,0xe2daadfaLL<<20),
+      reale(-0x24a74bfLL,0xd8cbe9f1LL<<20),
+      reale(-0x260b79cLL,0x3f5d06c8LL<<20),reale(0x28b368cLL,0x39ae469fLL<<20),
+      reale(0x41805eLL,0xcbfe3396LL<<20),reale(-0x2a9a68LL,0xd0516ecdLL<<20),
+      reale(-0xe154f3LL,0x4df58f64LL<<20),reale(0x758c79LL,0x4389217bLL<<20),
+      reale(747527LL,0x4c07d532LL<<20),reale(-45503LL,0x232b6da9LL<<20),
+      reale(-458873LL,0x3de2caada0000LL),
+      reale(0x140e3a711aLL,0x5ef39e09c8055LL),
+      // _C4x[264]
+      reale(-0xa68549LL,0x206554c8LL<<20),reale(-0x36b3021LL,0xdeb9bbd4LL<<20),
+      reale(0x14a166eLL,0x2246fcaLL<<24),reale(0xbc7d66LL,0xfe843b6cLL<<20),
+      reale(0xa0ef18LL,0x5e155c78LL<<20),reale(-0xfb67dcLL,0xb33b7c04LL<<20),
+      reale(466396LL,0xd22dc65LL<<24),reale(183297LL,0xd1040f9cLL<<20),
+      reale(0x423943LL,0xee88c28LL<<20),reale(-0x229698LL,0x88900834LL<<20),
+      reale(210337LL,0xe1ea7a84c0000LL),
+      reale(0x140e3a711aLL,0x5ef39e09c8055LL),
+      // _C4x[265]
+      reale(862955LL,0x9702fddeLL<<20),reale(0x6b3cedLL,0x5b90967LL<<24),
+      reale(0x13ccfdeLL,0xe66b2502LL<<20),reale(-0x91dd71LL,0x3f5d9d4LL<<20),
+      reale(-0x2ec390LL,0x83ef7f26LL<<20),reale(-0x4e4416LL,0xf4b18338LL<<20),
+      reale(0x57e77dLL,0x987e424aLL<<20),reale(-394464LL,0xc6a8309cLL<<20),
+      reale(-178787LL,0x1860846eLL<<20),reale(-217081LL,0x7f14904c40000LL),
+      reale(0x140e3a711aLL,0x5ef39e09c8055LL),
+      // _C4x[266]
+      reale(0x15bd9d1LL,0x2c03fd2LL<<24),reale(-927291LL,0xd50c865cLL<<20),
+      reale(-369607LL,0xdc6fc0d8LL<<20),reale(-0x8df7bdLL,0x7c2c6fd4LL<<20),
+      reale(0x2e5691LL,0x43d2269LL<<24),reale(396000LL,0xd623804cLL<<20),
+      reale(0x214792LL,0xe725f848LL<<20),reale(-0x17beddLL,0xa31a41c4LL<<20),
+      reale(192540LL,0x32adf107c0000LL),
+      reale(0x140e3a711aLL,0x5ef39e09c8055LL),
+      // _C4x[267]
+      reale(0x539f56LL,0x1e0c5ff9LL<<20),reale(-0x8dcd6bLL,0xed7bcf5aLL<<20),
+      reale(-197248LL,0x48ddbe7bLL<<20),reale(-0x19170fLL,0x21a4d53cLL<<20),
+      reale(0x3a26f5LL,0xc3eeee7dLL<<20),reale(-747955LL,0xd969e11eLL<<20),
+      reale(-145849LL,0x156d88ffLL<<20),reale(-106663LL,0x47291a5560000LL),
+      reale(0x140e3a711aLL,0x5ef39e09c8055LL),
+      // _C4x[268]
+      reale(-0x1101f0LL,0x977496cLL<<24),reale(-0x45a30bLL,0x9957d2aLL<<24),
+      reale(0x305c71LL,0x2a8d48LL<<24),reale(68182LL,0xb14c8e6LL<<24),
+      reale(0x11e473LL,0xae8af24LL<<24),reale(-0x109dddLL,0xe616b22LL<<24),
+      reale(166307LL,0x5802f8eLL<<20),reale(0x140e3a711aLL,0x5ef39e09c8055LL),
+      // _C4x[269]
+      reale(0x1446d7LL,0x787f059LL<<24),reale(-550963LL,0xcb73f54LL<<24),
+      reale(0x259c43LL,0x77b42cfLL<<24),reale(-784467LL,0xcf1fa2aLL<<24),
+      reale(-93185LL,0xbea57c5LL<<24),reale(-52199LL,0x7220a476LL<<20),
+      reale(0x140e3a711aLL,0x5ef39e09c8055LL),
+      // _C4x[270]
+      real(0x3079591638LL<<24),real(-0x393657246LL<<24),
+      real(0xc9608c29cLL<<24),real(-0xe7b0dee42LL<<24),
+      real(0x29d42cfe52LL<<20),reale(0x1865db4LL,0x820b055e82c23LL),
+      // _C4x[271]
+      real(0x1b00e3838d2LL<<20),real(-0xbe74a11c34LL<<20),
+      real(-0xd93dbb0baLL<<20),real(-0x66c4e2e4040000LL),
+      reale(0x1604813LL,0x49a60b16d9e77LL),
+      // _C4x[272]
+      real(0x4af0b8bLL<<24),real(-0x656d09e8LL<<20),real(0x1509670680000LL),
+      reale(59656LL,0xa639fabc960fdLL),
+      // _C4x[273]
+      real(-0x3d4bdcLL<<20),real(-0x19bc9880000LL),
+      reale(3807LL,0xdf0925caacfb9LL),
+      // _C4x[274]
+      real(0x1b7580000LL),real(0x168a4531304537LL),
+      // _C4x[275]
+      real(-13041LL<<24),real(-0x146168LL<<20),real(-662216LL<<24),
+      real(-0x6bfe398LL<<20),real(-0x737e19fLL<<24),real(-0x1633e28ec8LL<<20),
+      real(0x4153bd106aLL<<24),reale(-15650LL,0x87866b08LL<<20),
+      reale(133731LL,0xd6f7b33LL<<24),reale(-773735LL,0xc8d497d8LL<<20),
+      reale(0x3223deLL,0x58eae9cLL<<24),reale(-0xa38670LL,0xa9a4c5a8LL<<20),
+      reale(0x1a47e42LL,0xde0f285LL<<24),reale(-0x36058dfLL,0x378b8278LL<<20),
+      reale(0x58fa16eLL,0xefceeceLL<<24),reale(-0x73e7758LL,0xc0e19c48LL<<20),
+      reale(0x72107bbLL,0x72f1357LL<<24),reale(-0x47e9002LL,0xb1f8a118LL<<20),
+      reale(0x1439880LL,0x5df212b140000LL),
+      reale(0x15f733d135LL,0x436c57c191ed7LL),
+      // _C4x[276]
+      real(-0x4c7f9aLL<<24),real(-0x30ae96LL<<28),real(-0x315e58a6LL<<24),
+      real(-0x8f37a5414LL<<24),reale(6318LL,0xf71dfaeLL<<24),
+      reale(-88019LL,0xc301df8LL<<24),reale(693686LL,0xbce3822LL<<24),
+      reale(-0x37e55cLL,0x7069f84LL<<24),reale(0xd5f852LL,0x9f2bf76LL<<24),
+      reale(-0x26b7d77LL,0x982e35LL<<28),reale(0x56bf82dLL,0xe33846aLL<<24),
+      reale(-0x97d842eLL,0xfcfdc1cLL<<24),reale(0xcf279d2LL,0xd6595beLL<<24),
+      reale(-0xd8c17b4LL,0x36d7ca8LL<<24),reale(0xa7eb38cLL,0x1190232LL<<24),
+      reale(-0x5a3a475LL,0x51c77b4LL<<24),reale(0x1dc1847LL,0x291d886LL<<24),
+      reale(-0x47e901LL,0xeb1f8a1180000LL),
+      reale(0x15f733d135LL,0x436c57c191ed7LL),
+      // _C4x[277]
+      real(-0xbc4739e8LL<<24),real(-0x2058be1d1f8LL<<20),
+      reale(21507LL,0xd2cf265LL<<24),reale(-280153LL,0xf868d618LL<<20),
+      reale(0x1f3a9fLL,0x92ccb12LL<<24),reale(-0x97320aLL,0xf19bf728LL<<20),
+      reale(0x20b2df2LL,0x89df7fLL<<24),reale(-0x53f6d2bLL,0x6ec4d738LL<<20),
+      reale(0xa26103bLL,0x9df0f0cLL<<24),reale(-0xeb20174LL,0xaa2fc48LL<<20),
+      reale(0xf5a086bLL,0x152d119LL<<24),reale(-0xa3a5adeLL,0xdca2ac58LL<<20),
+      reale(0x1e9c7a3LL,0xbf47d06LL<<24),reale(0x444daa3LL,0x588f6d68LL<<20),
+      reale(-0x56cf580LL,0x3959233LL<<24),reale(0x31fe3f8LL,0xef0e8578LL<<20),
+      reale(-0xc5220eLL,0x88f9c58840000LL),
+      reale(0x15f733d135LL,0x436c57c191ed7LL),
+      // _C4x[278]
+      reale(54399LL,0x7d7e5bLL<<28),reale(-665622LL,0xa9e8fcLL<<28),
+      reale(0x4516e6LL,0xa12949LL<<28),reale(-0x133f030LL,0x3d6c48LL<<28),
+      reale(0x3c5ddc9LL,0x4528ffLL<<28),reale(-0x895fe5fLL,0x1be074LL<<28),
+      reale(0xe304ef1LL,0x35d1adLL<<28),reale(-0x105e3c14LL,562731LL<<32),
+      reale(0xb44d7c8LL,0x2eff83LL<<28),reale(-0x905839LL,0xf8302cLL<<28),
+      reale(-0x868c3d2LL,0xc8a6b1LL<<28),reale(0x9f23759LL,0x9c0618LL<<28),
+      reale(-0x5d2f61aLL,74599LL<<28),reale(0x1afe1f8LL,0xfb81a4LL<<28),
+      reale(-0x1a0fd8LL,0x25c9d5LL<<28),reale(-691966LL,0x8d060e02LL<<20),
+      reale(0x15f733d135LL,0x436c57c191ed7LL),
+      // _C4x[279]
+      reale(0x7fb3fdLL,0x7d8f1a2LL<<24),reale(-0x20df1d1LL,0xb5fbbf7LL<<24),
+      reale(0x5db0016LL,0xc083d94LL<<24),reale(-0xbcb0798LL,0xaa8d11LL<<24),
+      reale(0x106dd7a3LL,0xf1de306LL<<24),reale(-0xe255c04LL,0x9743a8bLL<<24),
+      reale(0x370921bLL,0x2e25b8LL<<24),reale(0x895b345LL,0xa7ba25LL<<24),
+      reale(-0xc671512LL,0x5bb796aLL<<24),reale(0x728d461LL,0xae6199fLL<<24),
+      reale(-0xc24b9aLL,0x96611dcLL<<24),reale(-0x1202f11LL,0x563ceb9LL<<24),
+      reale(0x2707aaLL,0x2d372ceLL<<24),reale(0x644aaeLL,0xa570733LL<<24),
+      reale(-0x28af73LL,0x8822702880000LL),
+      reale(0x15f733d135LL,0x436c57c191ed7LL),
+      // _C4x[280]
+      reale(0x81325abLL,0xb23234LL<<24),reale(-0xe5bb47aLL,0x6a1a7dLL<<28),
+      reale(0x10858d4bLL,0xb84e1acLL<<24),reale(-0x92bbb1bLL,0x5728018LL<<24),
+      reale(-0x4a7469dLL,0x3d93f64LL<<24),reale(0xd5de4f7LL,0xc6fbbeLL<<28),
+      reale(-0xa112ebcLL,0xa5ce5dcLL<<24),reale(0x1830c6fLL,0xeaaada8LL<<24),
+      reale(0x206abaaLL,0x54c6f94LL<<24),reale(-0x1438d4LL,0x342a7fLL<<28),
+      reale(-0x190eaf6LL,0xfad770cLL<<24),reale(0x106613bLL,0x60f7d38LL<<24),
+      reale(-0x354e5eLL,0x2da96c4LL<<24),reale(-37172LL,0x4d64d235LL<<20),
+      reale(0x15f733d135LL,0x436c57c191ed7LL),
+      // _C4x[281]
+      reale(0xeb3d623LL,0x5926ed4LL<<24),reale(-0x30566c7LL,0x3cc3621LL<<24),
+      reale(-0xab79731LL,0x9e9c766LL<<24),reale(0xd83fac8LL,0x5f60b3bLL<<24),
+      reale(-0x4fd042aLL,0xfaa1138LL<<24),reale(-0x22701ebLL,0xf123475LL<<24),
+      reale(0x110d3d3LL,0x3367c0aLL<<24),reale(0x21ba997LL,0x45ddb8fLL<<24),
+      reale(-0x1c5a556LL,0x3b3f79cLL<<24),reale(0x1ef725LL,0x64b1249LL<<24),
+      reale(0x31320dLL,0xe57c3aeLL<<24),reale(0x11adb6LL,0x4fa2263LL<<24),
+      reale(-999785LL,0x48d2892080000LL),
+      reale(0x15f733d135LL,0x436c57c191ed7LL),
+      // _C4x[282]
+      reale(-0xdef5588LL,0xca0ea7LL<<28),reale(0xa9a6afdLL,0xe5a3b4LL<<28),
+      reale(-0x53b88aLL,0x76f2a5LL<<28),reale(-0x2aec778LL,825675LL<<32),
+      reale(-0x1543276LL,0xa4c90bLL<<28),reale(0x2c5876aLL,0xcc4aecLL<<28),
+      reale(-0x7fe5fcLL,0xf0df89LL<<28),reale(-0x748622LL,0x2da518LL<<28),
+      reale(-0x4df20cLL,0x9d2bcfLL<<28),reale(0x82c05aLL,0x3961e4LL<<28),
+      reale(-0x2a4294LL,0x535b8dLL<<28),reale(126172LL,0x8a3e4592LL<<20),
+      reale(0x15f733d135LL,0x436c57c191ed7LL),
+      // _C4x[283]
+      reale(0x26ef703LL,0xdf6cf1bLL<<24),reale(-0x123d1c6LL,0xb2f34918LL<<20),
+      reale(-0x30a90e5LL,0x3d857bcLL<<24),reale(0x1d39fffLL,0xb7852868LL<<20),
+      reale(0x95c49dLL,0x68acddLL<<24),reale(639236LL,0x74addeb8LL<<20),
+      reale(-0xe4250aLL,0xe8f075eLL<<24),reale(0x5a465aLL,0x48074a08LL<<20),
+      reale(0x10620cLL,0xd7d681fLL<<24),reale(80953LL,0xb5ac0858LL<<20),
+      reale(-451112LL,0xf0086f6940000LL),
+      reale(0x15f733d135LL,0x436c57c191ed7LL),
+      // _C4x[284]
+      reale(-0x35d16eaLL,0x19cc9aeLL<<24),reale(0x5f5197LL,0x97e859LL<<28),
+      reale(0xae1bafLL,0x9ecb7b2LL<<24),reale(0xe030e3LL,0xbd74e4cLL<<24),
+      reale(-0xd316c9LL,0x12b9196LL<<24),reale(-0x12ffc4LL,0xb4f69c8LL<<24),
+      reale(-339986LL,0x2585d1aLL<<24),reale(0x417addLL,0x56a51c4LL<<24),
+      reale(-0x1e390eLL,0x43e1ffeLL<<24),reale(159775LL,0xd187ea4f80000LL),
+      reale(0x15f733d135LL,0x436c57c191ed7LL),
+      // _C4x[285]
+      reale(304504LL,0xbeba70cLL<<24),reale(0x14eef75LL,0x34d46048LL<<20),
+      reale(-0x4c6015LL,0xc143319LL<<24),reale(-0x2e5cf9LL,0xcf35d858LL<<20),
+      reale(-0x5b33e8LL,0xbd68906LL<<24),reale(0x4ca422LL,0xe77fa168LL<<20),
+      reale(-45294LL,0xf8ac833LL<<24),reale(-123971LL,0xaa6e8178LL<<20),
+      reale(-222793LL,0x8dac164e40000LL),
+      reale(0x15f733d135LL,0x436c57c191ed7LL),
+      // _C4x[286]
+      reale(0x2e3ea5LL,0xf2ce54LL<<28),reale(0x18b054LL,874507LL<<32),
+      reale(-0x8ca6c9LL,0xf7c2dcLL<<28),reale(0x1af681LL,194126LL<<32),
+      reale(345531LL,0xbb5ec4LL<<28),reale(0x223033LL,263433LL<<32),
+      reale(-0x155d9aLL,0xc9524cLL<<28),reale(154222LL,0x8d6ad0d8LL<<20),
+      reale(0x15f733d135LL,0x436c57c191ed7LL),
+      // _C4x[287]
+      reale(-0x7446e2LL,0xcf3ec68LL<<24),reale(-0x1112a3LL,0x41d329cLL<<24),
+      reale(-0x2132d1LL,0x2b503fLL<<28),reale(0x3649a5LL,0xae223c4LL<<24),
+      reale(-479219LL,0x9852d78LL<<24),reale(-128929LL,0xa73166cLL<<24),
+      reale(-115228LL,0x34390ee2LL<<20),
+      reale(0x15f733d135LL,0x436c57c191ed7LL),
+      // _C4x[288]
+      reale(-0x4cef97LL,0xd55fa1LL<<28),reale(0x2574d7LL,0xc08d4cLL<<28),
+      reale(191058LL,0x859fe7LL<<28),reale(0x12d271LL,0xb6e1b6LL<<28),
+      reale(-0xf47b4LL,0x74bffdLL<<28),reale(137539LL,0xc2c0584LL<<20),
+      reale(0x15f733d135LL,0x436c57c191ed7LL),
+      // _C4x[289]
+      reale(-768829LL,233799LL<<28),reale(0x24b2b3LL,0x9d2b5a4LL<<24),
+      reale(-595680LL,0x7a659b8LL<<24),reale(-94148LL,0x5f2330cLL<<24),
+      reale(-60456LL,0xb121a272LL<<20),reale(0x15f733d135LL,0x436c57c191ed7LL),
+      // _C4x[290]
+      real(-0x6f59afcLL<<28),real(0x9613a65LL<<32),real(-0x980d63f4LL<<28),
+      real(0x18d56ad118LL<<20),reale(0x12c1778LL,0xb9ff38da93b23LL),
+      // _C4x[291]
+      real(-0x672444eLL<<24),real(-0xa80833LL<<24),real(-0x5828e0280000LL),
+      reale(65338LL,0x3c271ece8bf8fLL),
+      // _C4x[292]
+      real(-0x20b454LL<<24),real(0x62986bLL<<20),real(0x56e2cdab4666fea1LL),
+      // _C4x[293]
+      real(-0x1f26080000LL),real(0xbdc79d6e266b55fLL),
+      // _C4x[294]
+      real(127075LL<<24),real(91195LL<<28),real(0x19a7ffdLL<<24),
+      real(0x554e98faLL<<24),real(-0x1104c06029LL<<24),
+      reale(4440LL,0x88ff8c4LL<<24),reale(-41520LL,0xff11071LL<<24),
+      reale(264211LL,0xd76518eLL<<24),reale(-0x12f2c4LL,0x5871a4bLL<<24),
+      reale(0x44e724LL,0x8fd71d8LL<<24),reale(-0xc76bc0LL,0x713de5LL<<24),
+      reale(0x1d336f4LL,0xf6bb822LL<<24),reale(-0x37d345cLL,0x284e3bfLL<<24),
+      reale(0x56f84c4LL,0xf9cc2ecLL<<24),reale(-0x6cb65f7LL,0xc7c0c59LL<<24),
+      reale(0x67fc5b3LL,0xdcc20b6LL<<24),reale(-0x40789f0LL,0x7c40033LL<<24),
+      reale(0x11fa400LL,0x5381d7baLL<<20),
+      reale(0x17e02d3150LL,0x27e511795bd59LL),
+      // _C4x[295]
+      real(0x3ede9cLL<<28),real(0xc5bfb074LL<<24),real(-0x251c8220f8LL<<24),
+      reale(9050LL,0x293775cLL<<24),reale(-78489LL,0x725735LL<<28),
+      reale(459151LL,0x559e0c4LL<<24),reale(-0x1df2ddLL,0x76c7d98LL<<24),
+      reale(0x61c892LL,0x1dd53acLL<<24),reale(-0xfa2ba9LL,0xce5d4eLL<<28),
+      reale(0x1fc4a99LL,0x878f714LL<<24),reale(-0x33727e6LL,0xca2d028LL<<24),
+      reale(0x41fef20LL,0xea431fcLL<<24),reale(-0x41d0a88LL,0xc66c67LL<<28),
+      reale(0x31282b2LL,0x1de2b64LL<<24),reale(-0x19b67d0LL,0x9da8eb8LL<<24),
+      reale(0x851a0eLL,0x6394a4cLL<<24),reale(-0x13d659LL,0xb39ec4fcLL<<20),
+      reale(0x7f56465c5LL,0x62a1b07dc9473LL),
+      // _C4x[296]
+      reale(-6505LL,0x92293b4LL<<24),reale(93075LL,0xfdd7228LL<<24),
+      reale(-752119LL,0xe75899cLL<<24),reale(0x3df976LL,0xb48d79LL<<28),
+      reale(-0xf1b6e6LL,0x79bef84LL<<24),reale(0x2c5451aLL,0x92c8cf8LL<<24),
+      reale(-0x63dbf25LL,0xce4256cLL<<24),reale(0xad6f8a8LL,0xeee7a6LL<<28),
+      reale(-0xe508b0cLL,0x7602b54LL<<24),reale(0xdb5669eLL,0x4c947c8LL<<24),
+      reale(-0x8283b03LL,0x587e13cLL<<24),reale(0x98726bLL,0x26e9d3LL<<28),
+      reale(0x4711694LL,0x15b4724LL<<24),reale(-0x5029e00LL,0xfa96298LL<<24),
+      reale(0x2c9e8d8LL,0xd04bd0cLL<<24),reale(-0xae0e62LL,0x6a163c4LL<<24),
+      reale(0x17e02d3150LL,0x27e511795bd59LL),
+      // _C4x[297]
+      reale(-0x1b42ceLL,0x97fa1e8LL<<24),reale(0x88697eLL,0x5071c6cLL<<24),
+      reale(-0x1e6dfd8LL,0xa1c9c1LL<<28),reale(0x50509b8LL,0x12dc734LL<<24),
+      reale(-0x9e9ff75LL,0xa94b438LL<<24),reale(0xe77683bLL,0x21cf57cLL<<24),
+      reale(-0xeb7f87dLL,0x151256LL<<28),reale(0x852eb3aLL,0xbef7244LL<<24),
+      reale(0x1c20a31LL,0x933aa88LL<<24),reale(-0x8d28625LL,0xb8d488cLL<<24),
+      reale(0x9029bbcLL,622571LL<<28),reale(-0x4e16fa2LL,0x2c54354LL<<24),
+      reale(0x14e39e1LL,0x7555cd8LL<<24),reale(-792997LL,0xc866d9cLL<<24),
+      reale(-644310LL,0x92d390ecLL<<20),
+      reale(0x17e02d3150LL,0x27e511795bd59LL),
+      // _C4x[298]
+      reale(-0x3328892LL,0x45ae872LL<<24),reale(0x7981896LL,0x1838ef8LL<<24),
+      reale(-0xd135377LL,0xe641feLL<<24),reale(0xfa08086LL,0xbb034a4LL<<24),
+      reale(-0xae1efafLL,0x3beb0aLL<<24),reale(-0x3c5d59LL,0x16b275LL<<28),
+      reale(0xa01a759LL,0x6cbd696LL<<24),reale(-0xb425220LL,0x4e67dfcLL<<24),
+      reale(0x5760a52LL,0x308a7a2LL<<24),reale(-762368LL,0x37dcfa8LL<<24),
+      reale(-0x1136a7eLL,0xe75512eLL<<24),reale(839158LL,0x28bd354LL<<24),
+      reale(0x6245dfLL,0x392b63aLL<<24),reale(-0x250e87LL,0x15bafadcLL<<20),
+      reale(0x17e02d3150LL,0x27e511795bd59LL),
+      // _C4x[299]
+      reale(-0xf1a7e00LL,0xe9af59LL<<28),reale(0xe2a8b60LL,0x18fa14LL<<24),
+      reale(-0x48c3081LL,0x27d1d78LL<<24),reale(-0x7fabce1LL,0xbe51b1cLL<<24),
+      reale(0xd01125eLL,0x500766LL<<28),reale(-0x7a118f1LL,0x23126a4LL<<24),
+      reale(363472LL,0xea5c348LL<<24),reale(0x1f2acd0LL,0xffafacLL<<24),
+      reale(0x475db8LL,0xf57c73LL<<28),reale(-0x18a8f8bLL,0xe4c0934LL<<24),
+      reale(0xe3954bLL,0x470c518LL<<24),reale(-0x29af16LL,0x387c63cLL<<24),
+      reale(-76353LL,0x52dcee0cLL<<20),reale(0x17e02d3150LL,0x27e511795bd59LL),
+      // _C4x[300]
+      reale(0x23ee97fLL,0xa65c9a4LL<<24),reale(-0xca93b9fLL,0xdf70b8LL<<24),
+      reale(0xb4077f0LL,0xe87daccLL<<24),reale(-0x238cc17LL,0x434fd6LL<<28),
+      reale(-0x2a0e0c8LL,0x8791bf4LL<<24),reale(0x56ec98LL,0x5016a08LL<<24),
+      reale(0x244a99aLL,0x1b4ad1cLL<<24),reale(-0x1763968LL,0x3a5debLL<<28),
+      reale(-350074LL,0x236ce44LL<<24),reale(0x2c4696LL,0x896c358LL<<24),
+      reale(0x1421baLL,0xf211f6cLL<<24),reale(-941374LL,0x1cbc174LL<<24),
+      reale(0x17e02d3150LL,0x27e511795bd59LL),
+      // _C4x[301]
+      reale(0x705c1e4LL,0x4a6fb88LL<<24),reale(0x1bf27f2LL,0x5362b64LL<<24),
+      reale(-0x204a06fLL,0x99d1daLL<<28),reale(-0x21258daLL,0x8ca3adcLL<<24),
+      reale(0x26b2689LL,0x5404bb8LL<<24),reale(-0x1b9e2dLL,0x7162cd4LL<<24),
+      reale(-0x6b0945LL,0x68402dLL<<28),reale(-0x5e0a9cLL,0x11f6e4cLL<<24),
+      reale(0x7950d6LL,0x1383fe8LL<<24),reale(-0x237620LL,0xf3f2c44LL<<24),
+      reale(80031LL,0xf5c3b6d4LL<<20),reale(0x17e02d3150LL,0x27e511795bd59LL),
+      // _C4x[302]
+      reale(0x32da72LL,0xaace967LL<<24),reale(-0x33bb725LL,0x59030b8LL<<24),
+      reale(0x11933eeLL,0x20bc689LL<<24),reale(0xbb9523LL,0xca47e4aLL<<24),
+      reale(0x3d6a61LL,0x4b092ebLL<<24),reale(-0xddaf0fLL,0xfb2ea5cLL<<24),
+      reale(0x426269LL,0x233d90dLL<<24),reale(0x1317c7LL,0xb02256eLL<<24),
+      reale(191236LL,0x4d0b6fLL<<24),reale(-439125LL,0x1391d242LL<<20),
+      reale(0x17e02d3150LL,0x27e511795bd59LL),
+      // _C4x[303]
+      reale(-0x54decfLL,0xfb5258LL<<28),reale(0x762145LL,0x443871LL<<28),
+      reale(0x1097e20LL,0xbba962LL<<28),reale(-0xa62ed3LL,0x5c0bc3LL<<28),
+      reale(-0x24239fLL,0xe4c42cLL<<28),reale(-891563LL,0x747035LL<<28),
+      reale(0x3fd622LL,786806LL<<28),reale(-0x1a6626LL,0xa35887LL<<28),
+      reale(120797LL,0x11dfcd3LL<<24),reale(0x17e02d3150LL,0x27e511795bd59LL),
+      // _C4x[304]
+      reale(0x13eb197LL,0x4b5b07LL<<28),reale(-0x10e777LL,0xda51a6LL<<28),
+      reale(-0x242b4aLL,0xc67305LL<<28),reale(-0x641eacLL,0xd9e1c4LL<<28),
+      reale(0x414e2bLL,0xa4c103LL<<28),reale(210660LL,0x72cde2LL<<28),
+      reale(-68725LL,0xe0f901LL<<28),reale(-224556LL,0xdcd37eLL<<28),
+      reale(0x17e02d3150LL,0x27e511795bd59LL),
+      // _C4x[305]
+      reale(0x130e05LL,0x8aa00aLL<<28),reale(-0x2c180eLL,0x6a42ffLL<<28),
+      reale(234885LL,0xbf619cLL<<28),reale(66922LL,0x973059LL<<28),
+      reale(755418LL,0x1367aeLL<<28),reale(-419246LL,0x369313LL<<28),
+      reale(41213LL,0xb7cf7a7LL<<24),reale(0x7f56465c5LL,0x62a1b07dc9473LL),
+      // _C4x[306]
+      reale(-0x1868abLL,0xedbb168LL<<24),reale(-0x28c2d7LL,0x63a582LL<<28),
+      reale(0x31b08cLL,0x7cf2cd8LL<<24),reale(-261262LL,0xc33c21LL<<28),
+      reale(-106563LL,0xf6cfe48LL<<24),reale(-120794LL,0xff048abLL<<24),
+      reale(0x17e02d3150LL,0x27e511795bd59LL),
+      // _C4x[307]
+      reale(590308LL,0x2dd66cLL<<28),reale(77521LL,0xf4de25LL<<28),
+      reale(426657LL,250006LL<<28),reale(-306167LL,0xaff9d7LL<<28),
+      reale(37995LL,0xc577dbbLL<<24),reale(0x7f56465c5LL,0x62a1b07dc9473LL),
+      // _C4x[308]
+      real(0x1e06447abLL<<28),real(-0x5a3f19aeLL<<28),real(-0x128cc8c7LL<<28),
+      real(-0xddf8d6LL<<32),reale(0x1462fc6LL,0x1d2a1f8b6ccdLL),
+      // _C4x[309]
+      real(0x3aca642LL<<28),real(-0x34bd5bbLL<<28),real(0x7d57dc9LL<<24),
+      reale(497138LL,0xbe8dd4238d2e7LL),
+      // _C4x[310]
+      real(-0x9a681aLL<<24),real(-0x5ab210cLL<<20),
+      reale(61953LL,0x75e619a89ce07LL),
+      // _C4x[311]
+      real(16904LL<<20),real(0x495846bc80a035LL),
+      // _C4x[312]
+      real(-376740LL<<28),real(-0x148bf72cLL<<24),real(0x46b70c488LL<<24),
+      real(-0x4df9d7d484LL<<24),reale(12668LL,0x17bd05LL<<28),
+      reale(-87923LL,0x676f5a4LL<<24),reale(452934LL,0x95d1e18LL<<24),
+      reale(-0x1bb530LL,0x1269c4cLL<<24),reale(0x590b33LL,0x300a2eLL<<28),
+      reale(-0xe9bd67LL,0xa1e5474LL<<24),reale(0x1fac381LL,0x6f853a8LL<<24),
+      reale(-0x38f491dLL,0x980531cLL<<24),reale(0x549e8f7LL,57943LL<<28),
+      reale(-0x661859aLL,0xae3cd44LL<<24),reale(0x5f49ed3LL,0x5d60d38LL<<24),
+      reale(-0x3a3b665LL,0x46ef7ecLL<<24),reale(0x101e27bLL,0xe0efff34LL<<20),
+      reale(0x19c926916bLL,0xc5dcb3125bdbLL),
+      // _C4x[313]
+      real(0x1f1c0d201LL<<28),reale(-8242LL,0xb3d4f6LL<<28),
+      reale(78008LL,0xc812b3LL<<28),reale(-500801LL,596156LL<<28),
+      reale(0x24145dLL,0x8fcc95LL<<28),reale(-0x8320efLL,0x6e53c2LL<<28),
+      reale(0x17908cbLL,0xae3bc7LL<<28),reale(-0x3677df5LL,242216LL<<28),
+      reale(0x65f9884LL,0x4a9c69LL<<28),reale(-0x9a9a6e4LL,0x66600eLL<<28),
+      reale(0xbc219a2LL,0x832a9bLL<<28),reale(-0xb3fe38dLL,493972LL<<28),
+      reale(0x823d817LL,0xff227dLL<<28),reale(-0x428d074LL,0xe35adaLL<<28),
+      reale(0x152cdf6LL,0x14c02fLL<<28),reale(-0x31e9c6LL,0x9aa84238LL<<20),
+      reale(0x19c926916bLL,0xc5dcb3125bdbLL),
+      // _C4x[314]
+      reale(268265LL,0x6119c38LL<<24),reale(-0x18669bLL,0xbe43aa4LL<<24),
+      reale(0x69edfcLL,0x4a8473LL<<28),reale(-0x15da4fcLL,0xb1d233cLL<<24),
+      reale(0x38272ddLL,0x3d1f028LL<<24),reale(-0x71792d8LL,0xe18ff54LL<<24),
+      reale(0xb3db205LL,0x7bbc22LL<<28),reale(-0xdb1e472LL,0x795b9ecLL<<24),
+      reale(0xc1bcdb4LL,0xeece818LL<<24),reale(-0x66690f6LL,0x3363e04LL<<24),
+      reale(-0x65f027LL,0xdb48d1LL<<28),reale(0x47cb5dcLL,0x208769cLL<<24),
+      reale(-0x4a081fcLL,0x97dc08LL<<24),reale(0x2814effLL,0x82b4eb4LL<<24),
+      reale(-0x9b0889LL,0xf7a5c5ecLL<<20),
+      reale(0x19c926916bLL,0xc5dcb3125bdbLL),
+      // _C4x[315]
+      reale(0xe71866LL,0x5f0d1eLL<<28),reale(-0x2b5de68LL,0xf74378LL<<28),
+      reale(0x6373082LL,0x7b6232LL<<28),reale(-0xae3a66bLL,0x3d3344LL<<28),
+      reale(0xe3c0167LL,0x8350a6LL<<28),reale(-0xcd733a9LL,361797LL<<32),
+      reale(0x5b368faLL,0x7f483aLL<<28),reale(0x37cac0cLL,0x35365cLL<<28),
+      reale(-0x8e1b223LL,0x43b8aeLL<<28),reale(0x81a19c1LL,0x886928LL<<28),
+      reale(-0x4197ae1LL,0xf911c2LL<<28),reale(0x1039cd4LL,0xe47c74LL<<28),
+      reale(-171459LL,0x5bc336LL<<28),reale(-594748LL,0xd64d235LL<<24),
+      reale(0x19c926916bLL,0xc5dcb3125bdbLL),
+      // _C4x[316]
+      reale(0x91ed1dbLL,0x9d0afbLL<<28),reale(-0xdb1a910LL,0x98d5fdcLL<<24),
+      reale(0xe2547e2LL,0x6ca25e8LL<<24),reale(-0x79fc232LL,0xdca4434LL<<24),
+      reale(-0x3238c29LL,0xaa31d2LL<<28),reale(0xaa2ec45LL,0xb75a30cLL<<24),
+      reale(-0x9f2b078LL,0xa894858LL<<24),reale(0x40b9fe4LL,0x5f2ef64LL<<24),
+      reale(0x6fcb94LL,206249LL<<28),reale(-0xfcd517LL,0x6989c3cLL<<24),
+      reale(-550003LL,0x59a06c8LL<<24),reale(0x5f512bLL,0xee61c94LL<<24),
+      reale(-0x21de42LL,0x4de5110cLL<<20),
+      reale(0x19c926916bLL,0xc5dcb3125bdbLL),
+      // _C4x[317]
+      reale(0xb221aadLL,0xa08cddLL<<28),reale(-0x6bd20aLL,0x43a712LL<<28),
+      reale(-0xa0e4bdeLL,0xfd91dfLL<<28),reale(0xbe849c5LL,0xf3dc68LL<<28),
+      reale(-0x56c8e4fLL,0xa78dd1LL<<28),reale(-0xfa0633LL,0x952d3eLL<<28),
+      reale(0x1b823cdLL,0x1249d3LL<<28),reale(0x9152c8LL,0xf3d2b4LL<<28),
+      reale(-0x17c45a9LL,0x928f05LL<<28),reale(0xc528a5LL,0x3f05eaLL<<28),
+      reale(-0x209d63LL,0x542687LL<<28),reale(-100774LL,0xd5026cf8LL<<20),
+      reale(0x19c926916bLL,0xc5dcb3125bdbLL),
+      // _C4x[318]
+      reale(-0xd0cfcabLL,0x2be4e58LL<<24),reale(0x8a3b875LL,0x8b11e6cLL<<24),
+      reale(-0x2602eeLL,0xfc0ffeLL<<28),reale(-0x29b84eeLL,0x33a9454LL<<24),
+      reale(-0x529e72LL,0x33fd68LL<<24),reale(0x24b1568LL,0x965ecbcLL<<24),
+      reale(-0x12be25fLL,0xc8233fLL<<28),reale(-0x1f0063LL,0xe0954a4LL<<24),
+      reale(0x266a40LL,0xed09078LL<<24),reale(0x15ded3LL,0x1f1f90cLL<<24),
+      reale(-884986LL,0x26990b14LL<<20),reale(0x19c926916bLL,0xc5dcb3125bdbLL),
+      // _C4x[319]
+      reale(0x2d0fd17LL,14679LL<<32),reale(-0x119e016LL,547976LL<<32),
+      reale(-0x287e1b8LL,154713LL<<32),reale(0x1fc3b91LL,213302LL<<32),
+      reale(0x2eb440LL,842635LL<<32),reale(-0x598815LL,637892LL<<32),
+      reale(-0x69ec2eLL,199245LL<<32),reale(0x6fc4acLL,847762LL<<32),
+      reale(-0x1dcd86LL,277503LL<<32),reale(46148LL,0xd99f1c8LL<<24),
+      reale(0x19c926916bLL,0xc5dcb3125bdbLL),
+      // _C4x[320]
+      reale(-0x30f441dLL,0xe5dcc8LL<<28),reale(0x73a875LL,0x301eb3LL<<28),
+      reale(0xbe5c31LL,0x328736LL<<28),reale(0x6ae3f9LL,0x5033a9LL<<28),
+      reale(-0xd0bcdaLL,0xf8b964LL<<28),reale(0x2e08cdLL,0x4521bfLL<<28),
+      reale(0x143398LL,0x3dc612LL<<28),reale(284896LL,0x69abb5LL<<28),
+      reale(-424637LL,0x7bbed23LL<<24),reale(0x19c926916bLL,0xc5dcb3125bdbLL),
+      // _C4x[321]
+      reale(0x2a3fb3LL,0x5da06cLL<<28),reale(0x11d140fLL,0x8050a8LL<<28),
+      reale(-0x7980cbLL,0x822dc4LL<<28),reale(-0x2de785LL,546991LL<<32),
+      reale(-0x15a8e5LL,0xe6db5cLL<<28),reale(0x3d8d4bLL,0x939238LL<<28),
+      reale(-0x171002LL,0xfa02b4LL<<28),reale(90538LL,0xdce22caLL<<24),
+      reale(0x19c926916bLL,0xc5dcb3125bdbLL),
+      // _C4x[322]
+      reale(0x1d1c37LL,0xe5435aLL<<28),reale(-0x142e2cLL,0x65e4cfLL<<28),
+      reale(-0x691fb5LL,0x5612fcLL<<28),reale(0x366a97LL,0xb81689LL<<28),
+      reale(392016LL,0x32e81eLL<<28),reale(-16025LL,0x6c5463LL<<28),
+      reale(-223531LL,0xd348095LL<<24),reale(0x19c926916bLL,0xc5dcb3125bdbLL),
+      // _C4x[323]
+      reale(-0x27a2ffLL,0xf293a8LL<<28),reale(-46367LL,872446LL<<32),
+      real(0x18e85e598LL<<28),reale(754229LL,667751LL<<32),
+      reale(-376196LL,0x85e408LL<<28),reale(33027LL,0xeffa33cLL<<24),
+      reale(0x898623079LL,0x41f43bb0c949LL),
+      // _C4x[324]
+      reale(-0xfb9cbLL,0xa87544LL<<28),reale(976249LL,0x602e67LL<<28),
+      reale(-29215LL,0x22f602LL<<28),reale(-27194LL,0xbd75edLL<<28),
+      reale(-41364LL,0x5dde85bLL<<24),reale(0x898623079LL,0x41f43bb0c949LL),
+      // _C4x[325]
+      real(0x6cba35ba4LL<<28),reale(10661LL,0xb5adc8LL<<28),
+      reale(-6837LL,0x66f24cLL<<28),real(0x301270d076LL<<24),
+      reale(0x35aafaf0LL,0x384bb07b32421LL),
+      // _C4x[326]
+      real(-0x2f9823232LL<<28),real(-0xce4e6c05LL<<28),
+      real(-0xb74eeaa93LL<<24),reale(0x110ea712LL,0xcc6f5fc7e64c9LL),
+      // _C4x[327]
+      real(-400561LL<<32),real(0xd44948LL<<24),
+      reale(66909LL,0xbcc54ee94d445LL),
+      // _C4x[328]
+      real(-0x4d6b58LL<<20),reale(3193LL,0x402148867236bLL),
+      // _C4x[329]
+      real(-0x1250b2e28LL<<24),real(0x15b951553LL<<28),
+      reale(-3809LL,0x7d8f088LL<<24),reale(28626LL,0x9961feLL<<28),
+      reale(-160362LL,0x853f38LL<<24),reale(702411LL,0xec72a9LL<<28),
+      reale(-0x25d7b7LL,0x97bdde8LL<<24),reale(0x6de23fLL,0x2af154LL<<28),
+      reale(-0x109d261LL,0xa90ec98LL<<24),reale(0x21ba361LL,0x6947ffLL<<28),
+      reale(-0x398cfadLL,0xafe8b48LL<<24),reale(0x5212828LL,0xeee0aaLL<<28),
+      reale(-0x60064c0LL,0xbf8d9f8LL<<24),reale(0x57b9e69LL,0x316555LL<<28),
+      reale(-0x34f02e8LL,0xcc1f8a8LL<<24),reale(0xe8ed99LL,0x2e44205LL<<24),
+      reale(0x1bb21ff185LL,0xf0d684e8efa5dLL),
+      // _C4x[330]
+      reale(-25314LL,0xe334b4LL<<28),reale(176943LL,0x89989eLL<<28),
+      reale(-914489LL,0x4ae808LL<<28),reale(0x37dcdfLL,0xf54972LL<<28),
+      reale(-0xb24506LL,0x24235cLL<<28),reale(0x1cda16dLL,0xde0c46LL<<28),
+      reale(-0x3d3da1bLL,323499LL<<32),reale(0x6af05e8LL,0x3df51aLL<<28),
+      reale(-0x992eda1LL,0x958204LL<<28),reale(0xb210586LL,0x4217eeLL<<28),
+      reale(-0xa44e042LL,642392LL<<28),reale(0x73a1795LL,0xd488c2LL<<28),
+      reale(-0x39e2728LL,0xe3f0acLL<<28),reale(0x1226765LL,0x365b96LL<<28),
+      reale(-0x2a59bfLL,0x3d67fa2LL<<24),
+      reale(0x1bb21ff185LL,0xf0d684e8efa5dLL),
+      // _C4x[331]
+      reale(-0x2c674bLL,0x16441bLL<<28),reale(0xa2d3b4LL,677972LL<<28),
+      reale(-0x1d5cb43LL,0xce7a8dLL<<28),reale(0x439464eLL,523846LL<<28),
+      reale(-0x7c884c5LL,0xf092ffLL<<28),reale(0xb655336LL,0x4e7038LL<<28),
+      reale(-0xcebd87fLL,0x380171LL<<28),reale(0xa996f57LL,0xeb522aLL<<28),
+      reale(-0x4ebf5d3LL,0x9b79e3LL<<28),reale(-0x124cae3LL,0x66481cLL<<28),
+      reale(0x4731b81LL,0xaa7055LL<<28),reale(-0x4470075LL,0xf2760eLL<<28),
+      reale(0x2437fe9LL,0x1a98c7LL<<28),reale(-0x8b26e1LL,0x809ec82LL<<24),
+      reale(0x1bb21ff185LL,0xf0d684e8efa5dLL),
+      // _C4x[332]
+      reale(-0x393952cLL,0xccc688LL<<28),reale(0x7498abeLL,0x1b2a12LL<<28),
+      reale(-0xb812d9bLL,0x62221cLL<<28),reale(0xd9c1565LL,0xd2f126LL<<28),
+      reale(-0xae36ab3LL,938907LL<<32),reale(0x36edad6LL,0x562e3aLL<<28),
+      reale(0x4bc1d74LL,0xba8144LL<<28),reale(-0x8b55d1bLL,0x66554eLL<<28),
+      reale(0x740878dLL,0xce6cd8LL<<28),reale(-0x373e3ddLL,0xd9da62LL<<28),
+      reale(0xca1aabLL,0xa3706cLL<<28),reale(250593LL,0x663176LL<<28),
+      reale(-546525LL,0x947e3c2LL<<24),reale(0x1bb21ff185LL,0xf0d684e8efa5dLL),
+      // _C4x[333]
+      reale(-0xdb1bc1dLL,0x36339f8LL<<24),reale(0xc39ea0bLL,0xc34dd1LL<<28),
+      reale(-0x4951fdfLL,0xc638828LL<<24),reale(-0x5514b3eLL,0xf4d74LL<<28),
+      reale(0xab30921LL,0xef9c658LL<<24),reale(-0x89bd401LL,0x4fe517LL<<28),
+      reale(0x2e3ad13LL,0xc691488LL<<24),reale(0xc02159LL,0x6e4ebaLL<<28),
+      reale(-0xe1ccbbLL,0x37e92b8LL<<24),reale(-0x1940d4LL,787549LL<<28),
+      reale(0x5bd344LL,0x8c560e8LL<<24),reale(-0x1f0fccLL,0xcab0bcdLL<<24),
+      reale(0x1bb21ff185LL,0xf0d684e8efa5dLL),
+      // _C4x[334]
+      reale(0x2ff72acLL,939162LL<<32),reale(-0xb18f798LL,517169LL<<32),
+      reale(0xa69ea51LL,333128LL<<32),reale(-0x38a8f23LL,0xff25fLL<<32),
+      reale(-0x197d6c0LL,460278LL<<32),reale(0x16af76eLL,31373LL<<32),
+      reale(0xca5fc8LL,219812LL<<32),reale(-0x1692bddLL,528571LL<<32),
+      reale(0xaac14bLL,345938LL<<32),reale(-0x197e89LL,805097LL<<32),
+      reale(-115325LL,0x910d63LL<<28),reale(0x1bb21ff185LL,0xf0d684e8efa5dLL),
+      // _C4x[335]
+      reale(0x61143caLL,0x942d58LL<<28),reale(0x1464c3cLL,213324LL<<32),
+      reale(-0x2485570LL,0x9c9c28LL<<28),reale(-0xdfcb44LL,651257LL<<32),
+      reale(0x238e73aLL,0xaa5af8LL<<28),reale(-0xe92526LL,796838LL<<32),
+      reale(-0x306fbbLL,0xcb09c8LL<<28),reale(0x204896LL,458067LL<<32),
+      reale(0x170af0LL,0xc64898LL<<28),reale(-831540LL,0x601d2dLL<<28),
+      reale(0x1bb21ff185LL,0xf0d684e8efa5dLL),
+      // _C4x[336]
+      reale(-0x2701e9LL,380968LL<<32),reale(-0x2bcc036LL,420131LL<<32),
+      reale(0x1887ec6LL,152606LL<<32),reale(0x6212afLL,738073LL<<32),
+      reale(-0x4410d3LL,731156LL<<32),reale(-0x720d87LL,206095LL<<32),
+      reale(0x6672e6LL,842762LL<<32),reale(-0x1915bdLL,212741LL<<32),
+      reale(21175LL,0x2b1d47LL<<28),reale(0x1bb21ff185LL,0xf0d684e8efa5dLL),
+      // _C4x[337]
+      reale(-0x11a1b4LL,0x1f2892LL<<28),reale(0xa93ae1LL,0xc92734LL<<28),
+      reale(0x8faea8LL,0x77afd6LL<<28),reale(-0xbfaf4dLL,0x3af778LL<<28),
+      reale(0x1d134cLL,0xf3db1aLL<<28),reale(0x14346eLL,0x8257bcLL<<28),
+      reale(362851LL,0xbe025eLL<<28),reale(-408796LL,0x50d01bcLL<<24),
+      reale(0x1bb21ff185LL,0xf0d684e8efa5dLL),
+      // _C4x[338]
+      reale(0x5f5ca1LL,975799LL<<32),reale(-0x1ab5f6LL,0x630288LL<<28),
+      reale(-0x10a466LL,630138LL<<32),reale(-631633LL,0x2404b8LL<<28),
+      reale(0x139d0bLL,761149LL<<32),reale(-440348LL,610024LL<<28),
+      reale(22303LL,0x70a13b8LL<<24),reale(0x93b5ffb2cLL,0xa59cd6f84fe1fLL),
+      // _C4x[339]
+      reale(-100053LL,0x43e1acLL<<28),reale(-0x6aae1bLL,620271LL<<32),
+      reale(0x2c4b57LL,0xd8a434LL<<28),reale(514674LL,0xa13f78LL<<28),
+      reale(32543LL,0xf86ebcLL<<28),reale(-220558LL,0xee833c8LL<<24),
+      reale(0x1bb21ff185LL,0xf0d684e8efa5dLL),
+      // _C4x[340]
+      reale(-258062LL,17386LL<<32),reale(-74791LL,0x35a5f8LL<<28),
+      reale(745027LL,493173LL<<32),reale(-337383LL,0xf5a4a8LL<<28),
+      reale(26418LL,0x26e81f8LL<<24),reale(0x93b5ffb2cLL,0xa59cd6f84fe1fLL),
+      // _C4x[341]
+      reale(287986LL,0x83a7b2LL<<28),reale(5344LL,0xddeeccLL<<28),
+      reale(-6206LL,0xa74be6LL<<28),reale(-13965LL,0xd07054cLL<<24),
+      reale(0x313caa90eLL,0xe1def252c54b5LL),
+      // _C4x[342]
+      reale(3432LL,999202LL<<32),real(-0x7c2b19efLL<<32),
+      real(0xcb0c2aebLL<<28),reale(0x12521bbeLL,0xdb94118adae9fLL),
+      // _C4x[343]
+      real(-0x34b26a8LL<<28),real(-0x391d0abLL<<28),
+      reale(0x579206LL,0x909af11944e4bLL),
+      // _C4x[344]
+      real(41LL<<28),real(0x3fbc634a12a6b1LL),
+      // _C4x[345]
+      real(0x46a7f53aLL<<32),reale(-9148LL,209563LL<<32),
+      reale(55355LL,963460LL<<32),reale(-262941LL,404301LL<<32),
+      reale(0xf6e6eLL,58190LL<<32),reale(-0x31125eLL,24671LL<<32),
+      reale(0x82dba5LL,283736LL<<32),reale(-0x1274a99LL,718737LL<<32),
+      reale(0x2367a33LL,910946LL<<32),reale(-0x39b9ab9LL,269987LL<<32),
+      reale(0x4f6e12fLL,375084LL<<32),reale(-0x5a76405LL,883541LL<<32),
+      reale(0x511a91eLL,220278LL<<32),reale(-0x306690eLL,105319LL<<32),
+      reale(0xd3c0b9LL,0xccf81d6LL<<24),
+      reale(0x1d9b1951a0LL,0xd54f3ea0b98dfLL),
+      // _C4x[346]
+      reale(114172LL,570308LL<<32),reale(-499142LL,32417LL<<36),
+      reale(0x1ab452LL,696732LL<<32),reale(-0x4c8a22LL,130808LL<<32),
+      reale(0xb5790eLL,264884LL<<32),reale(-0x166233eLL,27350LL<<36),
+      reale(0x24cdc67LL,752524LL<<32),reale(-0x322d0b6LL,526792LL<<32),
+      reale(0x3808311LL,557220LL<<32),reale(-0x3214733LL,41611LL<<36),
+      reale(0x2263a42LL,632444LL<<32),reale(-0x10e7aeaLL,302744LL<<32),
+      reale(0x53b854LL,555412LL<<32),reale(-792997LL,0xc866d9cLL<<24),
+      reale(0x9de5dc5e0LL,0x471a6a35932f5LL),
+      // _C4x[347]
+      reale(0xe74261LL,820196LL<<32),reale(-0x254ae1fLL,91461LL<<32),
+      reale(0x4e2b86cLL,279198LL<<32),reale(-0x8501d8dLL,54663LL<<32),
+      reale(0xb5983e4LL,492696LL<<32),reale(-0xc0f0741LL,81129LL<<32),
+      reale(0x9349116LL,806802LL<<32),reale(-0x3aebfbdLL,159531LL<<32),
+      reale(-0x1b2f350LL,780620LL<<32),reale(0x45be7e6LL,0xfb80dLL<<32),
+      reale(-0x3f5d44bLL,460678LL<<32),reale(0x20e7862LL,346959LL<<32),
+      reale(-0x7dbe5bLL,0xa56536LL<<24),
+      reale(0x1d9b1951a0LL,0xd54f3ea0b98dfLL),
+      // _C4x[348]
+      reale(0x82fd346LL,26079LL<<36),reale(-0xbc8bfb1LL,11754LL<<36),
+      reale(0xcb41663LL,51077LL<<36),reale(-0x8f7dc15LL,40456LL<<36),
+      reale(0x184463dLL,34251LL<<36),reale(0x599bf98LL,23334LL<<36),
+      reale(-0x863675dLL,41329LL<<36),reale(0x6795265LL,25092LL<<36),
+      reale(-0x2ea83acLL,2871LL<<36),reale(0x9d6c86LL,3938LL<<36),
+      reale(535285LL,33757LL<<36),reale(-501187LL,0x339d14LL<<28),
+      reale(0x1d9b1951a0LL,0xd54f3ea0b98dfLL),
+      // _C4x[349]
+      reale(0xa139d64LL,19274LL<<36),reale(-0x1e0e28cLL,48441LL<<36),
+      reale(-0x6dca60bLL,6664LL<<36),reale(0xa5ff4ecLL,58071LL<<36),
+      reale(-0x752bcc7LL,25286LL<<36),reale(0x1f5b6d1LL,12981LL<<36),
+      reale(0xf1749aLL,2820LL<<36),reale(-0xc581edLL,8531LL<<36),
+      reale(-0x267c92LL,20546LL<<36),reale(0x581034LL,18225LL<<36),
+      reale(-0x1c95bbLL,0x8a4991LL<<28),
+      reale(0x1d9b1951a0LL,0xd54f3ea0b98dfLL),
+      // _C4x[350]
+      reale(-0xb572bceLL,1709LL<<40),reale(0x8c2fc3fLL,2454LL<<40),
+      reale(-0x2004b39LL,555LL<<40),reale(-0x1ecc80bLL,49000LL<<36),
+      reale(0x117b62cLL,2115LL<<40),reale(0xf47d0aLL,2331LL<<40),
+      reale(-0x15375bfLL,713LL<<40),reale(0x93f00aLL,33144LL<<36),
+      reale(-0x13df21LL,1425LL<<40),reale(-123236LL,0x55cd8aLL<<28),
+      reale(0x1d9b1951a0LL,0xd54f3ea0b98dfLL),
+      // _C4x[351]
+      reale(0x225b4b6LL,1303LL<<40),reale(-0x1cbc393LL,13350LL<<36),
+      reale(-0x14d2d95LL,3700LL<<36),reale(0x21675efLL,63346LL<<36),
+      reale(-0xaeeed7LL,19896LL<<36),reale(-0x3ba146LL,41246LL<<36),
+      reale(0x1a46eaLL,5756LL<<36),reale(0x17c59cLL,37738LL<<36),
+      reale(-781447LL,0x9ea11dLL<<28),reale(0x1d9b1951a0LL,0xd54f3ea0b98dfLL),
+      // _C4x[352]
+      reale(-0x2be3634LL,63929LL<<36),reale(0x11a0acaLL,62242LL<<36),
+      reale(0x8267bfLL,40923LL<<36),reale(-0x2d5adcLL,48428LL<<36),
+      reale(-0x77040fLL,16221LL<<36),reale(0x5d908bLL,18102LL<<36),
+      reale(-0x15246bLL,5247LL<<36),reale(2743LL,0xcd40fcLL<<28),
+      reale(0x1d9b1951a0LL,0xd54f3ea0b98dfLL),
+      // _C4x[353]
+      reale(0x85956bLL,883480LL<<32),reale(0xab2f27LL,998436LL<<32),
+      reale(-0xac655eLL,34449LL<<36),reale(996220LL,779132LL<<32),
+      reale(0x137773LL,333064LL<<32),reale(426630LL,382292LL<<32),
+      reale(-392369LL,0x6af8038LL<<24),reale(0x1d9b1951a0LL,0xd54f3ea0b98dfLL),
+      // _C4x[354]
+      reale(-0x2bc894LL,13015LL<<36),reale(-0x31ae6aLL,30260LL<<36),
+      reale(-0x2328a1LL,31713LL<<36),reale(0x37dee4LL,56522LL<<36),
+      reale(-0x11a172LL,47323LL<<36),reale(48366LL,0xcfa39dLL<<28),
+      reale(0x1d9b1951a0LL,0xd54f3ea0b98dfLL),
+      // _C4x[355]
+      reale(-0x696616LL,44157LL<<36),reale(0x231c8fLL,795724LL<<32),
+      reale(591806LL,263784LL<<32),reale(76262LL,153156LL<<32),
+      reale(-216245LL,0x4a29a78LL<<24),reale(0x1d9b1951a0LL,0xd54f3ea0b98dfLL),
+      // _C4x[356]
+      reale(-50644LL,2047LL<<36),reale(243167LL,17106LL<<36),
+      reale(-100840LL,62069LL<<36),reale(7018LL,0x217e14LL<<28),
+      reale(0x34a1f41f5LL,0x6d08ce11dbba7LL),
+      // _C4x[357]
+      reale(16894LL,439LL<<40),reale(-3397LL,43380LL<<36),
+      reale(-13998LL,0x90b723LL<<28),reale(0x34a1f41f5LL,0x6d08ce11dbba7LL),
+      // _C4x[358]
+      real(-138796LL<<40),real(0x326231aLL<<28),
+      reale(0x5d9c18LL,0xac3bb24726559LL),
+      // _C4x[359]
+      real(-204761LL<<28),reale(20426LL,0xaa7b82b97d24fLL),
+      // _C4x[360]
+      reale(-18696LL,519966LL<<32),reale(95700LL,66120LL<<32),
+      reale(-398137LL,208882LL<<32),reale(0x14fc95LL,708284LL<<32),
+      reale(-0x3d1bb4LL,188998LL<<32),reale(0x978510LL,13635LL<<36),
+      reale(-0x141fac3LL,584986LL<<32),reale(0x24bf66eLL,208292LL<<32),
+      reale(-0x3992436LL,862062LL<<32),reale(0x4cc3046LL,947736LL<<32),
+      reale(-0x555d496LL,555074LL<<32),reale(0x4b447d3LL,649356LL<<32),
+      reale(-0x2c79ecfLL,521878LL<<32),reale(0xc19a43LL,0x799264LL<<28),
+      reale(0x1f8412b1bbLL,0xb9c7f85883761LL),
+      // _C4x[361]
+      reale(-0x227ab0LL,16142LL<<36),reale(0x6c5265LL,629784LL<<32),
+      reale(-0x11b8c1dLL,56657LL<<36),reale(0x26f5cbcLL,98952LL<<32),
+      reale(-0x482fb20LL,14772LL<<36),reale(0x709c48eLL,679416LL<<32),
+      reale(-0x92fd9b9LL,13463LL<<36),reale(0x9e6c5adLL,595048LL<<32),
+      reale(-0x89a44eaLL,61018LL<<36),reale(0x5c79070LL,789464LL<<32),
+      reale(-0x2cba02fLL,46941LL<<36),reale(0xdaf5c9LL,404040LL<<32),
+      reale(-0x1f6520LL,0x4d2688LL<<28),
+      reale(0x1f8412b1bbLL,0xb9c7f85883761LL),
+      // _C4x[362]
+      reale(-0x2d52da6LL,2991LL<<36),reale(0x57a1821LL,44906LL<<36),
+      reale(-0x8b074b6LL,45557LL<<36),reale(0xb25424eLL,64008LL<<36),
+      reale(-0xb27b4e2LL,29787LL<<36),reale(0x7efaebeLL,40358LL<<36),
+      reale(-0x2a5e0f6LL,52385LL<<36),reale(-0x21bb9a2LL,25604LL<<36),
+      reale(0x43c3e65LL,38023LL<<36),reale(-0x3ac6c50LL,22242LL<<36),
+      reale(0x1e0a4e5LL,50637LL<<36),reale(-0x724f60LL,290225LL<<32),
+      reale(0x1f8412b1bbLL,0xb9c7f85883761LL),
+      // _C4x[363]
+      reale(-0xbc507a6LL,53571LL<<36),reale(0xb9cb8adLL,13336LL<<32),
+      reale(-0x7261902LL,61788LL<<36),reale(-0x128369LL,849256LL<<32),
+      reale(0x62b0258LL,52469LL<<36),reale(-0x7fb0789LL,985016LL<<32),
+      reale(0x5c56415LL,36142LL<<36),reale(-0x2783dddLL,72968LL<<32),
+      reale(0x7a756cLL,27431LL<<36),reale(724406LL,0xf6758LL<<32),
+      reale(-459368LL,0x61ea58LL<<28),reale(0x1f8412b1bbLL,0xb9c7f85883761LL),
+      // _C4x[364]
+      reale(0x6f1d21LL,46177LL<<36),reale(-0x7e03f7bLL,36040LL<<36),
+      reale(0x9ccd64aLL,28463LL<<36),reale(-0x622c9aaLL,38934LL<<36),
+      reale(0x138cd3dLL,15997LL<<36),reale(0x10cb2afLL,57956LL<<36),
+      reale(-0xa9cbb1LL,56139LL<<36),reale(-0x30bcfeLL,1714LL<<36),
+      reale(0x5434b3LL,63129LL<<36),reale(-0x1a6458LL,664724LL<<32),
+      reale(0x1f8412b1bbLL,0xb9c7f85883761LL),
+      // _C4x[365]
+      reale(0x71bef35LL,52964LL<<36),reale(-0xc9306fLL,105496LL<<32),
+      reale(-0x20d47b6LL,52795LL<<36),reale(0xc5ef7aLL,496840LL<<32),
+      reale(0x112054dLL,47858LL<<36),reale(-0x13ca670LL,686712LL<<32),
+      reale(0x8042f9LL,5609LL<<36),reale(-0xf688eLL,375592LL<<32),
+      reale(-126670LL,0x8629a8LL<<28),reale(0x1f8412b1bbLL,0xb9c7f85883761LL),
+      // _C4x[366]
+      reale(-0x13efe8aLL,18329LL<<36),reale(-0x19c0bfcLL,27906LL<<36),
+      reale(0x1ea3e4aLL,62715LL<<36),reale(-0x7d3b35LL,39788LL<<36),
+      reale(-0x42287eLL,44605LL<<36),reale(0x149df9LL,29526LL<<36),
+      reale(0x182860LL,44703LL<<36),reale(-734820LL,693435LL<<32),
+      reale(0x1f8412b1bbLL,0xb9c7f85883761LL),
+      // _C4x[367]
+      reale(0xb6aa99LL,59849LL<<36),reale(0x93ab1fLL,452760LL<<32),
+      reale(-0x1720c6LL,60902LL<<36),reale(-0x796650LL,147240LL<<32),
+      reale(0x553b28LL,62147LL<<36),reale(-0x11d6bfLL,536248LL<<32),
+      reale(-10841LL,0x50d3f8LL<<28),reale(0x1f8412b1bbLL,0xb9c7f85883761LL),
+      // _C4x[368]
+      reale(0xbde12aLL,894776LL<<32),reale(-0x9842b4LL,18214LL<<36),
+      reale(264818LL,197512LL<<32),reale(0x124032LL,9587LL<<36),
+      reale(477961LL,138712LL<<32),reale(-375863LL,804917LL<<32),
+      reale(0x1f8412b1bbLL,0xb9c7f85883761LL),
+      // _C4x[369]
+      reale(-0x2e6a1aLL,42466LL<<36),reale(-0x285574LL,539320LL<<32),
+      reale(0x34c58bLL,225LL<<36),reale(-0xf6ed0LL,814568LL<<32),
+      reale(33755LL,0x2b54a8LL<<28),reale(0x1f8412b1bbLL,0xb9c7f85883761LL),
+      // _C4x[370]
+      reale(0x1aefe7LL,9719LL<<36),reale(634098LL,32386LL<<36),
+      reale(114937LL,5021LL<<36),reale(-211036LL,146065LL<<32),
+      reale(0x1f8412b1bbLL,0xb9c7f85883761LL),
+      // _C4x[371]
+      reale(33770LL,14237LL<<36),reale(-12918LL,122440LL<<32),
+      real(0x31a67a9c8LL<<28),reale(0x80108cfaLL,0xda506166fe05fLL),
+      // _C4x[372]
+      real(-61453LL<<36),real(-0x1223354LL<<32),
+      reale(0x12af280LL,0x57955a5f17535LL),
+      // _C4x[373]
+      real(4424LL<<28),real(0x292ecb9a960d27d1LL),
+      // _C4x[374]
+      reale(152058LL,7062LL<<36),reale(-566839LL,172984LL<<32),
+      reale(0x1b4a05LL,65069LL<<36),reale(-0x49ae44LL,649320LL<<32),
+      reale(0xab8825LL,43876LL<<36),reale(-0x159dc41LL,185880LL<<32),
+      reale(0x25cc2f5LL,283LL<<36),reale(-0x3929bc8LL,142024LL<<32),
+      reale(0x4a1d656LL,7474LL<<36),reale(-0x50b0852LL,664696LL<<32),
+      reale(0x46180c2LL,52617LL<<36),reale(-0x290e15dLL,885032LL<<32),
+      reale(0xb1e7b3LL,0xa025a8LL<<28),reale(0x216d0c11d6LL,0x9e40b2104d5e3LL),
+      // _C4x[375]
+      reale(0x8bd2aeLL,64742LL<<36),reale(-0x152920eLL,25788LL<<36),
+      reale(0x2b90affLL,31138LL<<36),reale(-0x4c60300LL,4075LL<<40),
+      reale(0x71be0c9LL,64254LL<<36),reale(-0x8ed887bLL,13732LL<<36),
+      reale(0x9529b5cLL,61882LL<<36),reale(-0x7e5b3b3LL,25176LL<<36),
+      reale(0x533e4b9LL,20118LL<<36),reale(-0x27ae5baLL,23948LL<<36),
+      reale(0xc041f5LL,33362LL<<36),reale(-0x1b5ebaLL,866999LL<<32),
+      reale(0x216d0c11d6LL,0x9e40b2104d5e3LL),
+      // _C4x[376]
+      reale(0x5fcb5eeLL,5039LL<<36),reale(-0x8ed2046LL,73592LL<<32),
+      reale(0xad24cccLL,7756LL<<36),reale(-0xa3ea966LL,57352LL<<32),
+      reale(0x6caec7eLL,29289LL<<36),reale(-0x1c943bbLL,406936LL<<32),
+      reale(-0x267c089LL,38310LL<<36),reale(0x417984cLL,694824LL<<32),
+      reale(-0x36a1a06LL,7587LL<<36),reale(0x1b8c6d9LL,67512LL<<32),
+      reale(-0x68792dLL,572728LL<<28),reale(0x216d0c11d6LL,0x9e40b2104d5e3LL),
+      // _C4x[377]
+      reale(0xa6a33a7LL,28796LL<<36),reale(-0x5787a1eLL,530LL<<40),
+      reale(-0x15e2843LL,61508LL<<36),reale(0x6817531LL,3608LL<<36),
+      reale(-0x786b289LL,21196LL<<36),reale(0x524444eLL,2409LL<<40),
+      reale(-0x218e2e7LL,59796LL<<36),reale(0x5eeb26LL,56328LL<<36),
+      reale(846498LL,1564LL<<36),reale(-421215LL,879846LL<<32),
+      reale(0x216d0c11d6LL,0x9e40b2104d5e3LL),
+      // _C4x[378]
+      reale(-0x8764bd6LL,42036LL<<36),reale(0x913afb2LL,248LL<<32),
+      reale(-0x51134cbLL,10871LL<<36),reale(0xa48f07LL,593256LL<<32),
+      reale(0x118661fLL,45978LL<<36),reale(-0x8fabc1LL,64216LL<<32),
+      reale(-0x3890baLL,25597LL<<36),reale(0x505dc7LL,159560LL<<32),
+      reale(-0x187191LL,0x890dc8LL<<28),
+      reale(0x216d0c11d6LL,0x9e40b2104d5e3LL),
+      // _C4x[379]
+      reale(0x24068eLL,41034LL<<36),reale(-0x2095e18LL,33996LL<<36),
+      reale(0x79e54dLL,798LL<<36),reale(0x12548a5LL,22088LL<<36),
+      reale(-0x125c0c3LL,21842LL<<36),reale(0x6f4e99LL,30532LL<<36),
+      reale(-776534LL,14118LL<<36),reale(-127092LL,420189LL<<32),
+      reale(0x216d0c11d6LL,0x9e40b2104d5e3LL),
+      // _C4x[380]
+      reale(-0x1cff2faLL,49333LL<<36),reale(0x1b90d6dLL,86712LL<<32),
+      reale(-0x53819bLL,7854LL<<36),reale(-0x453fd8LL,875016LL<<32),
+      reale(0xf6a85LL,2151LL<<36),reale(0x18479dLL,491096LL<<32),
+      reale(-691601LL,0x991dd8LL<<28),reale(0x216d0c11d6LL,0x9e40b2104d5e3LL),
+      // _C4x[381]
+      reale(0x99759bLL,59960LL<<36),reale(-158284LL,938LL<<40),
+      reale(-0x79bdeeLL,43912LL<<36),reale(0x4d8087LL,3021LL<<40),
+      reale(-987193LL,48728LL<<36),reale(-20807LL,78972LL<<32),
+      reale(0x216d0c11d6LL,0x9e40b2104d5e3LL),
+      // _C4x[382]
+      reale(-0x12e4f1LL,22134LL<<36),reale(-44812LL,400360LL<<32),
+      reale(156785LL,14859LL<<36),reale(74079LL,619256LL<<32),
+      reale(-51373LL,0x7bdc78LL<<28),reale(0x4c66f7043LL,0x3b2dd04b78c45LL),
+      // _C4x[383]
+      reale(-138772LL,7966LL<<36),reale(154910LL,57756LL<<36),
+      reale(-42194LL,6314LL<<36),real(0x4216e9dbLL<<32),
+      reale(0x1977a7ac1LL,0x13b9f01928417LL),
+      // _C4x[384]
+      reale(30957LL,2723LL<<36),reale(7080LL,304568LL<<32),
+      reale(-9774LL,884536LL<<28),reale(0x1977a7ac1LL,0x13b9f01928417LL),
+      // _C4x[385]
+      real(-329724LL<<36),real(284138LL<<32),reale(989485LL,0x4511e2f2b39a3LL),
+      // _C4x[386]
+      real(-0x223858LL<<28),reale(154847LL,0x4e6e7be138cdbLL),
+      // _C4x[387]
+      reale(-768540LL,36525LL<<36),reale(0x223a21LL,36070LL<<36),
+      reale(-0x568badLL,25823LL<<36),reale(0xbea6b3LL,58040LL<<36),
+      reale(-0x16f00e8LL,60305LL<<36),reale(0x2697f7cLL,44170LL<<36),
+      reale(-0x388f437LL,18883LL<<36),reale(0x4785431LL,23900LL<<36),
+      reale(-0x4c659efLL,5749LL<<36),reale(0x417baccLL,51246LL<<36),
+      reale(-0x260d0dfLL,14503LL<<36),reale(0xa43857LL,40886LL<<32),
+      reale(0x23560571f1LL,0x82b96bc817465LL),
+      // _C4x[388]
+      reale(-0x832312LL,24184LL<<36),reale(0xfeda80LL,21900LL<<36),
+      reale(-0x1a97403LL,1606LL<<40),reale(0x25ff726LL,57652LL<<36),
+      reale(-0x2e19f74LL,57928LL<<36),reale(0x2ecb0c8LL,46556LL<<36),
+      reale(-0x26beeebLL,931LL<<40),reale(0x1914217LL,62852LL<<36),
+      reale(-0xbcc7b7LL,52760LL<<36),reale(0x38a250LL,16940LL<<36),
+      reale(-524992LL,458356LL<<32),reale(0xbc75725fbLL,0x2b9323ed5d177LL),
+      // _C4x[389]
+      reale(-0x90a7089LL,32278LL<<36),reale(0xa68edd2LL,1667LL<<40),
+      reale(-0x959fbbcLL,33866LL<<36),reale(0x5c50c5dLL,16676LL<<36),
+      reale(-0x111e205LL,52094LL<<36),reale(-0x29da349LL,7192LL<<36),
+      reale(0x3f04f44LL,50610LL<<36),reale(-0x32e2a1dLL,58124LL<<36),
+      reale(0x195e094LL,34022LL<<36),reale(-0x5ff14aLL,368660LL<<32),
+      reale(0x23560571f1LL,0x82b96bc817465LL),
+      // _C4x[390]
+      reale(-0x3f4303bLL,1498LL<<40),reale(-0x2681d1aLL,396LL<<36),
+      reale(0x6ab31fdLL,38712LL<<36),reale(-0x70d7f80LL,46692LL<<36),
+      reale(0x494c416LL,3693LL<<40),reale(-0x1c90b87LL,51260LL<<36),
+      reale(0x491a22LL,39528LL<<36),reale(921311LL,17684LL<<36),
+      reale(-386622LL,321292LL<<32),reale(0x23560571f1LL,0x82b96bc817465LL),
+      // _C4x[391]
+      reale(0x8473679LL,22203LL<<36),reale(-0x41f6df2LL,36590LL<<36),
+      reale(0x319455LL,4577LL<<36),reale(0x11952deLL,41204LL<<36),
+      reale(-0x77a138LL,33927LL<<36),reale(-0x3e6f3aLL,4346LL<<36),
+      reale(0x4c9ddaLL,27565LL<<36),reale(-0x16b4d3LL,817202LL<<32),
+      reale(0x23560571f1LL,0x82b96bc817465LL),
+      // _C4x[392]
+      reale(-0x1ed3c84LL,2281LL<<40),reale(0x35b907LL,9656LL<<36),
+      reale(0x1305be4LL,518LL<<40),reale(-0x10f6c3fLL,28936LL<<36),
+      reale(0x60b1d2LL,3235LL<<40),reale(-589728LL,20056LL<<36),
+      reale(-125506LL,883240LL<<32),reale(0x23560571f1LL,0x82b96bc817465LL),
+      // _C4x[393]
+      reale(0x1864c0bLL,17516LL<<36),reale(-0x30f981LL,2543LL<<40),
+      reale(-0x45d925LL,41844LL<<36),reale(702466LL,12664LL<<36),
+      reale(0x18336fLL,1148LL<<36),reale(-651637LL,67464LL<<32),
+      reale(0x23560571f1LL,0x82b96bc817465LL),
+      // _C4x[394]
+      reale(0x103b40LL,54LL<<40),reale(-0x788224LL,3400LL<<36),
+      reale(0x46641dLL,699LL<<40),reale(-833937LL,64792LL<<36),
+      reale(-28055LL,293480LL<<32),reale(0x23560571f1LL,0x82b96bc817465LL),
+      // _C4x[395]
+      reale(-762946LL,34357LL<<36),reale(988791LL,174LL<<36),
+      reale(550009LL,38375LL<<36),reale(-343816LL,402198LL<<32),
+      reale(0x23560571f1LL,0x82b96bc817465LL),
+      // _C4x[396]
+      reale(435730LL,4904LL<<36),reale(-110988LL,50292LL<<36),
+      real(0x74977e2cLL<<32),reale(0x50c49ebb4LL,0xc98833f803533LL),
+      // _C4x[397]
+      reale(3628LL,36746LL<<36),reale(-4064LL,118540LL<<32),
+      reale(0xb89cd887LL,0x8a812bfedbe75LL),
+      // _C4x[398]
+      real(140LL<<32),real(0x29845c2bcb5c10d7LL),
+      // _C4x[399]
+      reale(0x29ae82LL,3225LL<<40),reale(-0x637e0cLL,22152LL<<36),
+      reale(0xd0b67eLL,3540LL<<40),reale(-0x1818a00LL,20984LL<<36),
+      reale(0x272bd05LL,3215LL<<40),reale(-0x37cef07LL,8808LL<<36),
+      reale(0x44ffda2LL,362LL<<40),reale(-0x48730b7LL,472LL<<36),
+      reale(0x3d5a819LL,3333LL<<40),reale(-0x2365723LL,27208LL<<36),
+      reale(0x983437LL,728420LL<<32),reale(0x253efed20cLL,0x6732257fe12e7LL),
+      // _C4x[400]
+      reale(0x3396d84LL,3458LL<<40),reale(-0x52718c9LL,223LL<<44),
+      reale(0x7187115LL,1054LL<<40),reale(-0x8586c9eLL,596LL<<40),
+      reale(0x841a240LL,2266LL<<40),reale(-0x6b26ec6LL,2040LL<<40),
+      reale(0x4440e43LL,2550LL<<40),reale(-0x1fbb2b3LL,2332LL<<40),
+      reale(0x97062bLL,1458LL<<40),reale(-0x153cdfLL,946936LL<<32),
+      reale(0x253efed20cLL,0x6732257fe12e7LL),
+      // _C4x[401]
+      reale(0x9efff2bLL,836LL<<40),reale(-0x87dbb7aLL,5784LL<<36),
+      reale(0x4dc0e0bLL,2787LL<<40),reale(-0x79bbaaLL,38472LL<<36),
+      reale(-0x2c273bcLL,546LL<<40),reale(0x3c7f924LL,6392LL<<36),
+      reale(-0x2f7f0bfLL,289LL<<40),reale(0x1772679LL,20648LL<<36),
+      reale(-0x587d9eLL,625076LL<<32),reale(0x253efed20cLL,0x6732257fe12e7LL),
+      // _C4x[402]
+      reale(-0x339b0deLL,140LL<<44),reale(0x6b363e4LL,70LL<<44),
+      reale(-0x6942777LL,220LL<<44),reale(0x415624aLL,212LL<<44),
+      reale(-0x185f56bLL,180LL<<44),reale(0x37bb9bLL,2LL<<44),
+      reale(962676LL,68LL<<44),reale(-355363LL,5350LL<<36),
+      reale(0x253efed20cLL,0x6732257fe12e7LL),
+      // _C4x[403]
+      reale(-0x34ca7fdLL,2962LL<<40),reale(-0x26758eLL,1979LL<<40),
+      reale(0x112edacLL,588LL<<40),reale(-0x61dc3eLL,3325LL<<40),
+      reale(-0x42baddLL,3974LL<<40),reale(0x490036LL,2079LL<<40),
+      reale(-0x1526d6LL,612696LL<<32),reale(0x253efed20cLL,0x6732257fe12e7LL),
+      // _C4x[404]
+      reale(-379106LL,1572LL<<40),reale(0x13507daLL,139LL<<44),
+      reale(-0xfa1074LL,1276LL<<40),reale(0x541723LL,2712LL<<40),
+      reale(-439602LL,1300LL<<40),reale(-122602LL,8791LL<<36),
+      reale(0x253efed20cLL,0x6732257fe12e7LL),
+      // _C4x[405]
+      reale(-0x14c3e1LL,3564LL<<40),reale(-0x44ac82LL,1429LL<<40),
+      reale(427896LL,598LL<<40),reale(0x17f87fLL,1191LL<<40),
+      reale(-614729LL,682264LL<<32),reale(0x253efed20cLL,0x6732257fe12e7LL),
+      // _C4x[406]
+      reale(-0x7616ccLL,188LL<<44),reale(0x3fe2d6LL,106LL<<44),
+      reale(-704449LL,252LL<<44),reale(-33250LL,43054LL<<36),
+      reale(0x253efed20cLL,0x6732257fe12e7LL),
+      // _C4x[407]
+      reale(876102LL,3999LL<<40),reale(573743LL,11608LL<<36),
+      reale(-328616LL,988684LL<<32),reale(0x253efed20cLL,0x6732257fe12e7LL),
+      // _C4x[408]
+      real(-0x25ce6eLL<<40),real(0x526878LL<<32),
+      reale(0x875e405LL,0x222cc7846d81LL),
+      // _C4x[409]
+      real(-278788LL<<32),reale(220556LL,0x6c98ea537e51fLL),
+      // _C4x[410]
+      reale(-0x705847LL,3097LL<<40),reale(0xe19d42LL,1096LL<<40),
+      reale(-0x191a1e2LL,4087LL<<40),reale(0x278fcc4LL,2166LL<<40),
+      reale(-0x36f262eLL,2453LL<<40),reale(0x42906c0LL,2084LL<<40),
+      reale(-0x44d01cbLL,2163LL<<40),reale(0x39a3603LL,1234LL<<40),
+      reale(-0x2109598LL,1041LL<<40),reale(0x8d95c8LL,42350LL<<36),
+      reale(0x2727f83227LL,0x4baadf37ab169LL),
+      // _C4x[411]
+      reale(-0x54763dcLL,14LL<<44),reale(0x707c506LL,2132LL<<40),
+      reale(-0x80a2268LL,3880LL<<40),reale(0x7c5638eLL,956LL<<40),
+      reale(-0x62fb0c0LL,199LL<<44),reale(0x3e22c17LL,932LL<<40),
+      reale(-0x1c93423LL,952LL<<40),reale(0x86f52cLL,780LL<<40),
+      reale(-0x12e0c6LL,38044LL<<36),reale(0x2727f83227LL,0x4baadf37ab169LL),
+      // _C4x[412]
+      reale(-0x7ac7862LL,180LL<<40),reale(0x40d94faLL,3848LL<<40),
+      reale(279122LL,3420LL<<40),reale(-0x2da1937LL,11LL<<44),
+      reale(0x39fa588LL,1028LL<<40),reale(-0x2c6cf46LL,2648LL<<40),
+      reale(0x15bf3c2LL,172LL<<40),reale(-0x51f049LL,1867LL<<40),
+      reale(0x2727f83227LL,0x4baadf37ab169LL),
+      // _C4x[413]
+      reale(0x6a2ccd4LL,1048LL<<40),reale(-0x61dbb7dLL,2340LL<<40),
+      reale(0x3a48569LL,49LL<<44),reale(-0x14d642cLL,636LL<<40),
+      reale(0x29d82eLL,2056LL<<40),reale(980372LL,2132LL<<40),
+      reale(-327160LL,31972LL<<36),reale(0x2727f83227LL,0x4baadf37ab169LL),
+      // _C4x[414]
+      reale(-0x68d732LL,138LL<<40),reale(0x107b55fLL,2248LL<<40),
+      reale(-0x4e5e68LL,3718LL<<40),reale(-0x45c3d0LL,3044LL<<40),
+      reale(0x458b55LL,3074LL<<40),reale(-0x13c16fLL,49292LL<<36),
+      reale(0x2727f83227LL,0x4baadf37ab169LL),
+      // _C4x[415]
+      reale(0x134c88bLL,149LL<<44),reale(-0xe5e8c7LL,3564LL<<40),
+      reale(0x493468LL,1320LL<<40),reale(-318600LL,2596LL<<40),
+      reale(-118862LL,50036LL<<36),reale(0x2727f83227LL,0x4baadf37ab169LL),
+      // _C4x[416]
+      reale(-0x4244faLL,1716LL<<40),reale(185313LL,2424LL<<40),
+      reale(0x17a0b9LL,1084LL<<40),reale(-580655LL,3319LL<<40),
+      reale(0x2727f83227LL,0x4baadf37ab169LL),
+      // _C4x[417]
+      reale(165149LL,3624LL<<40),reale(-25859LL,2212LL<<40),
+      real(-0x643c72cLL<<36),reale(0x1b3d32392LL,0x6776bbcac4a7fLL),
+      // _C4x[418]
+      reale(3670LL,3431LL<<40),real(-0x79ecc9eLL<<36),
+      reale(0x3e42bbf0LL,0x57ec63f8653c9LL),
+      // _C4x[419]
+      real(8LL<<36),reale(386445LL,0x44b61aebc827LL),
+      // _C4x[420]
+      reale(0xf14d2aLL,242LL<<44),reale(-0x19f7773LL,3276LL<<40),
+      reale(0x27cb065LL,3544LL<<40),reale(-0x36013f8LL,164LL<<40),
+      reale(0x4038d5eLL,57LL<<44),reale(-0x4175017LL,3324LL<<40),
+      reale(0x36480daLL,840LL<<40),reale(-0x1eed84dLL,1236LL<<40),
+      reale(0x842565LL,61372LL<<36),reale(0x2910f19242LL,0x302398ef74febLL),
+      // _C4x[421]
+      reale(0x24fee78LL,189LL<<44),reale(-0x293d038LL,6LL<<44),
+      reale(0x27065d3LL,151LL<<44),reale(-0x1e8a051LL,100LL<<44),
+      reale(0x12eacc3LL,97LL<<44),reale(-0x89d1e9LL,130LL<<44),
+      reale(0x28653fLL,187LL<<44),reale(-368525LL,32248LL<<36),
+      reale(0xdb0508616LL,0x100bdda526ff9LL),
+      // _C4x[422]
+      reale(0x357280fLL,1064LL<<40),reale(0x6c5b77LL,3036LL<<40),
+      reale(-0x2e797e5LL,7LL<<44),reale(0x3780793LL,644LL<<40),
+      reale(-0x29a3644LL,696LL<<40),reale(0x143c211LL,2476LL<<40),
+      reale(-0x4c24abLL,21380LL<<36),reale(0x2910f19242LL,0x302398ef74febLL),
+      // _C4x[423]
+      reale(-0x5ac25b1LL,218LL<<44),reale(0x3409bb9LL,56LL<<44),
+      reale(-0x11d875bLL,246LL<<44),reale(0x1eb2f9LL,60LL<<44),
+      reale(981374LL,50LL<<44),reale(-301722LL,3499LL<<40),
+      reale(0x2910f19242LL,0x302398ef74febLL),
+      // _C4x[424]
+      reale(0xf974f5LL,227LL<<44),reale(-0x3d0ee8LL,916LL<<40),
+      reale(-0x47cb0fLL,920LL<<40),reale(0x424279LL,3420LL<<40),
+      reale(-0x127f61LL,61332LL<<36),reale(0x2910f19242LL,0x302398ef74febLL),
+      // _C4x[425]
+      reale(-601428LL,33LL<<44),reale(181759LL,130LL<<44),
+      reale(-9603LL,251LL<<44),reale(-4984LL,43768LL<<36),
+      reale(0x1c915a22fLL,0x6644548ff9f4dLL),
+      // _C4x[426]
+      real(-0x4a7828LL<<40),reale(66113LL,892LL<<40),
+      reale(-23878LL,9012LL<<36),reale(0x1c915a22fLL,0x6644548ff9f4dLL),
+      // _C4x[427]
+      reale(-21807LL,8LL<<44),real(-0x6ae714LL<<40),
+      reale(0x1c915a22fLL,0x6644548ff9f4dLL),
+      // _C4x[428]
+      real(-0xf64d18LL<<36),reale(0x89fcdedLL,0x92d5d14b2b5b9LL),
+      // _C4x[429]
+      reale(-0x1ab3b1eLL,2856LL<<40),reale(0x27e3b0dLL,121LL<<44),
+      reale(-0x350196eLL,4088LL<<40),reale(0x3df9fb2LL,166LL<<44),
+      reale(-0x3e5ab9aLL,3272LL<<40),reale(0x333ca85LL,211LL<<44),
+      reale(-0x1d08c5dLL,408LL<<40),reale(0x7bb613LL,715LL<<40),
+      reale(0x2af9eaf25dLL,0x149c52a73ee6dLL),
+      // _C4x[430]
+      reale(-0x76d66c5LL,28LL<<44),reale(0x6e4c116LL,226LL<<44),
+      reale(-0x54f813bLL,104LL<<44),reale(0x33fe252LL,238LL<<44),
+      reale(-0x17759d5LL,180LL<<44),reale(0x6d4e33LL,250LL<<44),
+      reale(-992760LL,414LL<<40),reale(0x2af9eaf25dLL,0x149c52a73ee6dLL),
+      // _C4x[431]
+      reale(0xc22191LL,33LL<<44),reale(-0x2ed4670LL,52LL<<44),
+      reale(0x3519274LL,71LL<<44),reale(-0x271a5b7LL,26LL<<44),
+      reale(0x12e2308LL,109LL<<44),reale(-0x46fd3aLL,2422LL<<40),
+      reale(0x2af9eaf25dLL,0x149c52a73ee6dLL),
+      // _C4x[432]
+      reale(0x205af6LL,24LL<<44),reale(-697804LL,178LL<<44),
+      reale(61914LL,12LL<<44),reale(42203LL,230LL<<44),
+      reale(-12121LL,3010LL<<40),reale(0x1de5820ccLL,0x6511ed552f41bLL),
+      // _C4x[433]
+      reale(-130439LL,1688LL<<40),reale(-208063LL,209LL<<44),
+      reale(179942LL,3976LL<<40),reale(-49467LL,3929LL<<40),
+      reale(0x1de5820ccLL,0x6511ed552f41bLL),
+      // _C4x[434]
+      reale(158513LL,3LL<<48),reale(-6163LL,24LL<<44),reale(-4787LL,200LL<<40),
+      reale(0x1de5820ccLL,0x6511ed552f41bLL),
+      // _C4x[435]
+      reale(64733LL,244LL<<44),reale(-22614LL,152LL<<40),
+      reale(0x1de5820ccLL,0x6511ed552f41bLL),
+      // _C4x[436]
+      real(-1832LL<<40),reale(0x1ece7bLL,0x935060fc493cdLL),
+      // _C4x[437]
+      reale(0x1bbca3LL,3LL<<48),reale(-0x24271bLL,72LL<<44),
+      reale(0x299ea8LL,2LL<<48),reale(-0x2960b7LL,248LL<<44),
+      reale(0x21b719LL,1LL<<48),reale(-0x130279LL,168LL<<44),
+      reale(330919LL,3958LL<<40),reale(0x1f39a9f69LL,0x63df861a648e9LL),
+      // _C4x[438]
+      reale(0x48559cLL,2LL<<48),reale(-0x36ec9fLL,8LL<<48),
+      reale(0x213b34LL,14LL<<48),reale(-974430LL,12LL<<48),
+      reale(282071LL,10LL<<48),reale(-38932LL,980LL<<40),
+      reale(0x1f39a9f69LL,0x63df861a648e9LL),
+      // _C4x[439]
+      reale(-0x209048LL,2LL<<48),reale(0x23540bLL,248LL<<44),
+      reale(-0x19982fLL,1LL<<48),reale(805613LL,168LL<<44),
+      reale(-189150LL,1670LL<<40),reale(0x1f39a9f69LL,0x63df861a648e9LL),
+      // _C4x[440]
+      reale(-599195LL,8LL<<48),reale(41297LL,0LL),reale(41388LL,8LL<<48),
+      reale(-11219LL,62LL<<44),reale(0x1f39a9f69LL,0x63df861a648e9LL),
+      // _C4x[441]
+      reale(-209745LL,12LL<<48),reale(171585LL,6LL<<48),
+      reale(-46527LL,344LL<<40),reale(0x1f39a9f69LL,0x63df861a648e9LL),
+      // _C4x[442]
+      real(-10808LL<<48),real(-234789LL<<44),
+      reale(0x63ebb97bLL,0x7a5fe79ee0e95LL),
+      // _C4x[443]
+      reale(-4290LL,3928LL<<40),reale(0x63ebb97bLL,0x7a5fe79ee0e95LL),
+      // _C4x[444]
+      reale(-0x236a61LL,13LL<<48),reale(0x283148LL,4LL<<48),
+      reale(-0x2785ccLL,11LL<<48),reale(0x1ff458LL,2LL<<48),
+      reale(-0x11ef03LL,9LL<<48),reale(311454LL,22LL<<44),
+      reale(0x208dd1e06LL,0x62ad1edf99db7LL),
+      // _C4x[445]
+      reale(-0x110b1bLL,0LL),reale(668788LL,12LL<<48),reale(-296918LL,8LL<<48),
+      reale(85476LL,4LL<<48),reale(-11753LL,4LL<<44),
+      reale(0xad9f0a02LL,0x20e45f9fddf3dLL),
+      // _C4x[446]
+      reale(0x21c9baLL,0LL),reale(-0x182040LL,0LL),reale(755790LL,0LL),
+      reale(-177364LL,200LL<<44),reale(0x208dd1e06LL,0x62ad1edf99db7LL),
+      // _C4x[447]
+      reale(4928LL,8LL<<48),reale(8067LL,4LL<<48),reale(-2081LL,84LL<<44),
+      reale(0x682c3934LL,0x7a229fc651f8bLL),
+      // _C4x[448]
+      reale(32742LL,12LL<<48),reale(-8771LL,88LL<<44),
+      reale(0x682c3934LL,0x7a229fc651f8bLL),
+      // _C4x[449]
+      real(-5756LL<<44),reale(0x2abccf4LL,0x37a4fd885dffdLL),
+      // _C4x[450]
+      reale(508963LL,0LL),reale(-495427LL,4LL<<48),reale(397689LL,8LL<<48),
+      reale(-222239LL,12LL<<48),reale(58764LL,236LL<<44),
+      reale(0x6c6cb8edLL,0x79e557edc3081LL),
+      // _C4x[451]
+      reale(370617LL,0LL),reale(-163358LL,0LL),reale(46787LL,0LL),
+      reale(-6411LL,72LL<<44),reale(0x6c6cb8edLL,0x79e557edc3081LL),
+      // _C4x[452]
+      reale(-298604LL,8LL<<48),reale(142145LL,4LL<<48),reale(-33347LL,4LL<<44),
+      reale(0x6c6cb8edLL,0x79e557edc3081LL),
+      // _C4x[453]
+      real(602LL<<52),real(-2379LL<<48),reale(0x85721eaLL,0xe1fdf3124a145LL),
+      // _C4x[454]
+      real(-14828LL<<44),reale(0xc21a5bLL,0x2bd144a4925efLL),
+      // _C4x[455]
+      reale(-36491LL,8LL<<48),reale(29097LL,0LL),reale(-16196LL,8LL<<48),
+      reale(4273LL,13LL<<48),reale(0x8aadcf9LL,0x1d0ced8b7a293LL),
+      // _C4x[456]
+      reale(-11556LL,0LL),reale(3294LL,0LL),real(-7198LL<<48),
+      reale(0x8aadcf9LL,0x1d0ced8b7a293LL),
+      // _C4x[457]
+      reale(10305LL,0LL),reale(-2418LL,14LL<<48),
+      reale(0x8aadcf9LL,0x1d0ced8b7a293LL),
+      // _C4x[458]
+      real(-2LL<<48),reale(131359LL,0xe834f81ee20c1LL),
+      // _C4x[459]
+      reale(3080LL,0LL),real(-1708LL<<52),real(7198LL<<48),
+      reale(0xffd800LL,0xd0e6a80084b19LL),
+      // _C4x[460]
+      real(7LL<<56),real(-244LL<<48),reale(0x554800LL,0x45a238002c3b3LL),
+      // _C4x[461]
+      real(-4058LL<<48),reale(0xffd800LL,0xd0e6a80084b19LL),
+      // _C4x[462]
+      real(-232LL<<52),real(61LL<<52),reale(0x25e0cfLL,0x949f282aa1f11LL),
+      // _C4x[463]
+      real(-2LL<<52),reale(827461LL,0x318a62b8e0a5bLL),
+      // _C4x[464]
+      real(2LL<<52),reale(88602LL,0xec373d36a45dfLL),
+    };
+#else
+#error "Bad value for GEOGRAPHICLIB_GEODESICEXACT_ORDER"
+#endif
+    return coeff;
+  }
+
+} // namespace GeographicLib
diff --git a/src/GeodesicLine.cpp b/src/GeodesicLine.cpp
index 02775d6..6282d3e 100644
--- a/src/GeodesicLine.cpp
+++ b/src/GeodesicLine.cpp
@@ -34,8 +34,9 @@ namespace GeographicLib {
 
   GeodesicLine::GeodesicLine(const Geodesic& g,
                              real lat1, real lon1, real azi1,
-                             unsigned caps) throw()
-    : _a(g._a)
+                             unsigned caps)
+    : tiny_(g.tiny_)
+    , _a(g._a)
     , _f(g._f)
     , _b(g._b)
     , _c2(g._c2)
@@ -50,16 +51,16 @@ namespace GeographicLib {
     _lon1 = lon1;
     _azi1 = azi1;
     // alp1 is in [0, pi]
-    real alp1 = azi1 * Math::degree<real>();
+    real alp1 = azi1 * Math::degree();
     // Enforce sin(pi) == 0 and cos(pi/2) == 0.  Better to face the ensuing
     // problems directly than to skirt them.
     _salp1 =     azi1  == -180 ? 0 : sin(alp1);
     _calp1 = abs(azi1) ==   90 ? 0 : cos(alp1);
     real cbet1, sbet1, phi;
-    phi = lat1 * Math::degree<real>();
+    phi = lat1 * Math::degree();
     // Ensure cbet1 = +epsilon at poles
     sbet1 = _f1 * sin(phi);
-    cbet1 = abs(lat1) == 90 ? Geodesic::tiny_ : cos(phi);
+    cbet1 = abs(lat1) == 90 ? tiny_ : cos(phi);
     Geodesic::SinCosNorm(sbet1, cbet1);
     _dn1 = sqrt(1 + g._ep2 * Math::sq(sbet1));
 
@@ -126,17 +127,17 @@ namespace GeographicLib {
                                        real& s12, real& m12,
                                        real& M12, real& M21,
                                        real& S12)
-  const throw() {
+  const {
     outmask &= _caps & OUT_ALL;
     if (!( Init() && (arcmode || (_caps & DISTANCE_IN & OUT_ALL)) ))
       // Uninitialized or impossible distance calculation requested
-      return Math::NaN<real>();
+      return Math::NaN();
 
     // Avoid warning about uninitialized B12.
     real sig12, ssig12, csig12, B12 = 0, AB1 = 0;
     if (arcmode) {
       // Interpret s12_a12 as spherical arc length
-      sig12 = s12_a12 * Math::degree<real>();
+      sig12 = s12_a12 * Math::degree();
       real s12a = abs(s12_a12);
       s12a -= 180 * floor(s12a / 180);
       ssig12 = s12a ==  0 ? 0 : sin(sig12);
@@ -204,7 +205,7 @@ namespace GeographicLib {
     cbet2 = Math::hypot(_salp0, _calp0 * csig2);
     if (cbet2 == 0)
       // I.e., salp0 = 0, csig2 = 0.  Break the degeneracy in this case
-      cbet2 = csig2 = Geodesic::tiny_;
+      cbet2 = csig2 = tiny_;
     // tan(omg2) = sin(alp0) * tan(sig2)
     somg2 = _salp0 * ssig2; comg2 = csig2;  // No need to normalize
     // tan(alp0) = cos(sig2)*tan(alp2)
@@ -220,7 +221,7 @@ namespace GeographicLib {
       lam12 = omg12 + _A3c *
         ( sig12 + (Geodesic::SinCosSeries(true, ssig2, csig2, _C3a, nC3_-1)
                    - _B31));
-      lon12 = lam12 / Math::degree<real>();
+      lon12 = lam12 / Math::degree();
       // Use Math::AngNormalize2 because longitude might have wrapped multiple
       // times.
       lon12 = Math::AngNormalize2(lon12);
@@ -228,11 +229,11 @@ namespace GeographicLib {
     }
 
     if (outmask & LATITUDE)
-      lat2 = atan2(sbet2, _f1 * cbet2) / Math::degree<real>();
+      lat2 = atan2(sbet2, _f1 * cbet2) / Math::degree();
 
     if (outmask & AZIMUTH)
       // minus signs give range [-180, 180). 0- converts -0 to +0.
-      azi2 = 0 - atan2(-salp2, calp2) / Math::degree<real>();
+      azi2 = 0 - atan2(-salp2, calp2) / Math::degree();
 
     if (outmask & (REDUCEDLENGTH | GEODESICSCALE)) {
       real
@@ -263,7 +264,7 @@ namespace GeographicLib {
         // salp12 = -0 and alp12 = -180.  However this depends on the sign being
         // attached to 0 correctly.  The following ensures the correct behavior.
         if (salp12 == 0 && calp12 < 0) {
-          salp12 = Geodesic::tiny_ * _calp1;
+          salp12 = tiny_ * _calp1;
           calp12 = -1;
         }
       } else {
@@ -283,7 +284,7 @@ namespace GeographicLib {
       S12 = _c2 * atan2(salp12, calp12) + _A4 * (B42 - _B41);
     }
 
-    return arcmode ? s12_a12 : sig12 / Math::degree<real>();
+    return arcmode ? s12_a12 : sig12 / Math::degree();
   }
 
 } // namespace GeographicLib
diff --git a/src/GeodesicLineExact.cpp b/src/GeodesicLineExact.cpp
index 9dde3b8..09d783e 100644
--- a/src/GeodesicLineExact.cpp
+++ b/src/GeodesicLineExact.cpp
@@ -34,8 +34,9 @@ namespace GeographicLib {
 
   GeodesicLineExact::GeodesicLineExact(const GeodesicExact& g,
                                        real lat1, real lon1, real azi1,
-                                       unsigned caps) throw()
-    : _a(g._a)
+                                       unsigned caps)
+    : tiny_(g.tiny_)
+    , _a(g._a)
     , _f(g._f)
     , _b(g._b)
     , _c2(g._c2)
@@ -51,16 +52,16 @@ namespace GeographicLib {
     _lon1 = lon1;
     _azi1 = azi1;
     // alp1 is in [0, pi]
-    real alp1 = azi1 * Math::degree<real>();
+    real alp1 = azi1 * Math::degree();
     // Enforce sin(pi) == 0 and cos(pi/2) == 0.  Better to face the ensuing
     // problems directly than to skirt them.
     _salp1 =     azi1  == -180 ? 0 : sin(alp1);
     _calp1 = abs(azi1) ==   90 ? 0 : cos(alp1);
     real cbet1, sbet1, phi;
-    phi = lat1 * Math::degree<real>();
+    phi = lat1 * Math::degree();
     // Ensure cbet1 = +epsilon at poles
     sbet1 = _f1 * sin(phi);
-    cbet1 = abs(lat1) == 90 ? GeodesicExact::tiny_ : cos(phi);
+    cbet1 = abs(lat1) == 90 ? tiny_ : cos(phi);
     GeodesicExact::SinCosNorm(sbet1, cbet1);
     _dn1 = (_f >= 0 ? sqrt(1 + g._ep2 * Math::sq(sbet1)) :
             sqrt(1 - _e2 * Math::sq(cbet1)) / _f1);
@@ -91,7 +92,7 @@ namespace GeographicLib {
     _E.Reset(-_k2, -g._ep2, 1 + _k2, 1 + g._ep2);
 
     if (_caps & CAP_E) {
-      _E0 = _E.E() / (Math::pi<real>() / 2);
+      _E0 = _E.E() / (Math::pi() / 2);
       _E1 = _E.deltaE(_ssig1, _csig1, _dn1);
       real s = sin(_E1), c = cos(_E1);
       // tau1 = sig1 + B11
@@ -102,12 +103,12 @@ namespace GeographicLib {
     }
 
     if (_caps & CAP_D) {
-      _D0 = _E.D() / (Math::pi<real>() / 2);
+      _D0 = _E.D() / (Math::pi() / 2);
       _D1 = _E.deltaD(_ssig1, _csig1, _dn1);
     }
 
     if (_caps & CAP_H) {
-      _H0 = _E.H() / (Math::pi<real>() / 2);
+      _H0 = _E.H() / (Math::pi() / 2);
       _H1 = _E.deltaH(_ssig1, _csig1, _dn1);
     }
 
@@ -126,17 +127,17 @@ namespace GeographicLib {
                                             real& s12, real& m12,
                                             real& M12, real& M21,
                                             real& S12)
-  const throw() {
+  const {
     outmask &= _caps & OUT_ALL;
     if (!( Init() && (arcmode || (_caps & DISTANCE_IN & OUT_ALL)) ))
       // Uninitialized or impossible distance calculation requested
-      return Math::NaN<real>();
+      return Math::NaN();
 
     // Avoid warning about uninitialized B12.
     real sig12, ssig12, csig12, E2 = 0, AB1 = 0;
     if (arcmode) {
       // Interpret s12_a12 as spherical arc length
-      sig12 = s12_a12 * Math::degree<real>();
+      sig12 = s12_a12 * Math::degree();
       real s12a = abs(s12_a12);
       s12a -= 180 * floor(s12a / 180);
       ssig12 = s12a ==  0 ? 0 : sin(sig12);
@@ -172,7 +173,7 @@ namespace GeographicLib {
     cbet2 = Math::hypot(_salp0, _calp0 * csig2);
     if (cbet2 == 0)
       // I.e., salp0 = 0, csig2 = 0.  Break the degeneracy in this case
-      cbet2 = csig2 = GeodesicExact::tiny_;
+      cbet2 = csig2 = tiny_;
     // tan(alp0) = cos(sig2)*tan(alp2)
     salp2 = _salp0; calp2 = _calp0 * csig2; // No need to normalize
 
@@ -186,7 +187,7 @@ namespace GeographicLib {
       lam12 = atan2(somg2 * _cchi1 - cchi2 * _somg1,
                     cchi2 * _cchi1 + somg2 * _somg1) -
         _e2/_f1 * _salp0 * _H0 * (sig12 + _E.deltaH(ssig2, csig2, dn2) - _H1 );
-      lon12 = lam12 / Math::degree<real>();
+      lon12 = lam12 / Math::degree();
       // Use Math::AngNormalize2 because longitude might have wrapped multiple
       // times.
       lon12 = Math::AngNormalize2(lon12);
@@ -194,11 +195,11 @@ namespace GeographicLib {
     }
 
     if (outmask & LATITUDE)
-      lat2 = atan2(sbet2, _f1 * cbet2) / Math::degree<real>();
+      lat2 = atan2(sbet2, _f1 * cbet2) / Math::degree();
 
     if (outmask & AZIMUTH)
       // minus signs give range [-180, 180). 0- converts -0 to +0.
-      azi2 = 0 - atan2(-salp2, calp2) / Math::degree<real>();
+      azi2 = 0 - atan2(-salp2, calp2) / Math::degree();
 
     if (outmask & (REDUCEDLENGTH | GEODESICSCALE)) {
       real J12 = _k2 * _D0 * (sig12 + _E.deltaD(ssig2, csig2, dn2) - _D1);
@@ -226,7 +227,7 @@ namespace GeographicLib {
         // salp12 = -0 and alp12 = -180.  However this depends on the sign being
         // attached to 0 correctly.  The following ensures the correct behavior.
         if (salp12 == 0 && calp12 < 0) {
-          salp12 = GeodesicExact::tiny_ * _calp1;
+          salp12 = tiny_ * _calp1;
           calp12 = -1;
         }
       } else {
@@ -246,7 +247,7 @@ namespace GeographicLib {
       S12 = _c2 * atan2(salp12, calp12) + _A4 * (B42 - _B41);
     }
 
-    return arcmode ? s12_a12 : sig12 / Math::degree<real>();
+    return arcmode ? s12_a12 : sig12 / Math::degree();
   }
 
 } // namespace GeographicLib
diff --git a/src/Geographic.pro b/src/GeographicLib.pro
similarity index 97%
rename from src/Geographic.pro
rename to src/GeographicLib.pro
index 559a8e3..1f3d036 100644
--- a/src/Geographic.pro
+++ b/src/GeographicLib.pro
@@ -30,6 +30,7 @@ SOURCES += NormalGravity.cpp
 SOURCES += OSGB.cpp
 SOURCES += PolarStereographic.cpp
 SOURCES += PolygonArea.cpp
+SOURCES += Rhumb.cpp
 SOURCES += SphericalEngine.cpp
 SOURCES += TransverseMercator.cpp
 SOURCES += TransverseMercatorExact.cpp
@@ -64,6 +65,7 @@ HEADERS += $$INCLUDEDIR/NormalGravity.hpp
 HEADERS += $$INCLUDEDIR/OSGB.hpp
 HEADERS += $$INCLUDEDIR/PolarStereographic.hpp
 HEADERS += $$INCLUDEDIR/PolygonArea.hpp
+HEADERS += $$INCLUDEDIR/Rhumb.hpp
 HEADERS += $$INCLUDEDIR/SphericalEngine.hpp
 HEADERS += $$INCLUDEDIR/SphericalHarmonic.hpp
 HEADERS += $$INCLUDEDIR/SphericalHarmonic1.hpp
diff --git a/src/Geohash.cpp b/src/Geohash.cpp
index 8716d12..00942aa 100644
--- a/src/Geohash.cpp
+++ b/src/Geohash.cpp
@@ -16,9 +16,6 @@ namespace GeographicLib {
 
   const int Geohash::decprec_[] = {-2, -1, 0, 0, 1, 2, 3, 3, 4, 5,
                                    6, 6, 7, 8, 9, 9, 10, 11, 12};
-  const Math::real Geohash::loneps_ = 180 * std::pow(0.5, 45);
-  const Math::real Geohash::lateps_ = 90 * std::pow(0.5, 45);
-  const Math::real Geohash::shift_ = std::pow(2.0, 45);
   const string Geohash::lcdigits_ = "0123456789bcdefghjkmnpqrstuvwxyz";
   const string Geohash::ucdigits_ = "0123456789BCDEFGHJKMNPQRSTUVWXYZ";
 
@@ -33,14 +30,14 @@ namespace GeographicLib {
       geohash = "nan";
       return;
     }
-    if (lat == 90) lat -= lateps_ / 2;
+    if (lat == 90) lat -= lateps() / 2;
     lon = Math::AngNormalize(lon); // lon in [-180,180)
-    // lon/loneps_ in [-2^45,2^45); lon/eps + shift_ in [0,2^46)
+    // lon/loneps in [-2^45,2^45); lon/loneps + shift in [0,2^46)
     // similarly for lat
     len = max(0, min(int(maxlen_), len));
     unsigned long long
-      ulon = (unsigned long long)(floor(lon/loneps_) + shift_),
-      ulat = (unsigned long long)(floor(lat/lateps_) + shift_);
+      ulon = (unsigned long long)(floor(lon/loneps()) + shift()),
+      ulat = (unsigned long long)(floor(lat/lateps()) + shift());
     char geohash1[maxlen_];
     unsigned byte = 0;
     for (unsigned i = 0; i < 5 * unsigned(len);) {
@@ -68,7 +65,7 @@ namespace GeographicLib {
         toupper(geohash[0]) == 'N' &&
         toupper(geohash[1]) == 'A' &&
         toupper(geohash[2]) == 'N') {
-      lat = lon = Math::NaN<real>();
+      lat = lon = Math::NaN();
       return;
     }
     unsigned long long ulon = 0, ulat = 0;
@@ -92,8 +89,8 @@ namespace GeographicLib {
     int s = 5 * (maxlen_ - len);
     ulon <<=     (s / 2);
     ulat <<= s - (s / 2);
-    lon = ulon * loneps_ - 180;
-    lat = ulat * lateps_ - 90;
+    lon = (unsigned long)(ulon) * loneps() - 180;
+    lat = (unsigned long)(ulat) * lateps() - 90;
   }
 
 } // namespace GeographicLib
diff --git a/src/Geoid.cpp b/src/Geoid.cpp
index 2d2c249..a7c8564 100644
--- a/src/Geoid.cpp
+++ b/src/Geoid.cpp
@@ -13,15 +13,14 @@
 
 #if !defined(GEOGRAPHICLIB_DATA)
 #  if defined(_WIN32)
-#    define GEOGRAPHICLIB_DATA \
-  "C:/Documents and Settings/All Users/Application Data/GeographicLib"
+#    define GEOGRAPHICLIB_DATA "C:/ProgramData/GeographicLib"
 #  else
 #    define GEOGRAPHICLIB_DATA "/usr/local/share/GeographicLib"
 #  endif
 #endif
 
-#if !defined(GEOID_DEFAULT_NAME)
-#  define GEOID_DEFAULT_NAME "egm96-5"
+#if !defined(GEOGRAPHICLIB_GEOID_DEFAULT_NAME)
+#  define GEOGRAPHICLIB_GEOID_DEFAULT_NAME "egm96-5"
 #endif
 
 #if defined(_MSC_VER)
@@ -97,8 +96,8 @@ namespace GeographicLib {
   // genmatrix(yc,1,length(warr)).abs(c3).genmatrix(yd,length(pows),1)),2)$
   // c3:c0*c3$
 
-  const Math::real Geoid::c0_ = 240; // Common denominator
-  const Math::real Geoid::c3_[stencilsize_ * nterms_] = {
+  const int Geoid::c0_ = 240; // Common denominator
+  const int Geoid::c3_[stencilsize_ * nterms_] = {
       9, -18, -88,    0,  96,   90,   0,   0, -60, -20,
      -9,  18,   8,    0, -96,   30,   0,   0,  60, -20,
       9, -88, -18,   90,  96,    0, -20, -60,   0,   0,
@@ -147,8 +146,8 @@ namespace GeographicLib {
   //     genmatrix(yc,1,length(warr)).abs(c3n).genmatrix(yd,length(pows),1)),2)$
   // c3n:c0n*c3n$
 
-  const Math::real Geoid::c0n_ = 372; // Common denominator
-  const Math::real Geoid::c3n_[stencilsize_ * nterms_] = {
+  const int Geoid::c0n_ = 372; // Common denominator
+  const int Geoid::c3n_[stencilsize_ * nterms_] = {
       0, 0, -131, 0,  138,  144, 0,   0, -102, -31,
       0, 0,    7, 0, -138,   42, 0,   0,  102, -31,
      62, 0,  -31, 0,    0,  -62, 0,   0,    0,  31,
@@ -181,8 +180,8 @@ namespace GeographicLib {
   //     genmatrix(yc,1,length(warr)).abs(c3s).genmatrix(yd,length(pows),1)),2)$
   // c3s:c0s*c3s$
 
-  const Math::real Geoid::c0s_ = 372; // Common denominator
-  const Math::real Geoid::c3s_[stencilsize_ * nterms_] = {
+  const int Geoid::c0s_ = 372; // Common denominator
+  const int Geoid::c3s_[stencilsize_ * nterms_] = {
      18,  -36, -122,   0,  120,  135, 0,   0,  -84, -31,
     -18,   36,   -2,   0, -120,   51, 0,   0,   84, -31,
      36, -165,  -27,  93,  147,   -9, 0, -93,   18,   0,
@@ -202,13 +201,14 @@ namespace GeographicLib {
     : _name(name)
     , _dir(path)
     , _cubic(cubic)
-    , _a( Constants::WGS84_a<real>() )
-    , _e2( (2 - Constants::WGS84_f<real>()) * Constants::WGS84_f<real>() )
-    , _degree( Math::degree<real>() )
+    , _a( Constants::WGS84_a() )
+    , _e2( (2 - Constants::WGS84_f()) * Constants::WGS84_f() )
+    , _degree( Math::degree() )
     , _eps( sqrt(numeric_limits<real>::epsilon()) )
     , _threadsafe(false)        // Set after cache is read
   {
-    STATIC_ASSERT(sizeof(pixel_t) == pixel_size_, "pixel_t has the wrong size");
+    GEOGRAPHICLIB_STATIC_ASSERT(sizeof(pixel_t) == pixel_size_,
+                                "pixel_t has the wrong size");
     if (_dir.empty())
       _dir = DefaultGeoidPath();
     _filename = _dir + "/" + _name + (pixel_size_ != 4 ? ".pgm" : ".pgm4");
@@ -305,8 +305,8 @@ namespace GeographicLib {
   Math::real Geoid::height(real lat, real lon, bool gradp,
                            real& gradn, real& grade) const {
     if (Math::isnan(lat) || Math::isnan(lon)) {
-      if (gradp) gradn = grade = Math::NaN<real>();
-      return Math::NaN<real>();
+      if (gradp) gradn = grade = Math::NaN();
+      return Math::NaN();
     }
     lon = Math::AngNormalize(lon);
     real
@@ -344,8 +344,8 @@ namespace GeographicLib {
         v[k++] = rawval(ix    , iy + 2);
         v[k++] = rawval(ix + 1, iy + 2);
 
-        const real* c3x = iy == 0 ? c3n_ : (iy == _height - 2 ? c3s_ : c3_);
-        real c0x = iy == 0 ? c0n_ : (iy == _height - 2 ? c0s_ : c0_);
+        const int* c3x = iy == 0 ? c3n_ : (iy == _height - 2 ? c3s_ : c3_);
+        int c0x = iy == 0 ? c0n_ : (iy == _height - 2 ? c0s_ : c0_);
         for (unsigned i = 0; i < nterms_; ++i) {
           t[i] = 0;
           for (unsigned j = 0; j < stencilsize_; ++j)
@@ -425,7 +425,7 @@ namespace GeographicLib {
     }
   }
 
-  void Geoid::CacheClear() const throw() {
+  void Geoid::CacheClear() const {
     if (!_threadsafe) {
       _cache = false;
       try {
@@ -519,23 +519,23 @@ namespace GeographicLib {
 
   std::string Geoid::DefaultGeoidPath() {
     string path;
-    char* geoidpath = getenv("GEOID_PATH");
+    char* geoidpath = getenv("GEOGRAPHICLIB_GEOID_PATH");
     if (geoidpath)
       path = string(geoidpath);
-    if (path.length())
+    if (!path.empty())
       return path;
     char* datapath = getenv("GEOGRAPHICLIB_DATA");
     if (datapath)
       path = string(datapath);
-    return (path.length() ? path : string(GEOGRAPHICLIB_DATA)) + "/geoids";
+    return (!path.empty() ? path : string(GEOGRAPHICLIB_DATA)) + "/geoids";
   }
 
   std::string Geoid::DefaultGeoidName() {
     string name;
-    char* geoidname = getenv("GEOID_NAME");
+    char* geoidname = getenv("GEOGRAPHICLIB_GEOID_NAME");
     if (geoidname)
       name = string(geoidname);
-    return name.length() ? name : string(GEOID_DEFAULT_NAME);
+    return !name.empty() ? name : string(GEOGRAPHICLIB_GEOID_DEFAULT_NAME);
   }
 
 } // namespace GeographicLib
diff --git a/src/Gnomonic.cpp b/src/Gnomonic.cpp
index 762731b..7f22823 100644
--- a/src/Gnomonic.cpp
+++ b/src/Gnomonic.cpp
@@ -18,12 +18,17 @@ namespace GeographicLib {
 
   using namespace std;
 
-  const Math::real Gnomonic::eps0_ = numeric_limits<real>::epsilon();
-  const Math::real Gnomonic::eps_ = real(0.01) * sqrt(eps0_);
+  Gnomonic::Gnomonic(const Geodesic& earth)
+    : eps0_(numeric_limits<real>::epsilon())
+    , eps_(real(0.01) * sqrt(eps0_))
+    , _earth(earth)
+    , _a(_earth.MajorRadius())
+    , _f(_earth.Flattening())
+  {}
 
   void Gnomonic::Forward(real lat0, real lon0, real lat, real lon,
                          real& x, real& y, real& azi, real& rk)
-    const throw() {
+    const {
     real azi0, m, M, t;
     _earth.GenInverse(lat0, lon0, lat, lon,
                       Geodesic::AZIMUTH | Geodesic::REDUCEDLENGTH |
@@ -31,10 +36,10 @@ namespace GeographicLib {
                       t, azi0, azi, m, M, t, t);
     rk = M;
     if (M <= 0)
-      x = y = Math::NaN<real>();
+      x = y = Math::NaN();
     else {
       real rho = m/M;
-      azi0 *= Math::degree<real>();
+      azi0 *= Math::degree();
       x = rho * sin(azi0);
       y = rho * cos(azi0);
     }
@@ -42,9 +47,9 @@ namespace GeographicLib {
 
   void Gnomonic::Reverse(real lat0, real lon0, real x, real y,
                          real& lat, real& lon, real& azi, real& rk)
-    const throw() {
+    const {
     real
-      azi0 = atan2(x, y) / Math::degree<real>(),
+      azi0 = atan2(x, y) / Math::degree(),
       rho = Math::hypot(x, y),
       s = _a * atan(rho/_a);
     bool little = rho <= _a;
@@ -73,7 +78,7 @@ namespace GeographicLib {
     if (trip) {
       lat = lat1; lon = lon1; azi = azi1; rk = M;
     } else
-      lat = lon = azi = rk = Math::NaN<real>();
+      lat = lon = azi = rk = Math::NaN();
     return;
   }
 
diff --git a/src/GravityCircle.cpp b/src/GravityCircle.cpp
index ddc5581..4ba32d0 100644
--- a/src/GravityCircle.cpp
+++ b/src/GravityCircle.cpp
@@ -17,7 +17,7 @@ namespace GeographicLib {
   using namespace std;
 
   Math::real GravityCircle::Gravity(real lon, real& gx, real& gy, real& gz)
-    const throw() {
+    const {
     real clam, slam, M[Geocentric::dim2_];
     CircularEngine::cossin(lon, clam, slam);
     real Wres = W(clam, slam, gx, gy, gz);
@@ -27,7 +27,7 @@ namespace GeographicLib {
   }
 
   Math::real GravityCircle::Disturbance(real lon, real& deltax, real& deltay,
-                                        real& deltaz) const throw() {
+                                        real& deltaz) const {
     real clam, slam, M[Geocentric::dim2_];
     CircularEngine::cossin(lon, clam, slam);
     real Tres = InternalT(clam, slam, deltax, deltay, deltaz, true, true);
@@ -36,9 +36,9 @@ namespace GeographicLib {
     return Tres;
   }
 
-  Math::real GravityCircle::GeoidHeight(real lon) const throw() {
+  Math::real GravityCircle::GeoidHeight(real lon) const {
     if ((_caps & GEOID_HEIGHT) != GEOID_HEIGHT)
-      return Math::NaN<real>();
+      return Math::NaN();
     real clam, slam, dummy;
     CircularEngine::cossin(lon, clam, slam);
     real T = InternalT(clam, slam, dummy, dummy, dummy, false, false);
@@ -48,9 +48,9 @@ namespace GeographicLib {
 
   void GravityCircle::SphericalAnomaly(real lon,
                                        real& Dg01, real& xi, real& eta)
-    const throw() {
+    const {
     if ((_caps & SPHERICAL_ANOMALY) != SPHERICAL_ANOMALY) {
-      Dg01 = xi = eta = Math::NaN<real>();
+      Dg01 = xi = eta = Math::NaN();
       return;
     }
     real clam, slam;
@@ -64,12 +64,12 @@ namespace GeographicLib {
     Geocentric::Unrotate(MC, deltax, deltay, deltaz, deltax, deltay, deltaz);
     // H+M, Eq 2-151c
     Dg01 = - deltaz - 2 * T * _invR;
-    xi  = -(deltay/_gamma) / Math::degree<real>();
-    eta = -(deltax/_gamma) / Math::degree<real>();
+    xi  = -(deltay/_gamma) / Math::degree();
+    eta = -(deltax/_gamma) / Math::degree();
   }
 
   Math::real GravityCircle::W(real clam, real slam,
-                              real& gX, real& gY, real& gZ) const throw() {
+                              real& gX, real& gY, real& gZ) const {
     real Wres = V(clam, slam, gX, gY, gZ) + _frot * _Px / 2;
     gX += _frot * clam;
     gY += _frot * slam;
@@ -78,10 +78,10 @@ namespace GeographicLib {
 
   Math::real GravityCircle::V(real clam, real slam,
                               real& GX, real& GY, real& GZ)
-    const throw() {
+    const {
     if ((_caps & GRAVITY) != GRAVITY) {
-      GX = GY = GZ = Math::NaN<real>();
-      return Math::NaN<real>();
+      GX = GY = GZ = Math::NaN();
+      return Math::NaN();
     }
     real
       Vres = _gravitational(clam, slam, GX, GY, GZ),
@@ -95,15 +95,15 @@ namespace GeographicLib {
 
   Math::real GravityCircle::InternalT(real clam, real slam,
                                       real& deltaX, real& deltaY, real& deltaZ,
-                                      bool gradp, bool correct) const throw() {
+                                      bool gradp, bool correct) const {
     if (gradp) {
       if ((_caps & DISTURBANCE) != DISTURBANCE) {
-        deltaX = deltaY = deltaZ = Math::NaN<real>();
-        return Math::NaN<real>();
+        deltaX = deltaY = deltaZ = Math::NaN();
+        return Math::NaN();
       }
     } else {
       if ((_caps & DISTURBING_POTENTIAL) != DISTURBING_POTENTIAL)
-        return Math::NaN<real>();
+        return Math::NaN();
     }
     if (_dzonal0 == 0)
       correct = false;
diff --git a/src/GravityModel.cpp b/src/GravityModel.cpp
index 9081b5e..eed7724 100644
--- a/src/GravityModel.cpp
+++ b/src/GravityModel.cpp
@@ -15,15 +15,14 @@
 
 #if !defined(GEOGRAPHICLIB_DATA)
 #  if defined(_WIN32)
-#    define GEOGRAPHICLIB_DATA \
-  "C:/Documents and Settings/All Users/Application Data/GeographicLib"
+#    define GEOGRAPHICLIB_DATA "C:/ProgramData/GeographicLib"
 #  else
 #    define GEOGRAPHICLIB_DATA "/usr/local/share/GeographicLib"
 #  endif
 #endif
 
-#if !defined(GRAVITY_DEFAULT_NAME)
-#  define GRAVITY_DEFAULT_NAME "egm96"
+#if !defined(GEOGRAPHICLIB_GRAVITY_DEFAULT_NAME)
+#  define GEOGRAPHICLIB_GRAVITY_DEFAULT_NAME "egm96"
 #endif
 
 #if defined(_MSC_VER)
@@ -40,8 +39,8 @@ namespace GeographicLib {
     , _dir(path)
     , _description("NONE")
     , _date("UNKNOWN")
-    , _amodel(Math::NaN<real>())
-    , _GMmodel(Math::NaN<real>())
+    , _amodel(Math::NaN())
+    , _GMmodel(Math::NaN())
     , _zeta0(0)
     , _corrmult(1)
     , _norm(SphericalHarmonic::FULL)
@@ -132,7 +131,7 @@ namespace GeographicLib {
     if (version != "1")
       throw GeographicErr("Unknown version in " + _filename + ": " + version);
     string key, val;
-    real a = Math::NaN<real>(), GM = a, omega = a, f = a, J2 = a;
+    real a = Math::NaN(), GM = a, omega = a, f = a, J2 = a;
     while (getline(metastr, line)) {
       if (!Utility::ParseLine(line, key, val))
         continue;
@@ -193,7 +192,7 @@ namespace GeographicLib {
 
   Math::real GravityModel::InternalT(real X, real Y, real Z,
                                      real& deltaX, real& deltaY, real& deltaZ,
-                                     bool gradp, bool correct) const throw() {
+                                     bool gradp, bool correct) const {
     // If correct, then produce the correct T = W - U.  Otherwise, neglect the
     // n = 0 term (which is proportial to the difference in the model and
     // reference values of GM).
@@ -222,7 +221,7 @@ namespace GeographicLib {
   }
 
   Math::real GravityModel::V(real X, real Y, real Z,
-                             real& GX, real& GY, real& GZ) const throw() {
+                             real& GX, real& GY, real& GZ) const {
     real
       Vres = _gravitational(X, Y, Z, GX, GY, GZ),
       f = _GMmodel / _amodel;
@@ -234,7 +233,7 @@ namespace GeographicLib {
   }
 
   Math::real GravityModel::W(real X, real Y, real Z,
-                             real& gX, real& gY, real& gZ) const throw() {
+                             real& gX, real& gY, real& gZ) const {
     real fX, fY,
       Wres = V(X, Y, Z, gX, gY, gZ) + _earth.Phi(X, Y, fX, fY);
     gX += fX;
@@ -244,7 +243,7 @@ namespace GeographicLib {
 
   void GravityModel::SphericalAnomaly(real lat, real lon, real h,
                                       real& Dg01, real& xi, real& eta)
-    const throw() {
+    const {
     real X, Y, Z, M[Geocentric::dim2_];
     _earth.Earth().IntForward(lat, lon, h, X, Y, Z, M);
     real
@@ -265,11 +264,11 @@ namespace GeographicLib {
     real gammaX, gammaY, gammaZ;
     _earth.U(X, Y, Z, gammaX, gammaY, gammaZ);
     real gamma = Math::hypot( Math::hypot(gammaX, gammaY), gammaZ);
-    xi  = -(deltay/gamma) / Math::degree<real>();
-    eta = -(deltax/gamma) / Math::degree<real>();
+    xi  = -(deltay/gamma) / Math::degree();
+    eta = -(deltax/gamma) / Math::degree();
   }
 
-  Math::real GravityModel::GeoidHeight(real lat, real lon) const throw()
+  Math::real GravityModel::GeoidHeight(real lat, real lon) const
   {
     real X, Y, Z;
     _earth.Earth().IntForward(lat, lon, 0, X, Y, Z, NULL);
@@ -284,7 +283,7 @@ namespace GeographicLib {
   }
 
   Math::real GravityModel::Gravity(real lat, real lon, real h,
-                                   real& gx, real& gy, real& gz) const throw() {
+                                   real& gx, real& gy, real& gz) const {
     real X, Y, Z, M[Geocentric::dim2_];
     _earth.Earth().IntForward(lat, lon, h, X, Y, Z, M);
     real Wres = W(X, Y, Z, gx, gy, gz);
@@ -293,7 +292,7 @@ namespace GeographicLib {
   }
   Math::real GravityModel::Disturbance(real lat, real lon, real h,
                                        real& deltax, real& deltay, real& deltaz)
-    const throw() {
+    const {
     real X, Y, Z, M[Geocentric::dim2_];
     _earth.Earth().IntForward(lat, lon, h, X, Y, Z, M);
     real Tres = InternalT(X, Y, Z, deltax, deltay, deltaz, true, true);
@@ -311,13 +310,13 @@ namespace GeographicLib {
     real
       invR = 1 / Math::hypot(X, Z),
       gamma0 = (caps & CAP_GAMMA0 ?_earth.SurfaceGravity(lat)
-                : Math::NaN<real>()),
+                : Math::NaN()),
       fx, fy, fz, gamma;
     if (caps & CAP_GAMMA) {
       _earth.U(X, Y, Z, fx, fy, fz); // fy = 0
       gamma = Math::hypot(fx, fz);
     } else
-      gamma = Math::NaN<real>();
+      gamma = Math::NaN();
     _earth.Phi(X, Y, fx, fy);
     return GravityCircle(GravityCircle::mask(caps),
                          _earth._a, _earth._f, lat, h, Z, X, M[7], M[8],
@@ -337,23 +336,23 @@ namespace GeographicLib {
 
   std::string GravityModel::DefaultGravityPath() {
     string path;
-    char* gravitypath = getenv("GRAVITY_PATH");
+    char* gravitypath = getenv("GEOGRAPHICLIB_GRAVITY_PATH");
     if (gravitypath)
       path = string(gravitypath);
-    if (path.length())
+    if (!path.empty())
       return path;
     char* datapath = getenv("GEOGRAPHICLIB_DATA");
     if (datapath)
       path = string(datapath);
-    return (path.length() ? path : string(GEOGRAPHICLIB_DATA)) + "/gravity";
+    return (!path.empty() ? path : string(GEOGRAPHICLIB_DATA)) + "/gravity";
   }
 
   std::string GravityModel::DefaultGravityName() {
     string name;
-    char* gravityname = getenv("GRAVITY_NAME");
+    char* gravityname = getenv("GEOGRAPHICLIB_GRAVITY_NAME");
     if (gravityname)
       name = string(gravityname);
-    return name.length() ? name : string(GRAVITY_DEFAULT_NAME);
+    return !name.empty() ? name : string(GEOGRAPHICLIB_GRAVITY_DEFAULT_NAME);
   }
 
 } // namespace GeographicLib
diff --git a/src/LambertConformalConic.cpp b/src/LambertConformalConic.cpp
index 5c666d7..ec11b74 100644
--- a/src/LambertConformalConic.cpp
+++ b/src/LambertConformalConic.cpp
@@ -9,21 +9,22 @@
 
 #include <GeographicLib/LambertConformalConic.hpp>
 
+#if defined(_MSC_VER)
+// Squelch warnings about constant conditional expressions
+#  pragma warning (disable: 4127)
+#endif
+
 namespace GeographicLib {
 
   using namespace std;
 
-  const Math::real LambertConformalConic::eps_ =
-    numeric_limits<real>::epsilon();
-  const Math::real LambertConformalConic::epsx_ = Math::sq(eps_);
-  const Math::real LambertConformalConic::tol_ = real(0.1) * sqrt(eps_);
-  const Math::real LambertConformalConic::ahypover_ =
-    real(numeric_limits<real>::digits) * log(real(numeric_limits<real>::radix))
-    + 2;
-
   LambertConformalConic::LambertConformalConic(real a, real f,
                                                real stdlat, real k0)
-    : _a(a)
+    : eps_(numeric_limits<real>::epsilon())
+    , epsx_(Math::sq(eps_))
+    , tol_(real(0.1) * sqrt(eps_))
+    , ahypover_(Math::digits() * log(real(numeric_limits<real>::radix)) + 2)
+    , _a(a)
     , _f(f <= 1 ? f : 1/f)
     , _fm(1 - _f)
     , _e2(_f * (2 - _f))
@@ -39,7 +40,7 @@ namespace GeographicLib {
     if (!(abs(stdlat) <= 90))
       throw GeographicErr("Standard latitude not in [-90d, 90d]");
     real
-      phi = stdlat * Math::degree<real>(),
+      phi = stdlat * Math::degree(),
       sphi = sin(phi),
       cphi = abs(stdlat) != 90 ? cos(phi) : 0;
     Init(sphi, cphi, sphi, cphi, k0);
@@ -48,7 +49,11 @@ namespace GeographicLib {
   LambertConformalConic::LambertConformalConic(real a, real f,
                                                real stdlat1, real stdlat2,
                                                real k1)
-    : _a(a)
+    : eps_(numeric_limits<real>::epsilon())
+    , epsx_(Math::sq(eps_))
+    , tol_(real(0.1) * sqrt(eps_))
+    , ahypover_(Math::digits() * log(real(numeric_limits<real>::radix)) + 2)
+    , _a(a)
     , _f(f <= 1 ? f : 1/f)
     , _fm(1 - _f)
     , _e2(_f * (2 - _f))
@@ -66,8 +71,8 @@ namespace GeographicLib {
     if (!(abs(stdlat2) <= 90))
       throw GeographicErr("Standard latitude 2 not in [-90d, 90d]");
     real
-      phi1 = stdlat1 * Math::degree<real>(),
-      phi2 = stdlat2 * Math::degree<real>();
+      phi1 = stdlat1 * Math::degree(),
+      phi2 = stdlat2 * Math::degree();
     Init(sin(phi1), abs(stdlat1) != 90 ? cos(phi1) : 0,
          sin(phi2), abs(stdlat2) != 90 ? cos(phi2) : 0, k1);
   }
@@ -76,7 +81,11 @@ namespace GeographicLib {
                                                real sinlat1, real coslat1,
                                                real sinlat2, real coslat2,
                                                real k1)
-    : _a(a)
+    : eps_(numeric_limits<real>::epsilon())
+    , epsx_(Math::sq(eps_))
+    , tol_(real(0.1) * sqrt(eps_))
+    , ahypover_(Math::digits() * log(real(numeric_limits<real>::radix)) + 2)
+    , _a(a)
     , _f(f <= 1 ? f : 1/f)
     , _fm(1 - _f)
     , _e2(_f * (2 - _f))
@@ -105,7 +114,7 @@ namespace GeographicLib {
   }
 
   void LambertConformalConic::Init(real sphi1, real cphi1,
-                                   real sphi2, real cphi2, real k1) throw() {
+                                   real sphi2, real cphi2, real k1) {
     {
       real r;
       r = Math::hypot(sphi1, cphi1);
@@ -290,7 +299,7 @@ namespace GeographicLib {
     _tchi0 = tphi0 * hyp(shxi0) - shxi0 * hyp(tphi0); _scchi0 = hyp(_tchi0);
     _psi0 = Math::asinh(_tchi0);
 
-    _lat0 = atan(_sign * tphi0) / Math::degree<real>();
+    _lat0 = atan(_sign * tphi0) / Math::degree();
     _t0nm1 = Math::expm1(- _n * _psi0); // Snyder's t0^n - 1
     // a * k1 * m1/t1^n = a * k1 * m2/t2^n = a * k1 * n * (Snyder's F)
     // = a * k1 / (scbet1 * exp(-n * psi1))
@@ -325,14 +334,16 @@ namespace GeographicLib {
     }
   }
 
-  const LambertConformalConic
-  LambertConformalConic::Mercator(Constants::WGS84_a<real>(),
-                                  Constants::WGS84_f<real>(),
-                                  real(0), real(1));
+  const LambertConformalConic& LambertConformalConic::Mercator() {
+    static const LambertConformalConic mercator(Constants::WGS84_a(),
+                                                Constants::WGS84_f(),
+                                                real(0), real(1));
+    return mercator;
+  }
 
   void LambertConformalConic::Forward(real lon0, real lat, real lon,
                                       real& x, real& y, real& gamma, real& k)
-    const throw() {
+    const {
     lon = Math::AngDiff(Math::AngNormalize(lon0), Math::AngNormalize(lon));
     // From Snyder, we have
     //
@@ -345,8 +356,8 @@ namespace GeographicLib {
     // where nrho0 = n * rho0, drho = rho - rho0
     // and drho is evaluated with divided differences
     real
-      lam = lon * Math::degree<real>(),
-      phi = _sign * lat * Math::degree<real>(),
+      lam = lon * Math::degree(),
+      phi = _sign * lat * Math::degree(),
       sphi = sin(phi), cphi = abs(lat) != 90 ? cos(phi) : epsx_,
       tphi = sphi/cphi, scbet = hyp(_fm * tphi),
       scphi = 1/cphi, shxi = sinh(eatanhe(sphi)),
@@ -359,22 +370,22 @@ namespace GeographicLib {
                           (tchi > 0 ? 1/(scchi + tchi) : (scchi - tchi))
                           - (_t0nm1 + 1))/(-_n) :
                          Dexp(-_n * psi, -_n * _psi0) * dpsi);
-    x = (_nrho0 + _n * drho) * (_n != 0 ? stheta / _n : lam);
+    x = (_nrho0 + _n * drho) * (_n ? stheta / _n : lam);
     y = _nrho0 *
-      (_n != 0 ?
+      (_n ?
        (ctheta < 0 ? 1 - ctheta : Math::sq(stheta)/(1 + ctheta)) / _n : 0)
       - drho * ctheta;
     k = _k0 * (scbet/_scbet0) /
       (exp( - (Math::sq(_nc)/(1 + _n)) * dpsi )
        * (tchi >= 0 ? scchi + tchi : 1 / (scchi - tchi)) / (_scchi0 + _tchi0));
     y *= _sign;
-    gamma = _sign * theta / Math::degree<real>();
+    gamma = _sign * theta / Math::degree();
   }
 
   void LambertConformalConic::Reverse(real lon0, real x, real y,
                                       real& lat, real& lon,
                                       real& gamma, real& k)
-    const throw() {
+    const {
     // From Snyder, we have
     //
     //        x = rho * sin(theta)
@@ -431,7 +442,7 @@ namespace GeographicLib {
       tphi = tchi/_e2m,
       stol = tol_ * max(real(1), abs(tchi));
     // min iterations = 1, max iterations = 2; mean = 1.94
-    for (int i = 0; i < numit_; ++i) {
+    for (int i = 0; i < numit_ || GEOGRAPHICLIB_PANIC; ++i) {
       real
         scphi = hyp(tphi),
         shxi = sinh( eatanhe( tphi / scphi ) ),
@@ -447,14 +458,14 @@ namespace GeographicLib {
     real
       phi = _sign * atan(tphi),
       scbet = hyp(_fm * tphi), scchi = hyp(tchi),
-      lam = _n != 0 ? gamma / _n : x / y1;
-    lat = phi / Math::degree<real>();
-    lon = lam / Math::degree<real>();
+      lam = _n ? gamma / _n : x / y1;
+    lat = phi / Math::degree();
+    lon = lam / Math::degree();
     lon = Math::AngNormalize(lon + Math::AngNormalize(lon0));
     k = _k0 * (scbet/_scbet0) /
-      (exp(_nc != 0 ? - (Math::sq(_nc)/(1 + _n)) * dpsi : 0)
+      (exp(_nc ? - (Math::sq(_nc)/(1 + _n)) * dpsi : 0)
        * (tchi >= 0 ? scchi + tchi : 1 / (scchi - tchi)) / (_scchi0 + _tchi0));
-    gamma /= _sign * Math::degree<real>();
+    gamma /= _sign * Math::degree();
   }
 
   void LambertConformalConic::SetScale(real lat, real k) {
diff --git a/src/LocalCartesian.cpp b/src/LocalCartesian.cpp
index cbcd4ed..ba243eb 100644
--- a/src/LocalCartesian.cpp
+++ b/src/LocalCartesian.cpp
@@ -13,22 +13,22 @@ namespace GeographicLib {
 
   using namespace std;
 
-  void LocalCartesian::Reset(real lat0, real lon0, real h0) throw() {
+  void LocalCartesian::Reset(real lat0, real lon0, real h0) {
     _lat0 = lat0;
     _lon0 = Math::AngNormalize(lon0);
     _h0 = h0;
     _earth.Forward(_lat0, _lon0, _h0, _x0, _y0, _z0);
     real
-      phi = lat0 * Math::degree<real>(),
+      phi = lat0 * Math::degree(),
       sphi = sin(phi),
       cphi = abs(_lat0) == 90 ? 0 : cos(phi),
-      lam = lon0 * Math::degree<real>(),
+      lam = lon0 * Math::degree(),
       slam = _lon0 == -180 ? 0 : sin(lam),
       clam = abs(_lon0) == 90 ? 0 : cos(lam);
     _earth.Rotation(sphi, cphi, slam, clam, _r);
   }
 
-  void LocalCartesian::MatrixMultiply(real M[dim2_]) const throw() {
+  void LocalCartesian::MatrixMultiply(real M[dim2_]) const {
     real t[dim2_];
     copy(M, M + dim2_, t);
     for (size_t i = 0; i < dim2_; ++i) {
@@ -39,7 +39,7 @@ namespace GeographicLib {
 
   void LocalCartesian::IntForward(real lat, real lon, real h,
                                   real& x, real& y, real& z,
-                                  real M[dim2_]) const throw() {
+                                  real M[dim2_]) const {
     real xc, yc, zc;
     _earth.IntForward(lat, lon, h, xc, yc, zc, M);
     xc -= _x0; yc -= _y0; zc -= _z0;
@@ -52,7 +52,7 @@ namespace GeographicLib {
 
   void LocalCartesian::IntReverse(real x, real y, real z,
                                   real& lat, real& lon, real& h,
-                                  real M[dim2_]) const throw() {
+                                  real M[dim2_]) const {
     real
       xc = _x0 + _r[0] * x + _r[1] * y + _r[2] * z,
       yc = _y0 + _r[3] * x + _r[4] * y + _r[5] * z,
diff --git a/src/MGRS.cpp b/src/MGRS.cpp
index c88f19c..8fca631 100644
--- a/src/MGRS.cpp
+++ b/src/MGRS.cpp
@@ -14,13 +14,6 @@ namespace GeographicLib {
 
   using namespace std;
 
-  const Math::real MGRS::eps_ =
-    // 25 = ceil(log_2(2e7)) -- use half circumference here because northing
-    // 195e5 is a legal in the "southern" hemisphere.
-    pow(real(0.5), numeric_limits<real>::digits - 25);
-  const Math::real MGRS::angeps_ =
-    // 7 = ceil(log_2(90))
-    pow(real(0.5), numeric_limits<real>::digits - 7);
   const string MGRS::hemispheres_ = "SN";
   const string MGRS::utmcols_[3] = { "ABCDEFGH", "JKLMNPQR", "STUVWXYZ" };
   const string MGRS::utmrow_ = "ABCDEFGHJKLMNPQRSTUV";
@@ -47,7 +40,6 @@ namespace GeographicLib {
                      int prec, std::string& mgrs) {
     if (zone == UTMUPS::INVALID ||
         Math::isnan(x) || Math::isnan(y) || Math::isnan(lat)) {
-      prec = -1;
       mgrs = "INVALID";
       return;
     }
@@ -55,9 +47,9 @@ namespace GeographicLib {
     CheckCoords(utmp, northp, x, y);
     if (!(zone >= UTMUPS::MINZONE && zone <= UTMUPS::MAXZONE))
       throw GeographicErr("Zone " + Utility::str(zone) + " not in [0,60]");
-    if (!(prec >= 0 && prec <= maxprec_))
+    if (!(prec >= -1 && prec <= maxprec_))
       throw GeographicErr("MGRS precision " + Utility::str(prec)
-                          + " not in [0, "
+                          + " not in [-1, "
                           + Utility::str(int(maxprec_)) + "]");
     // Fixed char array for accumulating string.  Allow space for zone, 3 block
     // letters, easting + northing.  Don't need to allow for terminating null.
@@ -81,7 +73,7 @@ namespace GeographicLib {
     if (utmp) {
       int
         // Correct fuzziness in latitude near equator
-        iband = abs(lat) > angeps_ ? LatitudeBand(lat) : (northp ? 0 : -1),
+        iband = abs(lat) > angeps() ? LatitudeBand(lat) : (northp ? 0 : -1),
         icol = xh - minutmcol_,
         irow = UTMRow(iband, icol, yh % utmrowperiod_);
       if (irow != yh - (northp ? minutmNrow_ : maxutmSrow_))
@@ -99,28 +91,30 @@ namespace GeographicLib {
                                          (northp ? minupsNind_ : minupsSind_))];
       mgrs1[z++] = upsrows_[northp][yh - (northp ? minupsNind_ : minupsSind_)];
     }
-    real mult = pow(real(base_), max(tilelevel_ - prec, 0));
-    int
-      ix = int(floor(xf / mult)),
-      iy = int(floor(yf / mult));
-    for (int c = min(prec, int(tilelevel_)); c--;) {
-      mgrs1[z + c] = digits_[ ix % base_ ];
-      ix /= base_;
-      mgrs1[z + c + prec] = digits_[ iy % base_ ];
-      iy /= base_;
-    }
-    if (prec > tilelevel_) {
-      xf -= floor(xf / mult);
-      yf -= floor(yf / mult);
-      mult = pow(real(base_), prec - tilelevel_);
-      ix = int(floor(xf * mult));
-      iy = int(floor(yf * mult));
-      for (int c = prec - tilelevel_; c--;) {
-        mgrs1[z + c + tilelevel_] = digits_[ ix % base_ ];
+    if (prec > 0) {
+      real mult = pow(real(base_), max(tilelevel_ - prec, 0));
+      int
+        ix = int(floor(xf / mult)),
+        iy = int(floor(yf / mult));
+      for (int c = min(prec, int(tilelevel_)); c--;) {
+        mgrs1[z + c] = digits_[ ix % base_ ];
         ix /= base_;
-        mgrs1[z + c + tilelevel_ + prec] = digits_[ iy % base_ ];
+        mgrs1[z + c + prec] = digits_[ iy % base_ ];
         iy /= base_;
       }
+      if (prec > tilelevel_) {
+        xf -= floor(xf / mult);
+        yf -= floor(yf / mult);
+        mult = pow(real(base_), prec - tilelevel_);
+        ix = int(floor(xf * mult));
+        iy = int(floor(yf * mult));
+        for (int c = prec - tilelevel_; c--;) {
+          mgrs1[z + c + tilelevel_] = digits_[ ix % base_ ];
+          ix /= base_;
+          mgrs1[z + c + tilelevel_ + prec] = digits_[ iy % base_ ];
+          iy /= base_;
+        }
+      }
     }
     mgrs.resize(mlen);
     copy(mgrs1, mgrs1 + mlen, mgrs.begin());
@@ -143,7 +137,7 @@ namespace GeographicLib {
         lat = 0.9 * ys;         // accurate enough estimate near equator
       else {
         real
-          // The poleward bound a fit from above of lat(x,y)
+          // The poleward bound is a fit from above of lat(x,y)
           // for x = 500km and y = [0km, 950km]
           latp = real(0.901) * ys + (ys > 0 ? 1 : -1) * real(0.135),
           // The equatorward bound is a fit from below of lat(x,y)
@@ -173,8 +167,8 @@ namespace GeographicLib {
         toupper(mgrs[2]) == 'V') {
       zone = UTMUPS::INVALID;
       northp = false;
-      x = y = Math::NaN<real>();
-      prec = -1;
+      x = y = Math::NaN();
+      prec = -2;
       return;
     }
     int zone1 = 0;
@@ -190,7 +184,7 @@ namespace GeographicLib {
     if (p > 2)
       throw GeographicErr("More than 2 digits_ at start of MGRS "
                           + mgrs.substr(0, p));
-    if (len - p < 3)
+    if (len - p < 1)
       throw GeographicErr("MGRS string too short " + mgrs);
     bool utmp = zone1 != UTMUPS::UPS;
     int zonem1 = zone1 - 1;
@@ -200,6 +194,28 @@ namespace GeographicLib {
       throw GeographicErr("Band letter " + Utility::str(mgrs[p-1]) + " not in "
                           + (utmp ? "UTM" : "UPS") + " set " + band);
     bool northp1 = iband >= (utmp ? 10 : 2);
+    if (p == len) {             // Grid zone only (ignore centerp)
+      // Approx length of a degree of meridian arc in units of tile.
+      real deg = real(utmNshift_) / (90 * tile_);
+      zone = zone1;
+      northp = northp1;
+      if (utmp) {
+        // Pick central meridian except for 31V
+        x = ((zone == 31 && iband == 17) ? 4 : 5) * tile_;
+        // Pick center of 8deg latitude bands
+        y = floor(8 * (iband - real(9.5)) * deg + real(0.5)) * tile_
+          + (northp ? 0 : utmNshift_);
+      } else {
+        // Pick point at lat 86N or 86S
+        x = ((iband & 1 ? 1 : -1) * floor(4 * deg + real(0.5))
+             + upseasting_) * tile_;
+        // Pick point at lon 90E or 90W.
+        y = upseasting_ * tile_;
+      }
+      prec = -1;
+      return;
+    } else if (len - p < 2)
+      throw GeographicErr("Missing row letter in " + mgrs);
     const string& col = utmp ? utmcols_[zonem1 % 3] : upscols_[iband];
     const string& row = utmp ? utmrow_ : upsrows_[northp1];
     int icol = Utility::lookup(col, mgrs[p++]);
@@ -272,7 +288,7 @@ namespace GeographicLib {
     // Limits are all multiples of 100km and are all closed on the lower end
     // and open on the upper end -- and this is reflected in the error
     // messages.  However if a coordinate lies on the excluded upper end (e.g.,
-    // after rounding), it is shifted down by eps_.  This also folds UTM
+    // after rounding), it is shifted down by eps().  This also folds UTM
     // northings to the correct N/S hemisphere.
     int
       ix = int(floor(x / tile_)),
@@ -280,7 +296,7 @@ namespace GeographicLib {
       ind = (utmp ? 2 : 0) + (northp ? 1 : 0);
     if (! (ix >= mineasting_[ind] && ix < maxeasting_[ind]) ) {
       if (ix == maxeasting_[ind] && x == maxeasting_[ind] * tile_)
-        x -= eps_;
+        x -= eps();
       else
         throw GeographicErr("Easting " + Utility::str(int(floor(x/1000)))
                             + "km not in MGRS/"
@@ -293,7 +309,7 @@ namespace GeographicLib {
     }
     if (! (iy >= minnorthing_[ind] && iy < maxnorthing_[ind]) ) {
       if (iy == maxnorthing_[ind] && y == maxnorthing_[ind] * tile_)
-        y -= eps_;
+        y -= eps();
       else
         throw GeographicErr("Northing " + Utility::str(int(floor(y/1000)))
                             + "km not in MGRS/"
@@ -313,7 +329,7 @@ namespace GeographicLib {
       } else if (!northp && iy >= maxutmSrow_) {
         if (y == maxutmSrow_ * tile_)
           // If on equator retain S hemisphere
-          y -= eps_;
+          y -= eps();
         else {
           northp = true;
           y -= utmNshift_;
@@ -322,7 +338,7 @@ namespace GeographicLib {
     }
   }
 
-  int MGRS::UTMRow(int iband, int icol, int irow) throw() {
+  int MGRS::UTMRow(int iband, int icol, int irow) {
     // Input is MGRS (periodic) row index and output is true row index.  Band
     // index is in [-10, 10) (as returned by LatitudeBand).  Column index
     // origin is easting = 100km.  Returns maxutmSrow_ if irow and iband are
diff --git a/src/MagneticCircle.cpp b/src/MagneticCircle.cpp
index aa7e972..f99e6c3 100644
--- a/src/MagneticCircle.cpp
+++ b/src/MagneticCircle.cpp
@@ -18,7 +18,7 @@ namespace GeographicLib {
 
   void MagneticCircle::Field(real lon, bool diffp,
                              real& Bx, real& By, real& Bz,
-                             real& Bxt, real& Byt, real& Bzt) const throw() {
+                             real& Bxt, real& Byt, real& Bzt) const {
     real clam, slam;
     CircularEngine::cossin(lon, clam, slam);
     real M[Geocentric::dim2_];
diff --git a/src/MagneticModel.cpp b/src/MagneticModel.cpp
index cdfefb6..84d5119 100644
--- a/src/MagneticModel.cpp
+++ b/src/MagneticModel.cpp
@@ -15,15 +15,14 @@
 
 #if !defined(GEOGRAPHICLIB_DATA)
 #  if defined(_WIN32)
-#    define GEOGRAPHICLIB_DATA \
-  "C:/Documents and Settings/All Users/Application Data/GeographicLib"
+#    define GEOGRAPHICLIB_DATA "C:/ProgramData/GeographicLib"
 #  else
 #    define GEOGRAPHICLIB_DATA "/usr/local/share/GeographicLib"
 #  endif
 #endif
 
-#if !defined(MAGNETIC_DEFAULT_NAME)
-#  define MAGNETIC_DEFAULT_NAME "wmm2010"
+#if !defined(GEOGRAPHICLIB_MAGNETIC_DEFAULT_NAME)
+#  define GEOGRAPHICLIB_MAGNETIC_DEFAULT_NAME "wmm2010"
 #endif
 
 #if defined(_MSC_VER)
@@ -41,13 +40,13 @@ namespace GeographicLib {
     , _dir(path)
     , _description("NONE")
     , _date("UNKNOWN")
-    , _t0(Math::NaN<real>())
+    , _t0(Math::NaN())
     , _dt0(1)
-    , _tmin(Math::NaN<real>())
-    , _tmax(Math::NaN<real>())
-    , _a(Math::NaN<real>())
-    , _hmin(Math::NaN<real>())
-    , _hmax(Math::NaN<real>())
+    , _tmin(Math::NaN())
+    , _tmax(Math::NaN())
+    , _a(Math::NaN())
+    , _hmin(Math::NaN())
+    , _hmax(Math::NaN())
     , _Nmodels(1)
     , _norm(SphericalHarmonic::SCHMIDT)
     , _earth(earth)
@@ -166,7 +165,7 @@ namespace GeographicLib {
 
   void MagneticModel::Field(real t, real lat, real lon, real h, bool diffp,
                             real& Bx, real& By, real& Bz,
-                            real& Bxt, real& Byt, real& Bzt) const throw() {
+                            real& Bxt, real& Byt, real& Bzt) const {
     t -= _t0;
     int n = max(min(int(floor(t / _dt0)), _Nmodels - 1), 0);
     bool interpolate = n + 1 < _Nmodels;
@@ -217,36 +216,36 @@ namespace GeographicLib {
                                       real Bxt, real Byt, real Bzt,
                                       real& H, real& F, real& D, real& I,
                                       real& Ht, real& Ft,
-                                      real& Dt, real& It) throw() {
+                                      real& Dt, real& It) {
     H = Math::hypot(Bx, By);
     Ht = H ? (Bx * Bxt + By * Byt) / H : Math::hypot(Bxt, Byt);
-    D = (0 - (H ? atan2(-Bx, By) : atan2(-Bxt, Byt))) / Math::degree<real>();
-    Dt = (H ? (By * Bxt - Bx * Byt) / Math::sq(H) : 0) / Math::degree<real>();
+    D = (0 - (H ? atan2(-Bx, By) : atan2(-Bxt, Byt))) / Math::degree();
+    Dt = (H ? (By * Bxt - Bx * Byt) / Math::sq(H) : 0) / Math::degree();
     F = Math::hypot(H, Bz);
     Ft = F ? (H * Ht + Bz * Bzt) / F : Math::hypot(Ht, Bzt);
-    I = (F ? atan2(-Bz, H) : atan2(-Bzt, Ht)) / Math::degree<real>();
-    It = (F ? (Bz * Ht - H * Bzt) / Math::sq(F) : 0) / Math::degree<real>();
+    I = (F ? atan2(-Bz, H) : atan2(-Bzt, Ht)) / Math::degree();
+    It = (F ? (Bz * Ht - H * Bzt) / Math::sq(F) : 0) / Math::degree();
   }
 
   std::string MagneticModel::DefaultMagneticPath() {
     string path;
-    char* magneticpath = getenv("MAGNETIC_PATH");
+    char* magneticpath = getenv("GEOGRAPHICLIB_MAGNETIC_PATH");
     if (magneticpath)
       path = string(magneticpath);
-    if (path.length())
+    if (!path.empty())
       return path;
     char* datapath = getenv("GEOGRAPHICLIB_DATA");
     if (datapath)
       path = string(datapath);
-    return (path.length() ? path : string(GEOGRAPHICLIB_DATA)) + "/magnetic";
+    return (!path.empty() ? path : string(GEOGRAPHICLIB_DATA)) + "/magnetic";
   }
 
   std::string MagneticModel::DefaultMagneticName() {
     string name;
-    char* magneticname = getenv("MAGNETIC_NAME");
+    char* magneticname = getenv("GEOGRAPHICLIB_MAGNETIC_NAME");
     if (magneticname)
       name = string(magneticname);
-    return name.length() ? name : string(MAGNETIC_DEFAULT_NAME);
+    return !name.empty() ? name : string(GEOGRAPHICLIB_MAGNETIC_DEFAULT_NAME);
   }
 
 } // namespace GeographicLib
diff --git a/src/Makefile.am b/src/Makefile.am
index 83edcff..3ed6a3c 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -21,6 +21,7 @@ libGeographic_la_SOURCES = Accumulator.cpp \
 		Geocentric.cpp \
 		Geodesic.cpp \
 		GeodesicExact.cpp \
+		GeodesicExactC4.cpp \
 		GeodesicLine.cpp \
 		GeodesicLineExact.cpp \
 		Geohash.cpp \
@@ -37,6 +38,7 @@ libGeographic_la_SOURCES = Accumulator.cpp \
 		OSGB.cpp \
 		PolarStereographic.cpp \
 		PolygonArea.cpp \
+		Rhumb.cpp \
 		SphericalEngine.cpp \
 		TransverseMercator.cpp \
 		TransverseMercatorExact.cpp \
@@ -72,6 +74,7 @@ libGeographic_la_SOURCES = Accumulator.cpp \
 		../include/GeographicLib/OSGB.hpp \
 		../include/GeographicLib/PolarStereographic.hpp \
 		../include/GeographicLib/PolygonArea.hpp \
+		../include/GeographicLib/Rhumb.hpp \
 		../include/GeographicLib/SphericalEngine.hpp \
 		../include/GeographicLib/SphericalHarmonic.hpp \
 		../include/GeographicLib/SphericalHarmonic1.hpp \
@@ -84,8 +87,10 @@ libGeographic_la_SOURCES = Accumulator.cpp \
 
 ../include/GeographicLib/Config.h: ../include/GeographicLib/Config-ac.h
 	( egrep '\bVERSION\b|\bGEOGRAPHICLIB_|\bHAVE_LONG_DOUBLE\b' $< | \
-	  sed -e 's/ VERSION / GEOGRAPHICLIB_VERSION_STRING /'; \
-	  grep WORDS_BIGENDIAN $< | tail -1 ) > $@
+	  sed -e 's/ VERSION / GEOGRAPHICLIB_VERSION_STRING /' \
+	      -e 's/ HAVE_LONG_DOUBLE / GEOGRAPHICLIB_HAVE_LONG_DOUBLE /'; \
+	  grep WORDS_BIGENDIAN $< | tail -1 | \
+	  sed -e 's/ WORDS_BIGENDIAN / GEOGRAPHICLIB_WORDS_BIGENDIAN /' ) > $@
 
 $(libGeographic_la_OBJECTS): ../include/GeographicLib/Config.h
 
@@ -93,4 +98,4 @@ geographiclib_data=$(datadir)/GeographicLib
 
 DEFS=-DGEOGRAPHICLIB_DATA=\"$(geographiclib_data)\" @DEFS@
 
-EXTRA_DIST = Makefile.mk CMakeLists.txt Geographic.pro
+EXTRA_DIST = Makefile.mk CMakeLists.txt GeographicLib.pro
diff --git a/src/Makefile.in b/src/Makefile.in
index b461730..8ebbf75 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.12.2 from Makefile.am.
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -20,23 +20,51 @@
 # Copyright (C) 2009, Francesco P. Lovergine <frankie at debian.org>
 
 VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
     esac; \
-    test $$am__dry = yes; \
-  }
+  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@
@@ -57,7 +85,7 @@ build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
 subdir = src
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
 	$(top_srcdir)/depcomp
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
@@ -103,39 +131,75 @@ libGeographic_la_LIBADD =
 am_libGeographic_la_OBJECTS = Accumulator.lo AlbersEqualArea.lo \
 	AzimuthalEquidistant.lo CassiniSoldner.lo CircularEngine.lo \
 	DMS.lo Ellipsoid.lo EllipticFunction.lo GeoCoords.lo \
-	Geocentric.lo Geodesic.lo GeodesicExact.lo GeodesicLine.lo \
-	GeodesicLineExact.lo Geohash.lo Geoid.lo Gnomonic.lo \
-	GravityCircle.lo GravityModel.lo LambertConformalConic.lo \
-	LocalCartesian.lo MGRS.lo MagneticCircle.lo MagneticModel.lo \
-	NormalGravity.lo OSGB.lo PolarStereographic.lo PolygonArea.lo \
+	Geocentric.lo Geodesic.lo GeodesicExact.lo GeodesicExactC4.lo \
+	GeodesicLine.lo GeodesicLineExact.lo Geohash.lo Geoid.lo \
+	Gnomonic.lo GravityCircle.lo GravityModel.lo \
+	LambertConformalConic.lo LocalCartesian.lo MGRS.lo \
+	MagneticCircle.lo MagneticModel.lo NormalGravity.lo OSGB.lo \
+	PolarStereographic.lo PolygonArea.lo Rhumb.lo \
 	SphericalEngine.lo TransverseMercator.lo \
 	TransverseMercatorExact.lo UTMUPS.lo Utility.lo
 libGeographic_la_OBJECTS = $(am_libGeographic_la_OBJECTS)
-libGeographic_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
-	$(CXXFLAGS) $(libGeographic_la_LDFLAGS) $(LDFLAGS) -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 = 
+libGeographic_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
+	$(AM_CXXFLAGS) $(CXXFLAGS) $(libGeographic_la_LDFLAGS) \
+	$(LDFLAGS) -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)/include/GeographicLib
 depcomp = $(SHELL) $(top_srcdir)/depcomp
 am__depfiles_maybe = depfiles
 am__mv = mv -f
 CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(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) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
+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) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=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) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
+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 = $(libGeographic_la_SOURCES)
 DIST_SOURCES = $(libGeographic_la_SOURCES)
 am__can_run_installinfo = \
@@ -143,11 +207,29 @@ am__can_run_installinfo = \
     n|no|NO) false;; \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
+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
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -216,7 +298,6 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POD2HTML = @POD2HTML@
 POD2MAN = @POD2MAN@
-POW_LIB = @POW_LIB@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
@@ -297,6 +378,7 @@ libGeographic_la_SOURCES = Accumulator.cpp \
 		Geocentric.cpp \
 		Geodesic.cpp \
 		GeodesicExact.cpp \
+		GeodesicExactC4.cpp \
 		GeodesicLine.cpp \
 		GeodesicLineExact.cpp \
 		Geohash.cpp \
@@ -313,6 +395,7 @@ libGeographic_la_SOURCES = Accumulator.cpp \
 		OSGB.cpp \
 		PolarStereographic.cpp \
 		PolygonArea.cpp \
+		Rhumb.cpp \
 		SphericalEngine.cpp \
 		TransverseMercator.cpp \
 		TransverseMercatorExact.cpp \
@@ -348,6 +431,7 @@ libGeographic_la_SOURCES = Accumulator.cpp \
 		../include/GeographicLib/OSGB.hpp \
 		../include/GeographicLib/PolarStereographic.hpp \
 		../include/GeographicLib/PolygonArea.hpp \
+		../include/GeographicLib/Rhumb.hpp \
 		../include/GeographicLib/SphericalEngine.hpp \
 		../include/GeographicLib/SphericalHarmonic.hpp \
 		../include/GeographicLib/SphericalHarmonic1.hpp \
@@ -359,7 +443,7 @@ libGeographic_la_SOURCES = Accumulator.cpp \
 		../include/GeographicLib/Config.h
 
 geographiclib_data = $(datadir)/GeographicLib
-EXTRA_DIST = Makefile.mk CMakeLists.txt Geographic.pro
+EXTRA_DIST = Makefile.mk CMakeLists.txt GeographicLib.pro
 all: all-am
 
 .SUFFIXES:
@@ -394,6 +478,7 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
 $(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=; \
@@ -428,8 +513,9 @@ clean-libLTLIBRARIES:
 	  echo rm -f $${locs}; \
 	  rm -f $${locs}; \
 	}
+
 libGeographic.la: $(libGeographic_la_OBJECTS) $(libGeographic_la_DEPENDENCIES) $(EXTRA_libGeographic_la_DEPENDENCIES) 
-	$(libGeographic_la_LINK) -rpath $(libdir) $(libGeographic_la_OBJECTS) $(libGeographic_la_LIBADD) $(LIBS)
+	$(AM_V_CXXLD)$(libGeographic_la_LINK) -rpath $(libdir) $(libGeographic_la_OBJECTS) $(libGeographic_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -449,6 +535,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Geocentric.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Geodesic.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GeodesicExact.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GeodesicExactC4.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GeodesicLine.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GeodesicLineExact.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Geohash.Plo at am__quote@
@@ -465,6 +552,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/OSGB.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PolarStereographic.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PolygonArea.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Rhumb.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/SphericalEngine.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/TransverseMercator.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/TransverseMercatorExact.Plo at am__quote@
@@ -472,25 +560,25 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Utility.Plo at am__quote@
 
 .cpp.o:
- at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ 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@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ $<
 
 .cpp.obj:
- at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ 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@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
 .cpp.lo:
- at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ 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@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -498,26 +586,15 @@ mostlyclean-libtool:
 clean-libtool:
 	-rm -rf .libs _libs
 
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
+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`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	$(am__define_uniq_tagged_files); \
 	shift; \
 	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
 	  test -n "$$unique" || unique=$$empty_fix; \
@@ -529,15 +606,11 @@ TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 	      $$unique; \
 	  fi; \
 	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+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
@@ -546,9 +619,10 @@ GTAGS:
 	here=`$(am__cd) $(top_builddir) && pwd` \
 	  && $(am__cd) $(top_srcdir) \
 	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
 
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
 	case "$(srcdir)" in \
 	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
 	  *) sdir=$(subdir)/$(srcdir) ;; \
@@ -704,25 +778,27 @@ uninstall-am: uninstall-libLTLIBRARIES
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libLTLIBRARIES clean-libtool cscopelist ctags 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 \
+.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 uninstall uninstall-am uninstall-libLTLIBRARIES
+	tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES
 
 
 ../include/GeographicLib/Config.h: ../include/GeographicLib/Config-ac.h
 	( egrep '\bVERSION\b|\bGEOGRAPHICLIB_|\bHAVE_LONG_DOUBLE\b' $< | \
-	  sed -e 's/ VERSION / GEOGRAPHICLIB_VERSION_STRING /'; \
-	  grep WORDS_BIGENDIAN $< | tail -1 ) > $@
+	  sed -e 's/ VERSION / GEOGRAPHICLIB_VERSION_STRING /' \
+	      -e 's/ HAVE_LONG_DOUBLE / GEOGRAPHICLIB_HAVE_LONG_DOUBLE /'; \
+	  grep WORDS_BIGENDIAN $< | tail -1 | \
+	  sed -e 's/ WORDS_BIGENDIAN / GEOGRAPHICLIB_WORDS_BIGENDIAN /' ) > $@
 
 $(libGeographic_la_OBJECTS): ../include/GeographicLib/Config.h
 
diff --git a/src/Makefile.mk b/src/Makefile.mk
index 560313b..6da6f6f 100644
--- a/src/Makefile.mk
+++ b/src/Makefile.mk
@@ -36,6 +36,7 @@ MODULES = Accumulator \
 	OSGB \
 	PolarStereographic \
 	PolygonArea \
+	Rhumb \
 	SphericalEngine \
 	TransverseMercator \
 	TransverseMercatorExact \
@@ -46,13 +47,13 @@ EXTRAHEADERS = Constants \
 	SphericalHarmonic \
 	SphericalHarmonic1 \
 	SphericalHarmonic2
-
+EXTRASOURCES = GeodesicExactC4
 HEADERS = Config.h $(addsuffix .hpp,$(EXTRAHEADERS) $(MODULES))
-SOURCES = $(addsuffix .cpp,$(MODULES))
-OBJECTS = $(addsuffix .o,$(MODULES))
+SOURCES = $(addsuffix .cpp,$(MODULES) $(EXTRASOURCES))
+OBJECTS = $(addsuffix .o,$(MODULES) $(EXTRASOURCES))
 
 CC = g++ -g
-CXXFLAGS = -g -Wall -Wextra -O3
+CXXFLAGS = -g -Wall -Wextra -O3 -std=c++0x
 
 CPPFLAGS = -I$(INCLUDEPATH) $(DEFINES) \
 	-DGEOGRAPHICLIB_DATA=\"$(GEOGRAPHICLIB_DATA)\"
@@ -93,6 +94,7 @@ Geocentric.o: Config.h Constants.hpp Geocentric.hpp Math.hpp
 Geodesic.o: Config.h Constants.hpp Geodesic.hpp GeodesicLine.hpp Math.hpp
 GeodesicExact.o: Config.h Constants.hpp GeodesicExact.hpp \
 	GeodesicLineExact.hpp Math.hpp
+GeodesicExactC4.o: Config.h Constants.hpp GeodesicExact.hpp Math.hpp
 GeodesicLine.o: Config.h Constants.hpp Geodesic.hpp GeodesicLine.hpp Math.hpp
 GeodesicLineExact.o: Config.h Constants.hpp GeodesicExact.hpp \
 	GeodesicLineExact.hpp Math.hpp
@@ -124,6 +126,8 @@ OSGB.o: Config.h Constants.hpp Math.hpp OSGB.hpp TransverseMercator.hpp \
 PolarStereographic.o: Config.h Constants.hpp Math.hpp PolarStereographic.hpp
 PolygonArea.o: Accumulator.hpp Config.h Constants.hpp Geodesic.hpp Math.hpp \
 	PolygonArea.hpp
+Rhumb.o: Config.h Constants.hpp Ellipsoid.hpp Math.hpp Rhumb.hpp \
+	AlbersEqualArea.hpp EllipticFunction.hpp TransverseMercator.hpp
 SphericalEngine.o: CircularEngine.hpp Config.h Constants.hpp Math.hpp \
 	SphericalEngine.hpp Utility.hpp
 TransverseMercator.o: Config.h Constants.hpp Math.hpp TransverseMercator.hpp
diff --git a/src/NormalGravity.cpp b/src/NormalGravity.cpp
index 3c598b9..b673dcd 100644
--- a/src/NormalGravity.cpp
+++ b/src/NormalGravity.cpp
@@ -2,13 +2,18 @@
  * \file NormalGravity.cpp
  * \brief Implementation for GeographicLib::NormalGravity class
  *
- * Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed under
- * the MIT/X11 License.  For more information, see
+ * Copyright (c) Charles Karney (2011-2014) <charles at karney.com> and licensed
+ * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
 
 #include <GeographicLib/NormalGravity.hpp>
 
+#if defined(_MSC_VER)
+// Squelch warnings about constant conditional expressions
+#  pragma warning (disable: 4127)
+#endif
+
 namespace GeographicLib {
 
   using namespace std;
@@ -26,32 +31,22 @@ namespace GeographicLib {
         throw GeographicErr("Major radius is not positive");
       if (!(Math::isfinite(_GM) && _GM > 0))
         throw GeographicErr("Gravitational constants is not positive");
-      bool flatp = _f > 0 && Math::isfinite(_f);
-      if (_J2 > 0 && Math::isfinite(_J2) && flatp)
-        throw GeographicErr("Cannot specify both f and J2");
-      if (!(_J2 > 0 && Math::isfinite(_J2)) && !flatp)
-        throw GeographicErr("Must specify one of f and J2");
-      if (!(Math::isfinite(_omega) && _omega != 0))
-        throw GeographicErr("Angular velocity is not non-zero");
-      real K = 2 * _aomega2 * _a / (15 * _GM);
-      if (flatp) {
-        _e2 = _f * (2 - _f);
-        _ep2 = _e2 / (1 - _e2);
-        _q0 = qf(_ep2);
-        _J2 = _e2 * ( 1 - K * sqrt(_e2) / _q0) / 3; // H+M, Eq 2-90
-      } else {
-        _e2 = 3 * _J2;          // See Moritz (1980), p 398.
-        for (int j = 0; j < maxit_; ++j) {
-          real e2a = _e2;
-          real q0 = qf(_e2 / (1 - _e2));
-          _e2 = 3 * _J2 + K * _e2 * sqrt(_e2) / q0;
-          if (_e2 == e2a)
-            break;
-        }
-        _f = _e2 / (1 + sqrt(1 - _e2));
-        _ep2 = _e2 / (1 - _e2);
-        _q0 = qf(_ep2);
-      }
+      if (!(_omega == 0 && _f == 0 && _J2 == 0)) {
+        bool flatp = _f > 0 && Math::isfinite(_f);
+        if (_J2 > 0 && Math::isfinite(_J2) && flatp)
+          throw GeographicErr("Cannot specify both f and J2");
+        if (!(_J2 > 0 && Math::isfinite(_J2)) && !flatp)
+          throw GeographicErr("Must specify one of f and J2");
+        if (!(Math::isfinite(_omega) && _omega != 0))
+          throw GeographicErr("Angular velocity is not non-zero");
+        if (flatp)
+          _J2 = FlatteningToJ2(a, GM, omega, f);
+        else
+          _f = J2ToFlattening(a, GM, omega, J2);
+      } // else we have a sphere: omega = f = J2 = 0
+      _e2 = _f * (2 - _f);
+      _ep2 = _e2 / (1 - _e2);
+      _q0 = qf(_ep2);
       _earth = Geocentric(_a, _f);
       _b = _a * (1 - _f);
       _E = a * sqrt(_e2);                               // H+M, Eq 2-54
@@ -70,44 +65,64 @@ namespace GeographicLib {
       _fstar = (_m + 3 * Q / 2 - _f * (1 + Q)) / G;
     }
 
-  const NormalGravity
-  NormalGravity::WGS84(Constants::WGS84_a<real>(), Constants::WGS84_GM<real>(),
-                       Constants::WGS84_omega<real>(),
-                       Constants::WGS84_f<real>(), 0);
+  const NormalGravity& NormalGravity::WGS84() {
+    static const NormalGravity wgs84(Constants::WGS84_a(),
+                                     Constants::WGS84_GM(),
+                                     Constants::WGS84_omega(),
+                                     Constants::WGS84_f(), 0);
+    return wgs84;
+  }
 
-  const NormalGravity
-  NormalGravity::GRS80(Constants::GRS80_a<real>(), Constants::GRS80_GM<real>(),
-                       Constants::GRS80_omega<real>(),
-                       0, Constants::GRS80_J2<real>());
+  const NormalGravity& NormalGravity::GRS80() {
+    static const NormalGravity grs80(Constants::GRS80_a(),
+                                     Constants::GRS80_GM(),
+                                     Constants::GRS80_omega(),
+                                     0, Constants::GRS80_J2());
+    return grs80;
+  }
 
-  Math::real NormalGravity::qf(real ep2) throw() {
-    // Compute
-    //
-    //   ((1 + 3/e'^2) * atan(e') - 3/e')/2
-    //
-    // See H+M, Eq 2-57, with E/u = e'.  This suffers from two levels of
-    // cancelation.  The e'^-1 and e'^1 terms drop out, so that the leading
-    // term is O(e'^3).
-    real ep = sqrt(ep2);
-    if (abs(ep2) > real(0.5))  // Use the closed expression
-      return ((1 + 3 / ep2) * atan(ep) - 3 / ep)/2;
-    else {
-      real ep2n = 1, q = 0;     // The series expansion H+M, Eq 2-86
-      for (int n = 1; ; ++n) {
-        ep2n *= -ep2;
-        real
-          t = (ep2n * n) / ((2 * n + 1) * (2 * n + 3)),
-          qn = q + t;
+  // (atan(y)-(y-y^3/3+y^5/5))/y^7 (y = sqrt(x)) = -1/7+x/9-x^2/11+x^3/13...
+  Math::real NormalGravity::atan7(real x) {
+    if (abs(x) >= real(0.5)) {
+      real y = sqrt(abs(x)), x2 = Math::sq(x);
+      return ((x > 0 ? atan(y) : Math::atanh(y))- y * (1 - x / 3 + x2 / 5)) /
+        (x * x2 * y);
+    } else {
+      real xn = -1, q = 0;
+      for (int n = 7; ; n += 2) {
+        real qn = q + xn / n;
         if (qn == q)
           break;
         q = qn;
+        xn *= -x;
       }
-      q *= -2 * ep;
       return q;
     }
   }
 
-  Math::real NormalGravity::qpf(real ep2) throw() {
+  // (atan(y)-(y-y^3/3))/y^5 (y = sqrt(x)) = 1/5-x/7+x^2/9-x^3/11...
+  Math::real NormalGravity::atan5(real x)
+  { return 1/real(5) + x * atan7(x); }
+
+  Math::real NormalGravity::qf(real ep2) {
+    // Compute
+    //
+    //   ((1 + 3/e'^2) * atan(e') - 3/e')/2
+    //
+    // See H+M, Eq 2-57, with E/u = e'.  This suffers from two levels of
+    // cancelation.  The e'^-1 and e'^1 terms drop out, so that the leading
+    // term is O(e'^3).  Substitute atan(e') = e' - e'^3/3 + e'^5*atan5(e'^2)
+    return sqrt(ep2) * ep2 * (3 * (3 + ep2) * atan5(ep2) - 1) / 6;
+  }
+
+  Math::real NormalGravity::dq(real ep2) {
+    // Compute d qf(ep2) / d ep2 and substitute
+    // atan(e') = e' - e'^3/3 + e'^5/5 + e'^7*atan7(e'^2)
+    return sqrt(ep2) * (5 - 3 * (1 + ep2) * (1 + 5 * ep2 * atan7(ep2))) /
+      (10 * (1 + ep2));
+  }
+
+  Math::real NormalGravity::qpf(real ep2) {
     // Compute
     //
     //   3*(1 + 1/e'^2) * (1 - atan(e')/e') - 1
@@ -115,26 +130,10 @@ namespace GeographicLib {
     // See H+M, Eq 2-67, with E/u = e'.  This suffers from two levels of
     // cancelation.  The e'^-2 and e'^0 terms drop out, so that the leading
     // term is O(e'^2).
-    if (abs(ep2) > real(0.5)) { // Use the closed expression
-      real ep = sqrt(ep2);
-      return 3 * (1 + 1 / ep2) * (1 - atan(ep) / ep) - 1;
-    } else {
-      real ep2n = 1, qp = 0;    // The series expansion H+M, Eq 2-101c
-      for (int n = 1; ; ++n) {
-        ep2n *= -ep2;
-        real
-          t = ep2n / ((2 * n + 1) * (2 * n + 3)),
-          qpn = qp + t;
-        if (qpn == qp)
-          break;
-        qp = qpn;
-      }
-      qp *= -6;
-      return qp;
-    }
+    return ep2 * (1 - 3 * (1 + ep2) * atan5(ep2));
   }
 
-  Math::real NormalGravity::Jn(int n) const throw() {
+  Math::real NormalGravity::Jn(int n) const {
     // Note Jn(0) = -1; Jn(2) = _J2; Jn(odd) = 0
     if (n & 1 || n < 0)
       return 0;
@@ -143,12 +142,12 @@ namespace GeographicLib {
     for (int j = n; j--;)
       e2n *= -_e2;
     return                      // H+M, Eq 2-92
-      -3 * e2n * (1 - n + 5 * n * _J2 / _e2) / ((2 * n + 1) * (2 * n + 3));
+      -3 * e2n * ((1 - n) + 5 * n * _J2 / _e2) / ((2 * n + 1) * (2 * n + 3));
   }
 
-  Math::real NormalGravity::SurfaceGravity(real lat) const throw() {
+  Math::real NormalGravity::SurfaceGravity(real lat) const {
     real
-      phi = lat * Math::degree<real>(),
+      phi = lat * Math::degree(),
       sphi2 = abs(lat) == 90 ? 1 : Math::sq(sin(phi));
     // H+M, Eq 2-78
     return _gammae * (1 + _k * sphi2) / sqrt(1 - _e2 * sphi2);
@@ -156,7 +155,7 @@ namespace GeographicLib {
 
   Math::real NormalGravity::V0(real X, real Y, real Z,
                                real& GammaX, real& GammaY, real& GammaZ)
-    const throw() {
+    const {
     // See H+M, Sec 6-2
     real
       p = Math::hypot(X, Y),
@@ -200,7 +199,7 @@ namespace GeographicLib {
   }
 
   Math::real NormalGravity::Phi(real X, real Y, real& fX, real& fY)
-    const throw() {
+    const {
     fX = _omega2 * X;
     fY = _omega2 * Y;
     // N.B. fZ = 0;
@@ -209,7 +208,7 @@ namespace GeographicLib {
 
   Math::real NormalGravity::U(real X, real Y, real Z,
                               real& gammaX, real& gammaY, real& gammaZ)
-    const throw() {
+    const {
     real fX, fY;
     real Ures = V0(X, Y, Z, gammaX, gammaY, gammaZ) + Phi(X, Y, fX, fY);
     gammaX += fX;
@@ -219,7 +218,7 @@ namespace GeographicLib {
 
   Math::real NormalGravity::Gravity(real lat, real h,
                                     real& gammay, real& gammaz)
-    const throw() {
+    const {
     real X, Y, Z;
     real M[Geocentric::dim2_];
     _earth.IntForward(lat, 0, h, X, Y, Z, M);
@@ -231,4 +230,34 @@ namespace GeographicLib {
     return Ures;
   }
 
+  Math::real NormalGravity::J2ToFlattening(real a, real GM,
+                                           real omega, real J2) {
+    real
+      K = 2 * Math::sq(a * omega) * a / (15 * GM),
+      e2 = 3 * J2;              // See Moritz (1980), p 398.
+    // Solve using Newton's method
+    for (int j = 0; j < maxit_ || GEOGRAPHICLIB_PANIC; ++j) {
+      real e2a = e2,
+        ep2 = e2 / (1 - e2),
+        q0 = qf(ep2),
+        dq0 = dq(ep2) / Math::sq(1 - e2),
+        h = e2 * (1 - sqrt(e2) * K / q0) - 3 * J2,
+        dh = 1 - sqrt(e2) * K * (3 * q0 - 2 * e2 * dq0) / (2 * Math::sq(q0)),
+        de2 = - h / dh;
+      e2 = e2a + de2;
+      if (e2 == e2a)
+        break;
+    }
+    return e2 / (1 + sqrt(1 - e2));
+  }
+
+  Math::real NormalGravity::FlatteningToJ2(real a, real GM,
+                                           real omega, real f) {
+    real
+      K = 2 * Math::sq(a * omega) * a / (15 * GM),
+      e2 = f * (2 - f),
+      q0 = qf(e2 / (1 - e2));
+    return e2 * (1 - K * sqrt(e2) / q0) / 3; // H+M, Eq 2-90
+  }
+
 } // namespace GeographicLib
diff --git a/src/OSGB.cpp b/src/OSGB.cpp
index 0d01891..1b83f45 100644
--- a/src/OSGB.cpp
+++ b/src/OSGB.cpp
@@ -17,16 +17,19 @@ namespace GeographicLib {
   const string OSGB::letters_ = "ABCDEFGHJKLMNOPQRSTUVWXYZ";
   const string OSGB::digits_ = "0123456789";
 
-  const TransverseMercator
-  OSGB::OSGBTM_(MajorRadius(), Flattening(), CentralScale());
+  const TransverseMercator& OSGB::OSGBTM() {
+    static const TransverseMercator osgbtm(MajorRadius(), Flattening(),
+                                           CentralScale());
+    return osgbtm;
+  }
 
   Math::real OSGB::northoffset_ = 0;
   bool OSGB::init_ = false;
 
-  Math::real OSGB::computenorthoffset() throw() {
+  Math::real OSGB::computenorthoffset() {
     if (!init_) {
       real x, y;
-      OSGBTM_.Forward(real(0), OriginLatitude(), real(0), x, y);
+      OSGBTM().Forward(real(0), OriginLatitude(), real(0), x, y);
       northoffset_ = FalseNorthing() - y;
       init_ = true;
     }
diff --git a/src/PolarStereographic.cpp b/src/PolarStereographic.cpp
index ff26240..cef6b13 100644
--- a/src/PolarStereographic.cpp
+++ b/src/PolarStereographic.cpp
@@ -9,18 +9,18 @@
 
 #include <GeographicLib/PolarStereographic.hpp>
 
+#if defined(_MSC_VER)
+// Squelch warnings about constant conditional expressions
+#  pragma warning (disable: 4127)
+#endif
+
 namespace GeographicLib {
 
   using namespace std;
 
-  const Math::real PolarStereographic::tol_ =
-    real(0.1)*sqrt(numeric_limits<real>::epsilon());
-  // Overflow value s.t. atan(overflow_) = pi/2
-  const Math::real PolarStereographic::overflow_ =
-    1 / Math::sq(numeric_limits<real>::epsilon());
-
   PolarStereographic::PolarStereographic(real a, real f, real k0)
-    : _a(a)
+    : tol_(real(0.1)*sqrt(numeric_limits<real>::epsilon()))
+    , _a(a)
     , _f(f <= 1 ? f : 1/f)
     , _e2(_f * (2 - _f))
     , _e(sqrt(abs(_e2)))
@@ -37,10 +37,12 @@ namespace GeographicLib {
       throw GeographicErr("Scale is not positive");
   }
 
-  const PolarStereographic
-  PolarStereographic::UPS(Constants::WGS84_a<real>(),
-                          Constants::WGS84_f<real>(),
-                          Constants::UPS_k0<real>());
+  const PolarStereographic& PolarStereographic::UPS() {
+    static const PolarStereographic ups(Constants::WGS84_a(),
+                                        Constants::WGS84_f(),
+                                        Constants::UPS_k0());
+    return ups;
+  }
 
   // This formulation converts to conformal coordinates by tau = tan(phi) and
   // tau' = tan(phi') where phi' is the conformal latitude.  The formulas are:
@@ -65,11 +67,11 @@ namespace GeographicLib {
 
   void PolarStereographic::Forward(bool northp, real lat, real lon,
                                    real& x, real& y, real& gamma, real& k)
-    const throw() {
+    const {
     lat *= northp ? 1 : -1;
     real
-      phi = lat * Math::degree<real>(),
-      tau = lat != -90 ? tanx(phi) : -overflow_,
+      phi = lat * Math::degree(),
+      tau = lat != -90 ? tanx(phi) : -overflow(),
       secphi = Math::hypot(real(1), tau),
       sig = sinh( eatanhe(tau / secphi) ),
       taup = Math::hypot(real(1), sig) * tau - sig * secphi,
@@ -80,7 +82,7 @@ namespace GeographicLib {
       _k0;
     lon = Math::AngNormalize(lon);
     real
-      lam = lon * Math::degree<real>();
+      lam = lon * Math::degree();
     x = rho * (lon == -180 ? 0 : sin(lam));
     y = (northp ? -rho : rho) * (abs(lon) == 90 ? 0 : cos(lam));
     gamma = northp ? lon : -lon;
@@ -88,16 +90,16 @@ namespace GeographicLib {
 
   void PolarStereographic::Reverse(bool northp, real x, real y,
                                    real& lat, real& lon, real& gamma, real& k)
-    const throw() {
+    const {
     real
       rho = Math::hypot(x, y),
       t = rho / (2 * _k0 * _a / _c),
       taup = (1 / t - t) / 2,
       tau = taup * _Cx,
       stol = tol_ * max(real(1), abs(taup));
-    if (abs(tau) < overflow_) {
+    if (abs(tau) < overflow()) {
       // min iterations = 1, max iterations = 2; mean = 1.99
-      for (int i = 0; i < numit_; ++i) {
+      for (int i = 0; i < numit_ || GEOGRAPHICLIB_PANIC; ++i) {
         real
           tau1 = Math::hypot(real(1), tau),
           sig = sinh( eatanhe( tau / tau1 ) ),
@@ -112,10 +114,9 @@ namespace GeographicLib {
     real
       phi = atan(tau),
       secphi = Math::hypot(real(1), tau);
-    k = rho != 0 ?
-      (rho / _a) * secphi * sqrt(_e2m + _e2 / Math::sq(secphi)) : _k0;
-    lat = (northp ? 1 : -1) * (rho != 0 ? phi / Math::degree<real>() : 90);
-    lon = -atan2( -x, northp ? -y : y ) / Math::degree<real>();
+    k = rho ? (rho / _a) * secphi * sqrt(_e2m + _e2 / Math::sq(secphi)) : _k0;
+    lat = (northp ? 1 : -1) * (rho ? phi / Math::degree() : 90);
+    lon = -atan2( -x, northp ? -y : y ) / Math::degree();
     gamma = northp ? lon : -lon;
   }
 
diff --git a/src/PolygonArea.cpp b/src/PolygonArea.cpp
index 4df9a2a..e191f4d 100644
--- a/src/PolygonArea.cpp
+++ b/src/PolygonArea.cpp
@@ -2,7 +2,7 @@
  * \file PolygonArea.cpp
  * \brief Implementation for GeographicLib::PolygonArea class
  *
- * Copyright (c) Charles Karney (2010-2011) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2010-2014) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
@@ -13,7 +13,8 @@ namespace GeographicLib {
 
   using namespace std;
 
-  void PolygonArea::AddPoint(real lat, real lon) throw() {
+  template <class GeodType>
+  void PolygonAreaT<GeodType>::AddPoint(real lat, real lon) {
     lon = Math::AngNormalize(lon);
     if (_num == 0) {
       _lat0 = _lat1 = lat;
@@ -31,7 +32,8 @@ namespace GeographicLib {
     ++_num;
   }
 
-  void PolygonArea::AddEdge(real azi, real s) throw() {
+  template <class GeodType>
+  void PolygonAreaT<GeodType>::AddEdge(real azi, real s) {
     if (_num) {                 // Do nothing if _num is zero
       real lat, lon, S12, t;
       _earth.GenDirect(_lat1, _lon1, azi, false, s, _mask,
@@ -46,8 +48,9 @@ namespace GeographicLib {
     }
   }
 
-  unsigned PolygonArea::Compute(bool reverse, bool sign,
-                                real& perimeter, real& area) const throw() {
+  template <class GeodType>
+  unsigned PolygonAreaT<GeodType>::Compute(bool reverse, bool sign,
+                                           real& perimeter, real& area) const {
     real s12, S12, t;
     if (_num < 2) {
       perimeter = 0;
@@ -62,7 +65,7 @@ namespace GeographicLib {
     _earth.GenInverse(_lat1, _lon1, _lat0, _lon0, _mask,
                       s12, t, t, t, t, t, S12);
     perimeter = _perimetersum(s12);
-    Accumulator<real> tempsum(_areasum);
+    Accumulator<> tempsum(_areasum);
     tempsum += S12;
     int crossings = _crossings + transit(_lon1, _lon0);
     if (crossings & 1)
@@ -87,8 +90,11 @@ namespace GeographicLib {
     return _num;
   }
 
-  unsigned PolygonArea::TestPoint(real lat, real lon, bool reverse, bool sign,
-                                  real& perimeter, real& area) const throw() {
+  template <class GeodType>
+  unsigned PolygonAreaT<GeodType>::TestPoint(real lat, real lon,
+                                             bool reverse, bool sign,
+                                             real& perimeter, real& area) const
+  {
     if (_num == 0) {
       perimeter = 0;
       if (!_polyline)
@@ -137,12 +143,14 @@ namespace GeographicLib {
     return num;
   }
 
-  unsigned PolygonArea::TestEdge(real azi, real s, bool reverse, bool sign,
-                                 real& perimeter, real& area) const throw() {
+  template <class GeodType>
+  unsigned PolygonAreaT<GeodType>::TestEdge(real azi, real s,
+                                            bool reverse, bool sign,
+                                            real& perimeter, real& area) const {
     if (_num == 0) {            // we don't have a starting point!
-      perimeter = Math::NaN<real>();
+      perimeter = Math::NaN();
       if (!_polyline)
-        area = Math::NaN<real>();
+        area = Math::NaN();
       return 0;
     }
     unsigned num = _num + 1;
@@ -186,4 +194,7 @@ namespace GeographicLib {
     return num;
   }
 
+  template class GEOGRAPHICLIB_EXPORT PolygonAreaT<Geodesic>;
+  template class GEOGRAPHICLIB_EXPORT PolygonAreaT<GeodesicExact>;
+
 } // namespace GeographicLib
diff --git a/src/Rhumb.cpp b/src/Rhumb.cpp
new file mode 100644
index 0000000..4cde164
--- /dev/null
+++ b/src/Rhumb.cpp
@@ -0,0 +1,218 @@
+/**
+ * \file Rhumb.cpp
+ * \brief Implementation for GeographicLib::Rhumb and GeographicLib::RhumbLine
+ * classes
+ *
+ * Copyright (c) Charles Karney (2012) <charles at karney.com> and licensed under
+ * the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+#include <algorithm>
+#include <GeographicLib/Rhumb.hpp>
+
+namespace GeographicLib {
+
+  using namespace std;
+
+  const Rhumb& Rhumb::WGS84() {
+    static const Rhumb wgs84(Constants::WGS84_a(), Constants::WGS84_f(), false);
+    return wgs84;
+  }
+
+  void Rhumb::Inverse(real lat1, real lon1, real lat2, real lon2,
+                      real& s12, real& azi12) const {
+    real
+      lon12 = Math::AngDiff(Math::AngNormalize(lon1), Math::AngNormalize(lon2)),
+      psi1 = _ell.IsometricLatitude(lat1),
+      psi2 = _ell.IsometricLatitude(lat2),
+      psi12 = psi2 - psi1,
+      h = Math::hypot(lon12, psi12);
+    azi12 = 0 - atan2(-lon12, psi12) / Math::degree();
+    real dmudpsi = DIsometricToRectifying(psi2 * Math::degree(),
+                                          psi1 * Math::degree());
+    s12 = h * dmudpsi * _ell.QuarterMeridian() / 90;
+  }
+
+  RhumbLine Rhumb::Line(real lat1, real lon1, real azi12) const
+  { return RhumbLine(*this, lat1, lon1, azi12, _exact); }
+
+  void Rhumb::Direct(real lat1, real lon1, real azi12, real s12,
+                     real& lat2, real& lon2) const
+  { Line(lat1, lon1, azi12).Position(s12, lat2, lon2); }
+
+  Math::real Rhumb::DE(real x, real y) const {
+    const EllipticFunction& ei = _ell._ell;
+    real d = x - y;
+    if (x * y <= 0)
+      return d ? (ei.E(x) - ei.E(y)) / d : 1;
+    // See DLMF: Eqs (19.11.2) and (19.11.4) letting
+    // theta -> x, phi -> -y, psi -> z
+    //
+    // (E(x) - E(y)) / d = E(z)/d - k2 * sin(x) * sin(y) * sin(z)/d
+    //
+    // tan(z/2) = (sin(x)*Delta(y) - sin(y)*Delta(x)) / (cos(x) + cos(y))
+    //          = d * Dsin(x,y) * (sin(x) + sin(y))/(cos(x) + cos(y)) /
+    //             (sin(x)*Delta(y) + sin(y)*Delta(x))
+    //          = t = d * Dt
+    // sin(z) = 2*t/(1+t^2); cos(z) = (1-t^2)/(1+t^2)
+    // Alt (this only works for |z| <= pi/2 -- however, this conditions holds
+    // if x*y > 0):
+    // sin(z) = d * Dsin(x,y) * (sin(x) + sin(y))/
+    //          (sin(x)*cos(y)*Delta(y) + sin(y)*cos(x)*Delta(x))
+    // cos(z) = sqrt((1-sin(z))*(1+sin(z)))
+    real sx = sin(x), sy = sin(y), cx = cos(x), cy = cos(y);
+    real Dt = Dsin(x, y) * (sx + sy) /
+      ((cx + cy) * (sx * ei.Delta(sy, cy) + sy * ei.Delta(sx, cx))),
+      t = d * Dt, Dsz = 2 * Dt / (1 + t*t),
+      sz = d * Dsz, cz = (1 - t) * (1 + t) / (1 + t*t);
+    return ((sz ? ei.E(sz, cz, ei.Delta(sz, cz)) / sz : 1)
+            - ei.k2() * sx * sy) * Dsz;
+  }
+
+  Math::real Rhumb::DRectifying(real latx, real laty) const {
+    real
+      phix = latx * Math::degree(), tbetx = _ell._f1 * tano(phix),
+      phiy = laty * Math::degree(), tbety = _ell._f1 * tano(phiy);
+    return (Math::pi()/2) * _ell._b * _ell._f1 * DE(atan(tbetx), atan(tbety))
+      * Dtan(phix, phiy) * Datan(tbetx, tbety) / _ell.QuarterMeridian();
+  }
+
+  Math::real Rhumb::DIsometric(real latx, real laty) const {
+    real
+      phix = latx * Math::degree(), tx = tano(phix),
+      phiy = laty * Math::degree(), ty = tano(phiy);
+    return Dasinh(tx, ty) * Dtan(phix, phiy)
+      - Deatanhe(sin(phix), sin(phiy)) * Dsin(phix, phiy);
+  }
+
+  Math::real Rhumb::SinSeries(real x, real y, const real c[], int n) {
+    // N.B. n >= 0 and c[] has n+1 elements 0..n, of which c[0] is ignored.
+    //
+    // Use Clenshaw summation to evaluate
+    //   m = (g(x) + g(y)) / 2         -- mean value
+    //   s = (g(x) - g(y)) / (x - y)   -- average slope
+    // where
+    //   g(x) = sum(c[j]*sin(2*j*x), j = 1..n)
+    //
+    // This function returns only s and m is discarded.
+    //
+    // Write
+    //   t = [m; s]
+    //   t = sum(c[j] * f[j](x,y), j = 1..n)
+    // where
+    //   f[j](x,y) = [ (sin(2*j*x)+sin(2*j*y))/2 ]
+    //               [ (sin(2*j*x)-sin(2*j*y))/d ]
+    //
+    //             = [       sin(j*p)*cos(j*d) ]
+    //               [ (2/d)*sin(j*d)*cos(j*p) ]
+    // and
+    //    p = x+y, d = x-y
+    //
+    //   f[j+1](x,y) = A * f[j](x,y) - f[j-1](x,y)
+    //
+    //   A = [  2*cos(p)*cos(d)      -sin(p)*sin(d)*d]
+    //       [ -4*sin(p)*sin(d)/d   2*cos(p)*cos(d)  ]
+    //
+    // Let b[n+1] = b[n+2] = [0 0; 0 0]
+    //     b[j] = A * b[j+1] - b[j+2] + c[j] * I for j = n..1
+    //    t =  b[1] * f[1](x,y)
+    real p = x + y, d = x - y,
+      cp = cos(p), cd =     cos(d),
+      sp = sin(p), sd = d ? sin(d)/d : 1,
+      m = 2 * cp * cd, s = sp * sd;
+    // 2x2 matrices stored in row-major order
+    const real a[4] = {m, -s * d * d, -4 * s, m};
+    real ba[4] = {0, 0, 0, 0};
+    real bb[4] = {0, 0, 0, 0};
+    real* b0 = ba;
+    real* b1 = bb;
+    if (n > 0) b0[0] = b0[3] = c[n];
+    for (int j = n - 1; j > 0; --j) { // j = n-1 .. 1
+      std::swap(b0, b1);
+      // b0 = A * b1 - b0 + c[j] * I
+      b0[0] = a[0] * b1[0] + a[1] * b1[2] - b0[0] + c[j];
+      b0[1] = a[0] * b1[1] + a[1] * b1[3] - b0[1];
+      b0[2] = a[2] * b1[0] + a[3] * b1[2] - b0[2];
+      b0[3] = a[2] * b1[1] + a[3] * b1[3] - b0[3] + c[j];
+    }
+    b1[0] = sp * cd; b1[2] = 2 * sd * cp;
+    // Here is the (unused) expression for m
+    // m = b0[0] * b1[0] + b0[1] * b1[2];
+    s = b0[2] * b1[0] + b0[3] * b1[2];
+    return s;
+  }
+
+  Math::real Rhumb::DConformalToRectifying(real chix, real chiy) const {
+    return 1 + SinSeries(chix, chiy,
+                         _ell.ConformalToRectifyingCoeffs(), tm_maxord);
+  }
+
+  Math::real Rhumb::DRectifyingToConformal(real mux, real muy) const {
+    return 1 - SinSeries(mux, muy,
+                         _ell.RectifyingToConformalCoeffs(), tm_maxord);
+  }
+
+  Math::real Rhumb::DIsometricToRectifying(real psix, real psiy) const {
+    if (_exact) {
+      real
+        latx = _ell.InverseIsometricLatitude(psix/Math::degree()),
+        laty = _ell.InverseIsometricLatitude(psiy/Math::degree());
+      return DRectifying(latx, laty) / DIsometric(latx, laty);
+    } else
+      return DConformalToRectifying(gd(psix), gd(psiy)) * Dgd(psix, psiy);
+  }
+
+  Math::real Rhumb::DRectifyingToIsometric(real mux, real muy) const {
+    real
+      latx = _ell.InverseRectifyingLatitude(mux/Math::degree()),
+      laty = _ell.InverseRectifyingLatitude(muy/Math::degree());
+    return _exact ?
+      DIsometric(latx, laty) / DRectifying(latx, laty) :
+      Dgdinv(_ell.ConformalLatitude(latx) * Math::degree(),
+             _ell.ConformalLatitude(laty) * Math::degree()) *
+      DRectifyingToConformal(mux, muy);
+  }
+
+  RhumbLine::RhumbLine(const Rhumb& rh, real lat1, real lon1, real azi12,
+                       bool exact)
+    : _rh(rh)
+    , _exact(exact)
+    , _lat1(lat1)
+    , _lon1(Math::AngNormalize(lon1))
+    , _azi12(Math::AngNormalize(azi12))
+  {
+    real alp12 = azi12 * Math::degree();
+    _salp =     azi12  == -180 ? 0 : sin(alp12);
+    _calp = abs(azi12) ==   90 ? 0 : cos(alp12);
+    _mu1 = _rh._ell.RectifyingLatitude(lat1);
+    _psi1 = _rh._ell.IsometricLatitude(lat1);
+    _r1 = _rh._ell.CircleRadius(lat1);
+  }
+
+  void RhumbLine::Position(real s12, real& lat2, real& lon2) const {
+    real
+      mu12 = s12 * _calp * 90 / _rh._ell.QuarterMeridian(),
+      mu2 = _mu1 + mu12;
+    if (abs(mu2) <= 90) {
+      if (_calp) {
+        lat2 = _rh._ell.InverseRectifyingLatitude(mu2);
+        real psi12 = _rh.DRectifyingToIsometric( mu2 * Math::degree(),
+                                                 _mu1 * Math::degree()) * mu12;
+        lon2 = _salp * psi12 / _calp;
+      } else {
+        lat2 = _lat1;
+        lon2 = _salp * s12 / (_r1 * Math::degree());
+      }
+      lon2 = Math::AngNormalize2(_lon1 + lon2);
+    } else {
+      // Reduce to the interval [-180, 180)
+      mu2 = Math::AngNormalize2(mu2);
+      // Deal with points on the anti-meridian
+      if (abs(mu2) > 90) mu2 = Math::AngNormalize(180 - mu2);
+      lat2 = _rh._ell.InverseRectifyingLatitude(mu2);
+      lon2 = Math::NaN();
+    }
+  }
+
+} // namespace GeographicLib
diff --git a/src/SphericalEngine.cpp b/src/SphericalEngine.cpp
index 489659d..ef0dfba 100644
--- a/src/SphericalEngine.cpp
+++ b/src/SphericalEngine.cpp
@@ -144,12 +144,6 @@ namespace GeographicLib {
 
   using namespace std;
 
-  const Math::real SphericalEngine::scale_ =
-    pow(real(numeric_limits<real>::radix),
-        -3 * numeric_limits<real>::max_exponent / 5);
-  const Math::real SphericalEngine::eps_ =
-    numeric_limits<real>::epsilon() * sqrt(numeric_limits<real>::epsilon());
-
   const vector<Math::real> SphericalEngine::Z_(0);
   vector<Math::real> SphericalEngine::root_(0);
 
@@ -157,9 +151,10 @@ namespace GeographicLib {
   Math::real SphericalEngine::Value(const coeff c[], const real f[],
                                     real x, real y, real z, real a,
                                     real& gradx, real& grady, real& gradz)
-    throw() {
-    STATIC_ASSERT(L > 0, "L must be positive");
-    STATIC_ASSERT(norm == FULL || norm == SCHMIDT, "Unknown normalization");
+    {
+    GEOGRAPHICLIB_STATIC_ASSERT(L > 0, "L must be positive");
+    GEOGRAPHICLIB_STATIC_ASSERT(norm == FULL || norm == SCHMIDT,
+                                "Unknown normalization");
     int N = c[0].nmx(), M = c[0].mmx();
 
     real
@@ -168,7 +163,7 @@ namespace GeographicLib {
       sl = p ? y / p : 0,       // sin(lambda)
       r = Math::hypot(z, p),
       t = r ? z / r : 0,            // cos(theta); at origin, pick theta = pi/2
-      u = r ? max(p / r, eps_) : 1, // sin(theta); but avoid the pole
+      u = r ? max(p / r, eps()) : 1, // sin(theta); but avoid the pole
       q = a / r;
     real
       q2 = Math::sq(q),
@@ -211,7 +206,7 @@ namespace GeographicLib {
         R = c[0].Cv(--k[0]);
         for (int l = 1; l < L; ++l)
           R += c[l].Cv(--k[l], n, m, f[l]);
-        R *= scale_;
+        R *= scale();
         w = A * wc + B * wc2 + R; wc2 = wc; wc = w;
         if (gradp) {
           w = A * wrc + B * wrc2 + (n + 1) * R; wrc2 = wrc; wrc = w;
@@ -221,7 +216,7 @@ namespace GeographicLib {
           R = c[0].Sv(k[0]);
           for (int l = 1; l < L; ++l)
             R += c[l].Sv(k[l], n, m, f[l]);
-          R *= scale_;
+          R *= scale();
           w = A * ws + B * ws2 + R; ws2 = ws; ws = w;
           if (gradp) {
             w = A * wrs + B * wrs2 + (n + 1) * R; wrs2 = wrs; wrs = w;
@@ -271,7 +266,7 @@ namespace GeographicLib {
           break;
         default: break;       // To suppress warning message from Visual Studio
         }
-        qs = q / scale_;
+        qs = q / scale();
         vc = qs * (wc + A * (cl * vc + sl * vs ) + B * vc2);
         if (gradp) {
           qs /= r;
@@ -299,14 +294,15 @@ namespace GeographicLib {
   CircularEngine SphericalEngine::Circle(const coeff c[], const real f[],
                                          real p, real z, real a) {
 
-    STATIC_ASSERT(L > 0, "L must be positive");
-    STATIC_ASSERT(norm == FULL || norm == SCHMIDT, "Unknown normalization");
+    GEOGRAPHICLIB_STATIC_ASSERT(L > 0, "L must be positive");
+    GEOGRAPHICLIB_STATIC_ASSERT(norm == FULL || norm == SCHMIDT,
+                                "Unknown normalization");
     int N = c[0].nmx(), M = c[0].mmx();
 
     real
       r = Math::hypot(z, p),
       t = r ? z / r : 0,            // cos(theta); at origin, pick theta = pi/2
-      u = r ? max(p / r, eps_) : 1, // sin(theta); but avoid the pole
+      u = r ? max(p / r, eps()) : 1, // sin(theta); but avoid the pole
       q = a / r;
     real
       q2 = Math::sq(q),
@@ -341,7 +337,7 @@ namespace GeographicLib {
         R = c[0].Cv(--k[0]);
         for (int l = 1; l < L; ++l)
           R += c[l].Cv(--k[l], n, m, f[l]);
-        R *= scale_;
+        R *= scale();
         w = A * wc + B * wc2 + R; wc2 = wc; wc = w;
         if (gradp) {
           w = A * wrc + B * wrc2 + (n + 1) * R; wrc2 = wrc; wrc = w;
@@ -351,7 +347,7 @@ namespace GeographicLib {
           R = c[0].Sv(k[0]);
           for (int l = 1; l < L; ++l)
             R += c[l].Sv(k[l], n, m, f[l]);
-          R *= scale_;
+          R *= scale();
           w = A * ws + B * ws2 + R; ws2 = ws; ws = w;
           if (gradp) {
             w = A * wrs + B * wrs2 + (n + 1) * R; wrs2 = wrs; wrs = w;
diff --git a/src/TransverseMercator.cpp b/src/TransverseMercator.cpp
index 7f66b9e..5f46aa8 100644
--- a/src/TransverseMercator.cpp
+++ b/src/TransverseMercator.cpp
@@ -41,18 +41,18 @@
 
 #include <GeographicLib/TransverseMercator.hpp>
 
+#if defined(_MSC_VER)
+// Squelch warnings about constant conditional expressions
+#  pragma warning (disable: 4127)
+#endif
+
 namespace GeographicLib {
 
   using namespace std;
 
-  const Math::real TransverseMercator::tol_ =
-    real(0.1)*sqrt(numeric_limits<real>::epsilon());
-  // Overflow value s.t. atan(overflow_) = pi/2
-  const Math::real TransverseMercator::overflow_ =
-    1 / Math::sq(numeric_limits<real>::epsilon());
-
   TransverseMercator::TransverseMercator(real a, real f, real k0)
-    : _a(a)
+    : tol_(real(0.1)*sqrt(numeric_limits<real>::epsilon()))
+    , _a(a)
     , _f(f <= 1 ? f : 1/f)
     , _k0(k0)
     , _e2(_f * (2 - _f))
@@ -148,11 +148,11 @@ namespace GeographicLib {
       _alp[5] = nx*(_n*(102508609*_n-109404448)+27505368)/63866880;
       _bet[5] = nx*((-8005831*_n-1741552)*_n+1814868)/63866880;
       nx *= _n;
-      _alp[6] = (2760926233.0-12282192400.0*_n)*nx/4151347200.0;
-      _bet[6] = (268433009-261810608*_n)*nx/8302694400.0;
+      _alp[6] = (2760926233LL-12282192400LL*_n)*nx/4151347200LL;
+      _bet[6] = (268433009-261810608*_n)*nx/8302694400LL;
       nx *= _n;
-      _alp[7] = 1522256789.0*nx/1383782400.0;
-      _bet[7] = 219941297*nx/5535129600.0;
+      _alp[7] = 1522256789LL*nx/1383782400LL;
+      _bet[7] = 219941297*nx/5535129600LL;
       break;
     case 8:
       _b1 = 1/(1+_n)*(nx*(nx*(nx*(25*nx+64)+256)+4096)+16384)/16384;
@@ -174,43 +174,46 @@ namespace GeographicLib {
       _bet[3] = nx*(_n*(_n*(_n*((101880889-232468668*_n)*_n+39205760)-
                             29795040)-28131840)+22619520)/638668800;
       nx *= _n;
-      _alp[4] = nx*(_n*(_n*((14967552000.0-40176129013.0*_n)*_n+6971354016.0)-
-                        8165836800.0)+2355138720.0)/7664025600.0;
-      _bet[4] = nx*(_n*(_n*(_n*(324154477*_n+1433121792.0)-876745056)-
-                        167270400)+208945440)/7664025600.0;
+      _alp[4] = nx*(_n*(_n*((14967552000LL-40176129013LL*_n)*_n+6971354016LL)-
+                        8165836800LL)+2355138720LL)/7664025600LL;
+      _bet[4] = nx*(_n*(_n*(_n*(324154477*_n+1433121792LL)-876745056)-
+                        167270400)+208945440)/7664025600LL;
       nx *= _n;
-      _alp[5] = nx*(_n*(_n*(10421654396.0*_n+3997835751.0)-4266773472.0)+
-                    1072709352.0)/2490808320.0;
+      _alp[5] = nx*(_n*(_n*(10421654396LL*_n+3997835751LL)-4266773472LL)+
+                    1072709352LL)/2490808320LL;
       _bet[5] = nx*(_n*(_n*(457888660*_n-312227409)-67920528)+70779852)/
-        2490808320.0;
+        2490808320LL;
       nx *= _n;
-      _alp[6] = nx*(_n*(175214326799.0*_n-171950693600.0)+38652967262.0)/
-        58118860800.0;
-      _bet[6] = nx*((-19841813847.0*_n-3665348512.0)*_n+3758062126.0)/
-        116237721600.0;
+      _alp[6] = nx*(_n*(175214326799LL*_n-171950693600LL)+38652967262LL)/
+        58118860800LL;
+      _bet[6] = nx*((-19841813847LL*_n-3665348512LL)*_n+3758062126LL)/
+        116237721600LL;
       nx *= _n;
-      _alp[7] = (13700311101.0-67039739596.0*_n)*nx/12454041600.0;
-      _bet[7] = (1979471673.0-1989295244.0*_n)*nx/49816166400.0;
+      _alp[7] = (13700311101LL-67039739596LL*_n)*nx/12454041600LL;
+      _bet[7] = (1979471673LL-1989295244LL*_n)*nx/49816166400LL;
       nx *= _n;
-      _alp[8] = 1424729850961.0*nx/743921418240.0;
-      _bet[8] = 191773887257.0*nx/3719607091200.0;
+      _alp[8] = 1424729850961LL*nx/743921418240LL;
+      _bet[8] = 191773887257LL*nx/3719607091200LL;
       break;
     default:
-      STATIC_ASSERT(maxpow_ >= 4 && maxpow_ <= 8, "Bad value of maxpow_");
+      GEOGRAPHICLIB_STATIC_ASSERT(maxpow_ >= 4 && maxpow_ <= 8,
+                                  "Bad value of maxpow_");
     }
     // _a1 is the equivalent radius for computing the circumference of
     // ellipse.
     _a1 = _b1 * _a;
   }
 
-  const TransverseMercator
-  TransverseMercator::UTM(Constants::WGS84_a<real>(),
-                          Constants::WGS84_f<real>(),
-                          Constants::UTM_k0<real>());
+  const TransverseMercator& TransverseMercator::UTM() {
+    static const TransverseMercator utm(Constants::WGS84_a(),
+                                        Constants::WGS84_f(),
+                                        Constants::UTM_k0());
+    return utm;
+  }
 
   // Engsager and Poder (2007) use trigonometric series to convert between phi
-  // and phip.
-
+  // and phip.  Here are the series...
+  //
   // Conversion from phi to phip:
   //
   //     phip = phi + sum(c[j] * sin(2*j*phi), j, 1, 6)
@@ -236,7 +239,7 @@ namespace GeographicLib {
   //       c[5] = - 734/315 * n^5
   //              + 109598/31185 * n^6;
   //       c[6] =   444337/155925 * n^6;
-
+  //
   // Conversion from phip to phi:
   //
   //     phi = phip + sum(d[j] * sin(2*j*phip), j, 1, 6)
@@ -262,16 +265,19 @@ namespace GeographicLib {
   //       d[5] =   4174/315 * n^5
   //              - 144838/6237 * n^6;
   //       d[6] =   601676/22275 * n^6;
-
+  //
   // In order to maintain sufficient relative accuracy close to the pole use
   //
   //     S = sum(c[i]*sin(2*i*phi),i,1,6)
   //     taup = (tau + tan(S)) / (1 - tau * tan(S))
 
+  // Here we evaluate the forward transform explicitly and solve the reverse
+  // one by Newton's method.
+  //
   // taupf and tauf are adapted from TransverseMercatorExact (taup and
   // taupinv).  tau = tan(phi), taup = sinh(psi)
-  Math::real TransverseMercator::taupf(real tau) const throw() {
-    if (!(abs(tau) < overflow_))
+  Math::real TransverseMercator::taupf(real tau) const {
+    if (!(abs(tau) < overflow()))
       return tau;
     real
       tau1 = Math::hypot(real(1), tau),
@@ -279,8 +285,8 @@ namespace GeographicLib {
     return Math::hypot(real(1), sig) * tau - sig * tau1;
   }
 
-  Math::real TransverseMercator::tauf(real taup) const throw() {
-    if (!(abs(taup) < overflow_))
+  Math::real TransverseMercator::tauf(real taup) const {
+    if (!(abs(taup) < overflow()))
       return taup;
     real
       // To lowest order in e^2, taup = (1 - e^2) * tau = _e2m * tau; so use
@@ -291,7 +297,7 @@ namespace GeographicLib {
       tau = taup/_e2m,
       stol = tol_ * max(real(1), abs(taup));
     // min iterations = 1, max iterations = 2; mean = 1.94
-    for (int i = 0; i < numit_; ++i) {
+    for (int i = 0; i < numit_ || GEOGRAPHICLIB_PANIC; ++i) {
       real
         tau1 = Math::hypot(real(1), tau),
         sig = sinh( eatanhe( tau / tau1 ) ),
@@ -307,7 +313,7 @@ namespace GeographicLib {
 
   void TransverseMercator::Forward(real lon0, real lat, real lon,
                                    real& x, real& y, real& gamma, real& k)
-    const throw() {
+    const {
     lon = Math::AngDiff(Math::AngNormalize(lon0), Math::AngNormalize(lon));
     // Explicitly enforce the parity
     int
@@ -322,8 +328,8 @@ namespace GeographicLib {
       lon = 180 - lon;
     }
     real
-      phi = lat * Math::degree<real>(),
-      lam = lon * Math::degree<real>();
+      phi = lat * Math::degree(),
+      lam = lon * Math::degree();
     // phi = latitude
     // phi' = conformal latitude
     // psi = isometric latitude
@@ -366,7 +372,7 @@ namespace GeographicLib {
       k = sqrt(_e2m + _e2 * Math::sq(cos(phi))) * Math::hypot(real(1), tau)
         / Math::hypot(taup, c);
     } else {
-      xip = Math::pi<real>()/2;
+      xip = Math::pi()/2;
       etap = 0;
       gamma = lam;
       k = _c;
@@ -458,8 +464,8 @@ namespace GeographicLib {
     // Gauss-Krueger TM.
     gamma -= atan2(yi1, yr1);
     k *= _b1 * Math::hypot(yr1, yi1);
-    gamma /= Math::degree<real>();
-    y = _a1 * _k0 * (backside ? Math::pi<real>() - xi : xi) * latsign;
+    gamma /= Math::degree();
+    y = _a1 * _k0 * (backside ? Math::pi() - xi : xi) * latsign;
     x = _a1 * _k0 * eta * lonsign;
     if (backside)
       gamma = 180 - gamma;
@@ -469,7 +475,7 @@ namespace GeographicLib {
 
   void TransverseMercator::Reverse(real lon0, real x, real y,
                                    real& lat, real& lon, real& gamma, real& k)
-    const throw() {
+    const {
     // This undoes the steps in Forward.  The wrinkles are: (1) Use of the
     // reverted series to express zeta' in terms of zeta. (2) Newton's method
     // to solve for phi in terms of tan(phi).
@@ -482,9 +488,9 @@ namespace GeographicLib {
       etasign = eta < 0 ? -1 : 1;
     xi *= xisign;
     eta *= etasign;
-    bool backside = xi > Math::pi<real>()/2;
+    bool backside = xi > Math::pi()/2;
     if (backside)
-      xi = Math::pi<real>() - xi;
+      xi = Math::pi() - xi;
     real
       c0 = cos(2 * xi), ch0 = cosh(2 * eta),
       s0 = sin(2 * xi), sh0 = sinh(2 * eta),
@@ -540,17 +546,17 @@ namespace GeographicLib {
       k *= sqrt(_e2m + _e2 * Math::sq(cos(phi))) *
         Math::hypot(real(1), tau) * r;
     } else {
-      phi = Math::pi<real>()/2;
+      phi = Math::pi()/2;
       lam = 0;
       k *= _c;
     }
-    lat = phi / Math::degree<real>() * xisign;
-    lon = lam / Math::degree<real>();
+    lat = phi / Math::degree() * xisign;
+    lon = lam / Math::degree();
     if (backside)
       lon = 180 - lon;
     lon *= etasign;
     lon = Math::AngNormalize(lon + Math::AngNormalize(lon0));
-    gamma /= Math::degree<real>();
+    gamma /= Math::degree();
     if (backside)
       gamma = 180 - gamma;
     gamma *= xisign * etasign;
diff --git a/src/TransverseMercatorExact.cpp b/src/TransverseMercatorExact.cpp
index f2ac01a..382285f 100644
--- a/src/TransverseMercatorExact.cpp
+++ b/src/TransverseMercatorExact.cpp
@@ -41,21 +41,22 @@
 
 #include <GeographicLib/TransverseMercatorExact.hpp>
 
+#if defined(_MSC_VER)
+// Squelch warnings about constant conditional expressions
+#  pragma warning (disable: 4127)
+#endif
+
 namespace GeographicLib {
 
   using namespace std;
 
-  const Math::real TransverseMercatorExact::tol_ =
-    numeric_limits<real>::epsilon();
-  const Math::real TransverseMercatorExact::tol1_ = real(0.1) * sqrt(tol_);
-  const Math::real TransverseMercatorExact::tol2_ = real(0.1) * tol_;
-  const Math::real TransverseMercatorExact::taytol_ = pow(tol_, real(0.6));
-  // Overflow value s.t. atan(overflow_) = pi/2
-  const Math::real TransverseMercatorExact::overflow_ = 1 / Math::sq(tol_);
-
   TransverseMercatorExact::TransverseMercatorExact(real a, real f, real k0,
                                                    bool extendp)
-    : _a(a)
+    : tol_(numeric_limits<real>::epsilon())
+    , tol1_(real(0.1) * sqrt(tol_))
+    , tol2_(real(0.1) * tol_)
+    , taytol_(pow(tol_, real(0.6)))
+    , _a(a)
     , _f(f <= 1 ? f : 1/f)
     , _k0(k0)
     , _mu(_f * (2 - _f))        // e^2
@@ -75,26 +76,28 @@ namespace GeographicLib {
       throw GeographicErr("Scale is not positive");
   }
 
-  const TransverseMercatorExact
-  TransverseMercatorExact::UTM(Constants::WGS84_a<real>(),
-                               Constants::WGS84_f<real>(),
-                               Constants::UTM_k0<real>());
+  const TransverseMercatorExact& TransverseMercatorExact::UTM() {
+    static const TransverseMercatorExact utm(Constants::WGS84_a(),
+                                             Constants::WGS84_f(),
+                                             Constants::UTM_k0());
+    return utm;
+  }
 
   // tau = tan(phi), taup = sinh(psi)
-  Math::real TransverseMercatorExact::taup(real tau) const throw() {
+  Math::real TransverseMercatorExact::taup(real tau) const {
     real
       tau1 = Math::hypot(real(1), tau),
       sig = sinh( _e * Math::atanh(_e * tau / tau1) );
     return Math::hypot(real(1), sig) * tau - sig * tau1;
   }
 
-  Math::real TransverseMercatorExact::taupinv(real taup) const throw() {
+  Math::real TransverseMercatorExact::taupinv(real taup) const {
     real
       // See comment in TransverseMercator.cpp about the initial guess
       tau = taup/_mv,
       stol = tol_ * max(real(1), abs(taup));
     // min iterations = 1, max iterations = 2; mean = 1.94
-    for (int i = 0; i < numit_; ++i) {
+    for (int i = 0; i < numit_ || GEOGRAPHICLIB_PANIC; ++i) {
       real
         tau1 = Math::hypot(real(1), tau),
         sig = sinh( _e * Math::atanh(_e * tau / tau1 ) ),
@@ -110,7 +113,7 @@ namespace GeographicLib {
 
   void TransverseMercatorExact::zeta(real /*u*/, real snu, real cnu, real dnu,
                                      real /*v*/, real snv, real cnv, real dnv,
-                                     real& taup, real& lam) const throw() {
+                                     real& taup, real& lam) const {
     // Lee 54.17 but write
     // atanh(snu * dnv) = asinh(snu * dnv / sqrt(cnu^2 + _mv * snu^2 * snv^2))
     // atanh(_e * snu / dnv) =
@@ -118,9 +121,9 @@ namespace GeographicLib {
     real
       d1 = sqrt(Math::sq(cnu) + _mv * Math::sq(snu * snv)),
       d2 = sqrt(_mu * Math::sq(cnu) + _mv * Math::sq(cnv)),
-      t1 = (d1 ? snu * dnv / d1 : (snu < 0 ? -overflow_ : overflow_)),
+      t1 = (d1 ? snu * dnv / d1 : (snu < 0 ? -overflow() : overflow())),
       t2 = (d2 ? sinh( _e * Math::asinh(_e * snu / d2) ) :
-            (snu < 0 ? -overflow_ : overflow_));
+            (snu < 0 ? -overflow() : overflow()));
     // psi = asinh(t1) - asinh(t2)
     // taup = sinh(psi)
     taup = t1 * Math::hypot(real(1), t2) - t2 * Math::hypot(real(1), t1);
@@ -133,7 +136,7 @@ namespace GeographicLib {
                                         real snu, real cnu, real dnu,
                                         real /*v*/,
                                         real snv, real cnv, real dnv,
-                                        real& du, real& dv) const throw() {
+                                        real& du, real& dv) const {
     // Lee 54.21 but write (1 - dnu^2 * snv^2) = (cnv^2 + _mu * snu^2 * snv^2)
     // (see A+S 16.21.4)
     real d = _mv * Math::sq(Math::sq(cnv) + _mu * Math::sq(snu * snv));
@@ -143,11 +146,11 @@ namespace GeographicLib {
 
   // Starting point for zetainv
   bool TransverseMercatorExact::zetainv0(real psi, real lam, real& u, real& v)
-    const throw() {
+    const {
     bool retval = false;
-    if (psi < -_e * Math::pi<real>()/4 &&
-        lam > (1 - 2 * _e) * Math::pi<real>()/2 &&
-        psi < lam - (1 - _e) * Math::pi<real>()/2) {
+    if (psi < -_e * Math::pi()/4 &&
+        lam > (1 - 2 * _e) * Math::pi()/2 &&
+        psi < lam - (1 - _e) * Math::pi()/2) {
       // N.B. this branch is normally not taken because psi < 0 is converted
       // psi > 0 by Forward.
       //
@@ -159,14 +162,14 @@ namespace GeographicLib {
       // Inverting this gives:
       real
         psix = 1 - psi / _e,
-        lamx = (Math::pi<real>()/2 - lam) / _e;
+        lamx = (Math::pi()/2 - lam) / _e;
       u = Math::asinh(sin(lamx) / Math::hypot(cos(lamx), sinh(psix))) *
         (1 + _mu/2);
       v = atan2(cos(lamx), sinh(psix)) * (1 + _mu/2);
       u = _Eu.K() - u;
       v = _Ev.K() - v;
-    } else if (psi < _e * Math::pi<real>()/2 &&
-               lam > (1 - 2 * _e) * Math::pi<real>()/2) {
+    } else if (psi < _e * Math::pi()/2 &&
+               lam > (1 - 2 * _e) * Math::pi()/2) {
       // At w = w0 = i * Ev.K(), we have
       //
       //     zeta = zeta0 = i * (1 - _e) * pi/2
@@ -179,14 +182,14 @@ namespace GeographicLib {
       // When inverting this, we map arg(w - w0) = [-90, 0] to
       // arg(zeta - zeta0) = [-90, 180]
       real
-        dlam = lam - (1 - _e) * Math::pi<real>()/2,
+        dlam = lam - (1 - _e) * Math::pi()/2,
         rad = Math::hypot(psi, dlam),
         // atan2(dlam-psi, psi+dlam) + 45d gives arg(zeta - zeta0) in range
         // [-135, 225).  Subtracting 180 (since multiplier is negative) makes
         // range [-315, 45).  Multiplying by 1/3 (for cube root) gives range
         // [-105, 15).  In particular the range [-90, 180] in zeta space maps
         // to [-90, 0] in w space as required.
-        ang = atan2(dlam-psi, psi+dlam) - real(0.75) * Math::pi<real>();
+        ang = atan2(dlam-psi, psi+dlam) - real(0.75) * Math::pi();
       // Error using this guess is about 0.21 * (rad/e)^(5/3)
       retval = rad < _e * taytol_;
       rad = Math::cbrt(3 / (_mv * _e) * rad);
@@ -200,15 +203,15 @@ namespace GeographicLib {
       v = Math::asinh(sin(lam) / Math::hypot(cos(lam), sinh(psi)));
       u = atan2(sinh(psi), cos(lam));
       // But scale to put 90,0 on the right place
-      u *= _Eu.K() / (Math::pi<real>()/2);
-      v *= _Eu.K() / (Math::pi<real>()/2);
+      u *= _Eu.K() / (Math::pi()/2);
+      v *= _Eu.K() / (Math::pi()/2);
     }
     return retval;
   }
 
   // Invert zeta using Newton's method
   void TransverseMercatorExact::zetainv(real taup, real lam, real& u, real& v)
-    const throw()  {
+    const  {
     real
       psi = Math::asinh(taup),
       scal = 1/Math::hypot(real(1), taup);
@@ -216,7 +219,7 @@ namespace GeographicLib {
       return;
     real stol2 = tol2_ / Math::sq(max(psi, real(1)));
     // min iterations = 2, max iterations = 6; mean = 4.0
-    for (int i = 0, trip = 0; i < numit_; ++i) {
+    for (int i = 0, trip = 0; i < numit_ || GEOGRAPHICLIB_PANIC; ++i) {
       real snu, cnu, dnu, snv, cnv, dnv;
       _Eu.sncndn(u, snu, cnu, dnu);
       _Ev.sncndn(v, snv, cnv, dnv);
@@ -241,7 +244,7 @@ namespace GeographicLib {
 
   void TransverseMercatorExact::sigma(real /*u*/, real snu, real cnu, real dnu,
                                       real v, real snv, real cnv, real dnv,
-                                      real& xi, real& eta) const throw() {
+                                      real& xi, real& eta) const {
     // Lee 55.4 writing
     // dnu^2 + dnv^2 - 1 = _mu * cnu^2 + _mv * cnv^2
     real d = _mu * Math::sq(cnu) + _mv * Math::sq(cnv);
@@ -253,7 +256,7 @@ namespace GeographicLib {
                                          real snu, real cnu, real dnu,
                                          real /*v*/,
                                          real snv, real cnv, real dnv,
-                                         real& du, real& dv) const throw() {
+                                         real& du, real& dv) const {
     // Reciprocal of 55.9: dw/ds = dn(w)^2/_mv, expanding complex dn(w) using
     // A+S 16.21.4
     real d = _mv * Math::sq(Math::sq(cnv) + _mu * Math::sq(snu * snv));
@@ -266,7 +269,7 @@ namespace GeographicLib {
 
   // Starting point for sigmainv
   bool TransverseMercatorExact::sigmainv0(real xi, real eta, real& u, real& v)
-    const throw() {
+    const {
     bool retval = false;
     if (eta > real(1.25) * _Ev.KE() ||
         (xi < -real(0.25) * _Eu.E() && xi < eta - _Ev.KE())) {
@@ -299,7 +302,7 @@ namespace GeographicLib {
         rad = Math::hypot(xi, deta),
         // Map the range [-90, 180] in sigma space to [-90, 0] in w space.  See
         // discussion in zetainv0 on the cut for ang.
-        ang = atan2(deta-xi, xi+deta) - real(0.75) * Math::pi<real>();
+        ang = atan2(deta-xi, xi+deta) - real(0.75) * Math::pi();
       // Error using this guess is about 0.068 * rad^(5/3)
       retval = rad < 2 * taytol_;
       rad = Math::cbrt(3 / _mv * rad);
@@ -316,11 +319,11 @@ namespace GeographicLib {
 
   // Invert sigma using Newton's method
   void TransverseMercatorExact::sigmainv(real xi, real eta, real& u, real& v)
-    const throw() {
+    const {
     if (sigmainv0(xi, eta, u, v))
       return;
     // min iterations = 2, max iterations = 7; mean = 3.9
-    for (int i = 0, trip = 0; i < numit_; ++i) {
+    for (int i = 0, trip = 0; i < numit_ || GEOGRAPHICLIB_PANIC; ++i) {
       real snu, cnu, dnu, snv, cnv, dnv;
       _Eu.sncndn(u, snu, cnu, dnu);
       _Ev.sncndn(v, snv, cnv, dnv);
@@ -345,7 +348,7 @@ namespace GeographicLib {
   void TransverseMercatorExact::Scale(real tau, real /*lam*/,
                                       real snu, real cnu, real dnu,
                                       real snv, real cnv, real dnv,
-                                      real& gamma, real& k) const throw() {
+                                      real& gamma, real& k) const {
     real sec2 = 1 + Math::sq(tau);    // sec(phi)^2
     // Lee 55.12 -- negated for our sign convention.  gamma gives the bearing
     // (clockwise from true north) of grid north
@@ -370,7 +373,7 @@ namespace GeographicLib {
 
   void TransverseMercatorExact::Forward(real lon0, real lat, real lon,
                                         real& x, real& y, real& gamma, real& k)
-    const throw() {
+    const {
     lon = Math::AngDiff(Math::AngNormalize(lon0), Math::AngNormalize(lon));
     // Explicitly enforce the parity
     int
@@ -385,8 +388,8 @@ namespace GeographicLib {
       lon = 180 - lon;
     }
     real
-      phi = lat * Math::degree<real>(),
-      lam = lon * Math::degree<real>(),
+      phi = lat * Math::degree(),
+      lam = lon * Math::degree(),
       tau = tanx(phi);
 
     // u,v = coordinates for the Thompson TM, Lee 54
@@ -419,7 +422,7 @@ namespace GeographicLib {
       zeta(u, snu, cnu, dnu, v, snv, cnv, dnv, tau, lam);
       tau=taupinv(tau);
       Scale(tau, lam, snu, cnu, dnu, snv, cnv, dnv, gamma, k);
-      gamma /= Math::degree<real>();
+      gamma /= Math::degree();
     }
     if (backside)
       gamma = 180 - gamma;
@@ -430,7 +433,7 @@ namespace GeographicLib {
   void TransverseMercatorExact::Reverse(real lon0, real x, real y,
                                         real& lat, real& lon,
                                         real& gamma, real& k)
-    const throw() {
+    const {
     // This undoes the steps in Forward.
     real
       xi = y / (_a * _k0),
@@ -461,13 +464,13 @@ namespace GeographicLib {
       zeta(u, snu, cnu, dnu, v, snv, cnv, dnv, tau, lam);
       tau = taupinv(tau);
       phi = atan(tau);
-      lat = phi / Math::degree<real>();
-      lon = lam / Math::degree<real>();
+      lat = phi / Math::degree();
+      lon = lam / Math::degree();
       Scale(tau, lam, snu, cnu, dnu, snv, cnv, dnv, gamma, k);
-      gamma /= Math::degree<real>();
+      gamma /= Math::degree();
     } else {
-      tau = overflow_;
-      phi = Math::pi<real>()/2;
+      tau = overflow();
+      phi = Math::pi()/2;
       lat = 90;
       lon = lam = gamma = 0;
       k = 1;
diff --git a/src/UTMUPS.cpp b/src/UTMUPS.cpp
index 88c151a..06b9f3b 100644
--- a/src/UTMUPS.cpp
+++ b/src/UTMUPS.cpp
@@ -17,24 +17,24 @@ namespace GeographicLib {
 
   using namespace std;
 
-  const Math::real UTMUPS::falseeasting_[4] =
+  const int UTMUPS::falseeasting_[4] =
     { MGRS::upseasting_ * MGRS::tile_, MGRS::upseasting_ * MGRS::tile_,
       MGRS::utmeasting_ * MGRS::tile_, MGRS::utmeasting_ * MGRS::tile_ };
-  const Math::real UTMUPS::falsenorthing_[4] =
+  const int UTMUPS::falsenorthing_[4] =
     { MGRS::upseasting_ * MGRS::tile_, MGRS::upseasting_ * MGRS::tile_,
       MGRS::maxutmSrow_ * MGRS::tile_, MGRS::minutmNrow_ * MGRS::tile_ };
-  const Math::real UTMUPS::mineasting_[4] =
+  const int UTMUPS::mineasting_[4] =
     { MGRS::minupsSind_ * MGRS::tile_, MGRS::minupsNind_ * MGRS::tile_,
       MGRS::minutmcol_ * MGRS::tile_, MGRS::minutmcol_ * MGRS::tile_ };
-  const Math::real UTMUPS::maxeasting_[4] =
+  const int UTMUPS::maxeasting_[4] =
     { MGRS::maxupsSind_ * MGRS::tile_, MGRS::maxupsNind_ * MGRS::tile_,
       MGRS::maxutmcol_ * MGRS::tile_, MGRS::maxutmcol_ * MGRS::tile_ };
-  const Math::real UTMUPS::minnorthing_[4] =
+  const int UTMUPS::minnorthing_[4] =
     { MGRS::minupsSind_ * MGRS::tile_, MGRS::minupsNind_ * MGRS::tile_,
       MGRS::minutmSrow_ * MGRS::tile_,
       (MGRS::minutmNrow_ + MGRS::minutmSrow_ - MGRS::maxutmSrow_)
       * MGRS::tile_ };
-  const Math::real UTMUPS::maxnorthing_[4] =
+  const int UTMUPS::maxnorthing_[4] =
     { MGRS::maxupsSind_ * MGRS::tile_, MGRS::maxupsNind_ * MGRS::tile_,
       (MGRS::maxutmSrow_ + MGRS::maxutmNrow_ - MGRS::minutmNrow_) * MGRS::tile_,
       MGRS::maxutmNrow_ * MGRS::tile_ };
@@ -74,7 +74,7 @@ namespace GeographicLib {
     if (zone1 == INVALID) {
       zone = zone1;
       northp = northp1;
-      x = y = gamma = k = Math::NaN<real>();
+      x = y = gamma = k = Math::NaN();
       return;
     }
     real x1, y1, gamma1, k1;
@@ -90,14 +90,14 @@ namespace GeographicLib {
         throw GeographicErr("Longitude " + Utility::str(lon)
                             + "d more than 60d from center of UTM zone "
                             + Utility::str(zone1));
-      TransverseMercator::UTM.Forward(lon0, lat, lon, x1, y1, gamma1, k1);
+      TransverseMercator::UTM().Forward(lon0, lat, lon, x1, y1, gamma1, k1);
     } else {
       if (abs(lat) < 70)
         // Check isn't really necessary ... (see above).
         throw GeographicErr("Latitude " + Utility::str(lat)
                             + "d more than 20d from "
                             + (northp1 ? "N" : "S") + " pole");
-      PolarStereographic::UPS.Forward(northp1, lat, lon, x1, y1, gamma1, k1);
+      PolarStereographic::UPS().Forward(northp1, lat, lon, x1, y1, gamma1, k1);
     }
     int ind = (utmp ? 2 : 0) + (northp1 ? 1 : 0);
     x1 += falseeasting_[ind];
@@ -119,7 +119,7 @@ namespace GeographicLib {
                        real& lat, real& lon, real& gamma, real& k,
                        bool mgrslimits) {
     if (zone == INVALID || Math::isnan(x) || Math::isnan(y)) {
-      lat = lon = gamma = k = Math::NaN<real>();
+      lat = lon = gamma = k = Math::NaN();
       return;
     }
     if (!(zone >= MINZONE && zone <= MAXZONE))
@@ -131,10 +131,10 @@ namespace GeographicLib {
     x -= falseeasting_[ind];
     y -= falsenorthing_[ind];
     if (utmp)
-      TransverseMercator::UTM.Reverse(CentralMeridian(zone),
-                                      x, y, lat, lon, gamma, k);
+      TransverseMercator::UTM().Reverse(CentralMeridian(zone),
+                                        x, y, lat, lon, gamma, k);
     else
-      PolarStereographic::UPS.Reverse(northp, x, y, lat, lon, gamma, k);
+      PolarStereographic::UPS().Reverse(northp, x, y, lat, lon, gamma, k);
   }
 
   void UTMUPS::CheckLatLon(real lat, real lon) {
@@ -215,60 +215,63 @@ namespace GeographicLib {
     unsigned zlen = unsigned(zonestr.size());
     if (zlen == 0)
       throw GeographicErr("Empty zone specification");
-    if (zlen > 3)
-      throw GeographicErr("More than 3 characters in zone specification "
+    // Longest zone spec is 32north, 42south, invalid = 7
+    if (zlen > 7)
+      throw GeographicErr("More than 7 characters in zone specification "
                           + zonestr);
-    if (zlen == 3 &&
-        toupper(zonestr[0]) == 'I' &&
-        toupper(zonestr[1]) == 'N' &&
-        toupper(zonestr[2]) == 'V') {
+
+    const char* c = zonestr.c_str();
+    char* q;
+    int zone1 = strtol(c, &q, 10);
+    // if (zone1 == 0) zone1 = UPS; (not necessary)
+
+    if (zone1 == UPS) {
+      if (!(q == c))
+        // Don't allow 0n as an alternative to n for UPS coordinates
+        throw GeographicErr("Illegal zone 0 in " + zonestr +
+                            ", use just the hemisphere for UPS");
+    } else if (!(zone1 >= MINUTMZONE && zone1 <= MAXUTMZONE))
+      throw GeographicErr("Zone " + Utility::str(zone1)
+                          + " not in range [1, 60]");
+    else if (!isdigit(zonestr[0]))
+      throw GeographicErr("Must use unsigned number for zone "
+                          + Utility::str(zone1));
+    else if (q - c > 2)
+      throw GeographicErr("More than 2 digits use to specify zone "
+                          + Utility::str(zone1));
+
+    string hemi = zonestr.substr(q - c);
+    transform(hemi.begin(), hemi.end(), hemi.begin(), (int(*)(int))tolower);
+    if (q == c && (hemi == "inv" || hemi == "invalid")) {
       zone = INVALID;
       northp = false;
       return;
     }
-    char hemi = char(toupper(zonestr[zlen - 1]));
-    bool northp1 = hemi == 'N';
-    if (! (northp1 || hemi == 'S'))
-      throw GeographicErr(string("Illegal hemisphere letter ") + hemi + " in "
-                          + zonestr + ", specify N or S");
-    if (zlen == 1)
-      zone = UPS;
-    else {
-      const char* c = zonestr.c_str();
-      char* q;
-      int zone1 = strtol(c, &q, 10);
-      if (q == c)
-        throw GeographicErr("No zone number found in " + zonestr);
-      if (q - c != int(zlen) - 1)
-        throw GeographicErr("Extra text " +
-                            zonestr.substr(q - c, int(zlen) - 1 - (q - c)) +
-                            " in UTM/UPS zone " + zonestr);
-      if (zone1 == UPS)
-        // Don't allow 0N as an alternative to N for UPS coordinates
-        throw GeographicErr("Illegal zone 0 in " + zonestr +
-                            ", use just " + hemi + " for UPS");
-      if (!(zone1 >= MINUTMZONE && zone1 <= MAXUTMZONE))
-        throw GeographicErr("Zone " + Utility::str(zone1)
-                            + " not in range [1, 60]");
-      zone = zone1;
-    }
+    bool northp1 = hemi == "north" || hemi == "n";
+    if (!(northp1 || hemi == "south" || hemi == "s"))
+      throw GeographicErr(string("Illegal hemisphere ") + hemi + " in "
+                          + zonestr + ", specify north or south");
+    zone = zone1;
     northp = northp1;
   }
 
-  std::string UTMUPS::EncodeZone(int zone, bool northp) {
+  std::string UTMUPS::EncodeZone(int zone, bool northp, bool abbrev) {
     if (zone == INVALID)
-      return string("INV");
+      return string(abbrev ? "inv" : "invalid");
     if (!(zone >= MINZONE && zone <= MAXZONE))
-        throw GeographicErr("Zone " + Utility::str(zone)
-                            + " not in range [0, 60]");
+      throw GeographicErr("Zone " + Utility::str(zone)
+                          + " not in range [0, 60]");
     ostringstream os;
     if (zone != UPS)
       os << setfill('0') << setw(2) << zone;
-    os << (northp ? 'N' : 'S');
+    if (abbrev)
+      os << (northp ? 'n' : 's');
+    else
+      os << (northp ? "north" : "south");
     return os.str();
   }
 
-  void UTMUPS::DecodeEPSG(int epsg, int& zone, bool& northp) throw() {
+  void UTMUPS::DecodeEPSG(int epsg, int& zone, bool& northp) {
     northp = false;
     if (epsg >= epsg01N && epsg <= epsg60N) {
       zone = (epsg - epsg01N) + MINUTMZONE;
@@ -285,7 +288,7 @@ namespace GeographicLib {
     }
   }
 
-  int UTMUPS::EncodeEPSG(int zone, bool northp) throw() {
+  int UTMUPS::EncodeEPSG(int zone, bool northp) {
     int epsg = -1;
     if (zone == UPS)
       epsg = epsgS;
@@ -296,6 +299,6 @@ namespace GeographicLib {
     return epsg;
   }
 
-  Math::real UTMUPS::UTMShift() throw() { return real(MGRS::utmNshift_); }
+  Math::real UTMUPS::UTMShift() { return real(MGRS::utmNshift_); }
 
 } // namespace GeographicLib
diff --git a/src/Utility.cpp b/src/Utility.cpp
index b8c6223..68fb74d 100644
--- a/src/Utility.cpp
+++ b/src/Utility.cpp
@@ -7,8 +7,14 @@
  * http://geographiclib.sourceforge.net/
  **********************************************************************/
 
+#include <cstdlib>
 #include <GeographicLib/Utility.hpp>
 
+#if defined(_MSC_VER)
+// Squelch warnings about unsafe use of getenv
+#  pragma warning (disable: 4996)
+#endif
+
 namespace GeographicLib {
 
   using namespace std;
@@ -39,4 +45,17 @@ namespace GeographicLib {
     return true;
   }
 
+  int Utility::set_digits(int ndigits) {
+#if GEOGRAPHICLIB_PRECISION == 5
+    if (ndigits <= 0) {
+      char* digitenv = getenv("GEOGRAPHICLIB_DIGITS");
+      if (digitenv)
+        ndigits = strtol(digitenv, NULL, 0);
+      if (ndigits <= 0)
+        ndigits = 256;
+    }
+#endif
+    return Math::set_digits(ndigits);
+  }
+
 } // namespace GeographicLib
diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt
index 9875058..3b80bf5 100644
--- a/tools/CMakeLists.txt
+++ b/tools/CMakeLists.txt
@@ -18,7 +18,8 @@ foreach (TOOL ${TOOLS})
   set_source_files_properties (${TOOL}.cpp PROPERTIES
     OBJECT_DEPENDS ${PROJECT_BINARY_DIR}/man/${TOOL}.usage)
 
-  target_link_libraries (${TOOL} ${PROJECT_LIBRARIES})
+  target_link_libraries (${TOOL} ${PROJECT_LIBRARIES}
+    ${QUAD_LIBRARIES} ${MPFR_LIBRARIES})
 
 endforeach ()
 
@@ -72,9 +73,14 @@ add_test (NAME GeoConvert0
   COMMAND GeoConvert -p -3 -m --input-string "33.3 44.4")
 set_tests_properties (GeoConvert0
   PROPERTIES PASS_REGULAR_EXPRESSION "38SMB4484")
-add_test (NAME GeoConvert1 COMMAND GeoConvert -d --input-string "38smb")
-set_tests_properties (GeoConvert1
-  PROPERTIES PASS_REGULAR_EXPRESSION "32d59'14\\.1\"N 044d27'53\\.4\"E")
+if (NOT GEOGRAPHICLIB_PRECISION EQUAL 4)
+  # I/O for boost-quad has a bug where precision 0 is interpreted as
+  # printed all the digits of the number (instead of printing the
+  # integer portion).
+  add_test (NAME GeoConvert1 COMMAND GeoConvert -d --input-string "38smb")
+  set_tests_properties (GeoConvert1
+    PROPERTIES PASS_REGULAR_EXPRESSION "32d59'14\\.1\"N 044d27'53\\.4\"E")
+endif ()
 add_test (NAME GeoConvert2
   COMMAND GeoConvert -p -2 --input-string "30d30'30\" 30.50833")
 set_tests_properties (GeoConvert2
@@ -164,11 +170,11 @@ set_tests_properties (GeodSolve11
 # Check fix for inverse geodesics on extreme prolate/oblate ellipsoids
 # Reported 2012-08-29 Stefan Guenther <stefan.gunther at embl.de>; fixed 2012-10-07
 add_test (NAME GeodSolve12 COMMAND
-  GeodSolve -i -e 89.8 -1.83 -p 0 --input-string "0 0 -10 160")
+  GeodSolve -i -e 89.8 -1.83 -p 1 --input-string "0 0 -10 160")
 add_test (NAME GeodSolve13 COMMAND
-  GeodSolve -i -e 89.8 -1.83 -p 0 --input-string "0 0 -10 160" -E)
+  GeodSolve -i -e 89.8 -1.83 -p 1 --input-string "0 0 -10 160" -E)
 set_tests_properties (GeodSolve12 GeodSolve13
-  PROPERTIES PASS_REGULAR_EXPRESSION "120\\.27.* 105\\.15.* 267")
+  PROPERTIES PASS_REGULAR_EXPRESSION "120\\.27.* 105\\.15.* 266\\.7")
 
 # Check fix for pole-encircling bug found 2011-03-16
 add_test (NAME Planimeter0
@@ -201,13 +207,13 @@ set_tests_properties (Planimeter5
   "3 539297\\.[0-9]+ 1247615283[89]\\.[0-9]+")
 # Check fix for Planimeter lon12 rounding bug found 2012-12-03
 add_test (NAME Planimeter6
-  COMMAND Planimeter --input-string "9 -0.00000000000001;9 180;9 0")
+  COMMAND Planimeter -p 8 --input-string "9 -0.00000000000001;9 180;9 0")
 add_test (NAME Planimeter7
-  COMMAND Planimeter --input-string "9  0.00000000000001;9 0;9 180")
+  COMMAND Planimeter -p 8 --input-string "9  0.00000000000001;9 0;9 180")
 add_test (NAME Planimeter8
-  COMMAND Planimeter --input-string "9  0.00000000000001;9 180;9 0")
+  COMMAND Planimeter -p 8 --input-string "9  0.00000000000001;9 180;9 0")
 add_test (NAME Planimeter9
-  COMMAND Planimeter --input-string "9 -0.00000000000001;9 0;9 180")
+  COMMAND Planimeter -p 8 --input-string "9 -0.00000000000001;9 0;9 180")
 set_tests_properties (Planimeter6 Planimeter7 Planimeter8 Planimeter9
   PROPERTIES PASS_REGULAR_EXPRESSION "3 36026861\\.[0-9]+ -?0.0[0-9]+")
 
@@ -273,7 +279,8 @@ set_tests_properties (TransverseMercatorProj0
 add_test (NAME TransverseMercatorProj1 COMMAND
   TransverseMercatorProj -k 1 -r --input-string "0 10001965.7293127228")
 set_tests_properties (TransverseMercatorProj1
-  PROPERTIES PASS_REGULAR_EXPRESSION "90\\.0+ 0\\.0+ 0\\.0+ (1\\.0+|0\\.9999+)")
+  PROPERTIES PASS_REGULAR_EXPRESSION
+  "(90\\.0+ 0\\.0+ 0\\.0+|(90\\.0+|89\\.99999999999[0-9]+) -?180\\.0+ -?180\\.0+) (1\\.0000+|0\\.9999+)")
 
 if (EXISTS ${GEOGRAPHICLIB_DATA}/geoids/egm96-5.pgm)
   # Check fix for single-cell cache bug found 2010-11-23
diff --git a/tools/CartConvert.cpp b/tools/CartConvert.cpp
index 45f504c..ba59173 100644
--- a/tools/CartConvert.cpp
+++ b/tools/CartConvert.cpp
@@ -39,10 +39,11 @@ int main(int argc, char* argv[]) {
   try {
     using namespace GeographicLib;
     typedef Math::real real;
+    Utility::set_digits();
     bool localcartesian = false, reverse = false;
     real
-      a = Constants::WGS84_a<real>(),
-      f = Constants::WGS84_f<real>();
+      a = Constants::WGS84_a(),
+      f = Constants::WGS84_f();
     real lat0 = 0, lon0 = 0, h0 = 0;
     std::string istring, ifile, ofile, cdelim;
     char lsep = ';';
@@ -176,17 +177,17 @@ int main(int argc, char* argv[]) {
             lc.Reverse(x, y, z, lat, lon, h);
           else
             ec.Reverse(x, y, z, lat, lon, h);
-          *output << Utility::str<real>(lat, 15) << " "
-                  << Utility::str<real>(lon, 15) << " "
-                  << Utility::str<real>(h, 12) << eol;
+          *output << Utility::str(lat, 15 + Math::extra_digits()) << " "
+                  << Utility::str(lon, 15 + Math::extra_digits()) << " "
+                  << Utility::str(h, 12 + Math::extra_digits()) << eol;
         } else {
           if (localcartesian)
             lc.Forward(lat, lon, h, x, y, z);
           else
             ec.Forward(lat, lon, h, x, y, z);
-          *output << Utility::str<real>(x, 10) << " "
-                  << Utility::str<real>(y, 10) << " "
-                  << Utility::str<real>(z, 10) << eol;
+          *output << Utility::str(x, 10 + Math::extra_digits()) << " "
+                  << Utility::str(y, 10 + Math::extra_digits()) << " "
+                  << Utility::str(z, 10 + Math::extra_digits()) << eol;
         }
       }
       catch (const std::exception& e) {
diff --git a/tools/ConicProj.cpp b/tools/ConicProj.cpp
index 2135f63..583ec69 100644
--- a/tools/ConicProj.cpp
+++ b/tools/ConicProj.cpp
@@ -39,11 +39,13 @@ int main(int argc, char* argv[]) {
   try {
     using namespace GeographicLib;
     typedef Math::real real;
+    Utility::set_digits();
     bool lcc = false, albers = false, reverse = false;
     real lat1 = 0, lat2 = 0, lon0 = 0, k1 = 1;
     real
-      a = Constants::WGS84_a<real>(),
-      f = Constants::WGS84_f<real>();
+      a = Constants::WGS84_a(),
+      f = Constants::WGS84_f();
+    int prec = 6;
     std::string istring, ifile, ofile, cdelim;
     char lsep = ';';
 
@@ -105,6 +107,15 @@ int main(int argc, char* argv[]) {
           return 1;
         }
         m += 2;
+      } else if (arg == "-p") {
+        if (++m == argc) return usage(1, true);
+        try {
+          prec = Utility::num<int>(std::string(argv[m]));
+        }
+        catch (const std::exception&) {
+          std::cerr << "Precision " << argv[m] << " is not a number\n";
+          return 1;
+        }
       } else if (arg == "--input-string") {
         if (++m == argc) return usage(1, true);
         istring = argv[m];
@@ -183,6 +194,9 @@ int main(int argc, char* argv[]) {
       albers ? AlbersEqualArea(a, f, lat1, lat2, k1)
       : AlbersEqualArea(1, 0, 0, 0, 1);
 
+    // Max precision = 10: 0.1 nm in distance, 10^-15 deg (= 0.11 nm),
+    // 10^-11 sec (= 0.3 nm).
+    prec = std::min(10 + Math::extra_digits(), std::max(0, prec));
     std::string s;
     int retval = 0;
     std::cout << std::fixed;
@@ -214,19 +228,19 @@ int main(int argc, char* argv[]) {
             lproj.Reverse(lon0, x, y, lat, lon, gamma, k);
           else
             aproj.Reverse(lon0, x, y, lat, lon, gamma, k);
-          *output << Utility::str<real>(lat, 15) << " "
-                  << Utility::str<real>(lon, 15) << " "
-                  << Utility::str<real>(gamma, 16) << " "
-                  << Utility::str<real>(k, 16) << eol;
+          *output << Utility::str(lat, prec + 5) << " "
+                  << Utility::str(lon, prec + 5) << " "
+                  << Utility::str(gamma, prec + 6) << " "
+                  << Utility::str(k, prec + 6) << eol;
         } else {
           if (lcc)
             lproj.Forward(lon0, lat, lon, x, y, gamma, k);
           else
             aproj.Forward(lon0, lat, lon, x, y, gamma, k);
-          *output << Utility::str<real>(x, 10) << " "
-                  << Utility::str<real>(y, 10) << " "
-                  << Utility::str<real>(gamma, 16) << " "
-                  << Utility::str<real>(k, 16) << eol;
+          *output << Utility::str(x, prec) << " "
+                  << Utility::str(y, prec) << " "
+                  << Utility::str(gamma, prec + 6) << " "
+                  << Utility::str(k, prec + 6) << eol;
         }
       }
       catch (const std::exception& e) {
diff --git a/tools/GeoConvert.cpp b/tools/GeoConvert.cpp
index 51e026a..5f69916 100644
--- a/tools/GeoConvert.cpp
+++ b/tools/GeoConvert.cpp
@@ -40,6 +40,7 @@ int main(int argc, char* argv[]) {
   try {
     using namespace GeographicLib;
     typedef Math::real real;
+    Utility::set_digits();
     enum { GEOGRAPHIC, DMS, UTMUPS, MGRS, CONVERGENCE };
     int outputmode = GEOGRAPHIC;
     int prec = 0;
@@ -47,7 +48,7 @@ int main(int argc, char* argv[]) {
     bool centerp = true, swaplatlong = false;
     std::string istring, ifile, ofile, cdelim;
     char lsep = ';', dmssep = char(0);
-    bool sethemisphere = false, northp = false;
+    bool sethemisphere = false, northp = false, abbrev = true;
 
     for (int m = 1; m < argc; ++m) {
       std::string arg(argv[m]);
@@ -69,6 +70,10 @@ int main(int argc, char* argv[]) {
         centerp = false;
       else if (arg == "-w")
         swaplatlong = true;
+      else if (arg == "-l")
+        abbrev = false;
+      else if (arg == "-a")
+        abbrev = true;
       else if (arg == "-p") {
         if (++m == argc) return usage(1, true);
         try {
@@ -196,8 +201,8 @@ int main(int argc, char* argv[]) {
           break;
         case UTMUPS:
           os = (sethemisphere
-                ? p.AltUTMUPSRepresentation(northp, prec)
-                : p.AltUTMUPSRepresentation(prec));
+                ? p.AltUTMUPSRepresentation(northp, prec, abbrev)
+                : p.AltUTMUPSRepresentation(prec, abbrev));
           break;
         case MGRS:
           os = p.AltMGRSRepresentation(prec);
@@ -207,9 +212,9 @@ int main(int argc, char* argv[]) {
             real
               gamma = p.AltConvergence(),
               k = p.AltScale();
-            int prec1 = std::max(-5, std::min( Math::extradigits + 8, prec ));
-            os = Utility::str<real>(gamma, prec1 + 5) + " "
-              + Utility::str<real>(k, prec1 + 7);
+            int prec1 = std::max(-5, std::min(Math::extra_digits() + 8, prec));
+            os = Utility::str(gamma, prec1 + 5) + " "
+              + Utility::str(k, prec1 + 7);
           }
         }
       }
diff --git a/tools/GeodSolve.cpp b/tools/GeodSolve.cpp
index d3671f6..3fcd964 100644
--- a/tools/GeodSolve.cpp
+++ b/tools/GeodSolve.cpp
@@ -59,7 +59,7 @@ std::string DistanceStrings(real s12, real a12,
   using namespace GeographicLib;
   std::string s;
   if (full || !arcmode)
-    s += Utility::str<real>(s12, prec);
+    s += Utility::str(s12, prec);
   if (full)
     s += " ";
   if (full || arcmode)
@@ -75,11 +75,12 @@ real ReadDistance(const std::string& s, bool arcmode) {
 int main(int argc, char* argv[]) {
   try {
     using namespace GeographicLib;
+    Utility::set_digits();
     bool linecalc = false, inverse = false, arcmode = false,
       dms = false, full = false, exact = false;
     real
-      a = Constants::WGS84_a<real>(),
-      f = Constants::WGS84_f<real>();
+      a = Constants::WGS84_a(),
+      f = Constants::WGS84_f();
     real lat1, lon1, azi1, lat2, lon2, azi2, s12, m12, a12, M12, M21, S12;
     real azi2sense = 0;
     int prec = 3;
@@ -218,7 +219,7 @@ int main(int argc, char* argv[]) {
 
     // Max precision = 10: 0.1 nm in distance, 10^-15 deg (= 0.11 nm),
     // 10^-11 sec (= 0.3 nm).
-    prec = std::min(10 + Math::extradigits, std::max(0, prec));
+    prec = std::min(10 + Math::extra_digits(), std::max(0, prec));
     std::string s;
     int retval = 0;
     while (std::getline(*input, s)) {
@@ -254,10 +255,10 @@ int main(int argc, char* argv[]) {
           *output << AzimuthString(azi2 + azi2sense, prec, dms, dmssep) << " "
                   << DistanceStrings(s12, a12, full, arcmode, prec, dms);
           if (full)
-            *output << " " << Utility::str<real>(m12, prec)
-                    << " " << Utility::str<real>(M12, prec+7)
-                    << " " << Utility::str<real>(M21, prec+7)
-                    << " " << Utility::str<real>(S12, std::max(prec-7, 0));
+            *output << " " << Utility::str(m12, prec)
+                    << " " << Utility::str(M12, prec+7)
+                    << " " << Utility::str(M21, prec+7)
+                    << " " << Utility::str(S12, std::max(prec-7, 0));
           *output << eol;
         } else {
           if (linecalc) {
@@ -309,10 +310,10 @@ int main(int argc, char* argv[]) {
           if (full)
             *output << " "
                     << DistanceStrings(s12, a12, full, arcmode, prec, dms)
-                    << " " << Utility::str<real>(m12, prec)
-                    << " " << Utility::str<real>(M12, prec+7)
-                    << " " << Utility::str<real>(M21, prec+7)
-                    << " " << Utility::str<real>(S12, std::max(prec-7, 0));
+                    << " " << Utility::str(m12, prec)
+                    << " " << Utility::str(M12, prec+7)
+                    << " " << Utility::str(M21, prec+7)
+                    << " " << Utility::str(S12, std::max(prec-7, 0));
           *output << eol;
         }
       }
diff --git a/tools/GeodesicProj.cpp b/tools/GeodesicProj.cpp
index f7493e2..1912de5 100644
--- a/tools/GeodesicProj.cpp
+++ b/tools/GeodesicProj.cpp
@@ -44,11 +44,13 @@ int main(int argc, char* argv[]) {
   try {
     using namespace GeographicLib;
     typedef Math::real real;
+    Utility::set_digits();
     bool azimuthal = false, cassini = false, gnomonic = false, reverse = false;
     real lat0 = 0, lon0 = 0;
     real
-      a = Constants::WGS84_a<real>(),
-      f = Constants::WGS84_f<real>();
+      a = Constants::WGS84_a(),
+      f = Constants::WGS84_f();
+    int prec = 6;
     std::string istring, ifile, ofile, cdelim;
     char lsep = ';';
 
@@ -82,6 +84,15 @@ int main(int argc, char* argv[]) {
           return 1;
         }
         m += 2;
+      } else if (arg == "-p") {
+        if (++m == argc) return usage(1, true);
+        try {
+          prec = Utility::num<int>(std::string(argv[m]));
+        }
+        catch (const std::exception&) {
+          std::cerr << "Precision " << argv[m] << " is not a number\n";
+          return 1;
+        }
       } else if (arg == "--input-string") {
         if (++m == argc) return usage(1, true);
         istring = argv[m];
@@ -159,6 +170,9 @@ int main(int argc, char* argv[]) {
     const AzimuthalEquidistant az(geod);
     const Gnomonic gn(geod);
 
+    // Max precision = 10: 0.1 nm in distance, 10^-15 deg (= 0.11 nm),
+    // 10^-11 sec (= 0.3 nm).
+    prec = std::min(10 + Math::extra_digits(), std::max(0, prec));
     std::string s;
     int retval = 0;
     std::cout << std::fixed;
@@ -192,10 +206,10 @@ int main(int argc, char* argv[]) {
             az.Reverse(lat0, lon0, x, y, lat, lon, azi, rk);
           else
             gn.Reverse(lat0, lon0, x, y, lat, lon, azi, rk);
-          *output << Utility::str<real>(lat, 15) << " "
-                  << Utility::str<real>(lon, 15) << " "
-                  << Utility::str<real>(azi, 15) << " "
-                  << Utility::str<real>(rk, 16) << eol;
+          *output << Utility::str(lat, prec + 5) << " "
+                  << Utility::str(lon, prec + 5) << " "
+                  << Utility::str(azi, prec + 5) << " "
+                  << Utility::str(rk, prec + 6) << eol;
         } else {
           if (cassini)
             cs.Forward(lat, lon, x, y, azi, rk);
@@ -203,10 +217,10 @@ int main(int argc, char* argv[]) {
             az.Forward(lat0, lon0, lat, lon, x, y, azi, rk);
           else
             gn.Forward(lat0, lon0, lat, lon, x, y, azi, rk);
-          *output << Utility::str<real>(x, 10) << " "
-                  << Utility::str<real>(y, 10) << " "
-                  << Utility::str<real>(azi, 15) << " "
-                  << Utility::str<real>(rk, 16) << eol;
+          *output << Utility::str(x, prec) << " "
+                  << Utility::str(y, prec) << " "
+                  << Utility::str(azi, prec + 5) << " "
+                  << Utility::str(rk, prec + 6) << eol;
         }
       }
       catch (const std::exception& e) {
diff --git a/tools/GeoidEval.cpp b/tools/GeoidEval.cpp
index 8d92c6d..40700ff 100644
--- a/tools/GeoidEval.cpp
+++ b/tools/GeoidEval.cpp
@@ -42,6 +42,7 @@ int main(int argc, char* argv[]) {
   try {
     using namespace GeographicLib;
     typedef Math::real real;
+    Utility::set_digits();
     bool cacheall = false, cachearea = false, verbose = false,
       cubic = true, gradp = false;
     real caches, cachew, cachen, cachee;
@@ -260,21 +261,21 @@ int main(int argc, char* argv[]) {
           if (heightmult) {
             real h = g(p.Latitude(), p.Longitude());
             *output << s
-                    << Utility::str<real>(height + real(heightmult) * h, 4)
+                    << Utility::str(height + real(heightmult) * h, 4)
                     << suff << eol;
           } else {
             if (gradp) {
             real gradn, grade;
             real h = g(p.Latitude(), p.Longitude(), gradn, grade);
-            *output << Utility::str<real>(h, 4) << " "
-                    << Utility::str<real>(gradn * 1e6, 2)
+            *output << Utility::str(h, 4) << " "
+                    << Utility::str(gradn * 1e6, 2)
                     << (Math::isnan(gradn) ? " " : "e-6 ")
-                    << Utility::str<real>(grade * 1e6, 2)
+                    << Utility::str(grade * 1e6, 2)
                     << (Math::isnan(grade) ? "" : "e-6")
                     << eol;
             } else {
             real h = g(p.Latitude(), p.Longitude());
-            *output << Utility::str<real>(h, 4) << eol;
+            *output << Utility::str(h, 4) << eol;
             }
           }
         }
diff --git a/tools/Gravity.cpp b/tools/Gravity.cpp
index f6e4799..8073168 100644
--- a/tools/Gravity.cpp
+++ b/tools/Gravity.cpp
@@ -43,6 +43,7 @@ int main(int argc, char* argv[]) {
   try {
     using namespace GeographicLib;
     typedef Math::real real;
+    Utility::set_digits();
     bool verbose = false;
     std::string dir;
     std::string model = GravityModel::DefaultGravityName();
@@ -77,11 +78,12 @@ int main(int argc, char* argv[]) {
       else if (arg == "-c") {
         if (m + 2 >= argc) return usage(1, true);
         try {
+          using std::abs;
           DMS::flag ind;
           lat = DMS::Decode(std::string(argv[++m]), ind);
           if (ind == DMS::LONGITUDE)
             throw GeographicErr("Bad hemisphere letter on latitude");
-          if (!(std::abs(lat) <= 90))
+          if (!(abs(lat) <= 90))
             throw GeographicErr("Latitude not in [-90d, 90d]");
           h = Utility::num<real>(std::string(argv[++m]));
           circle = true;
@@ -177,22 +179,22 @@ int main(int argc, char* argv[]) {
 
     switch (mode) {
     case GRAVITY:
-      prec = std::min(16, prec < 0 ? 5 : prec);
+      prec = std::min(16 + Math::extra_digits(), prec < 0 ? 5 : prec);
       break;
     case DISTURBANCE:
     case ANOMALY:
-      prec = std::min(14, prec < 0 ? 3 : prec);
+      prec = std::min(14 + Math::extra_digits(), prec < 0 ? 3 : prec);
       break;
     case UNDULATION:
     default:
-      prec = std::min(12, prec < 0 ? 4 : prec);
+      prec = std::min(12 + Math::extra_digits(), prec < 0 ? 4 : prec);
       break;
     }
     int retval = 0;
     try {
       const GravityModel g(model, dir);
       if (circle) {
-        if (!Math::isfinite<real>(h))
+        if (!Math::isfinite(h))
           throw GeographicErr("Bad height");
         else if (mode == UNDULATION && h != 0)
           throw GeographicErr("Height should be zero for geoid undulations");
@@ -252,9 +254,9 @@ int main(int argc, char* argv[]) {
               } else {
                 g.Gravity(lat, lon, h, gx, gy, gz);
               }
-              *output << Utility::str<real>(gx, prec) << " "
-                      << Utility::str<real>(gy, prec) << " "
-                      << Utility::str<real>(gz, prec) << eol;
+              *output << Utility::str(gx, prec) << " "
+                      << Utility::str(gy, prec) << " "
+                      << Utility::str(gz, prec) << eol;
             }
             break;
           case DISTURBANCE:
@@ -266,9 +268,9 @@ int main(int argc, char* argv[]) {
                 g.Disturbance(lat, lon, h, deltax, deltay, deltaz);
               }
               // Convert to mGals
-              *output << Utility::str<real>(deltax * 1e5, prec) << " "
-                      << Utility::str<real>(deltay * 1e5, prec) << " "
-                      << Utility::str<real>(deltaz * 1e5, prec)
+              *output << Utility::str(deltax * 1e5, prec) << " "
+                      << Utility::str(deltay * 1e5, prec) << " "
+                      << Utility::str(deltaz * 1e5, prec)
                       << eol;
             }
             break;
@@ -282,16 +284,16 @@ int main(int argc, char* argv[]) {
               Dg01 *= 1e5;      // Convert to mGals
               xi *= 3600;       // Convert to arcsecs
               eta *= 3600;
-              *output << Utility::str<real>(Dg01, prec) << " "
-                      << Utility::str<real>(xi, prec) << " "
-                      << Utility::str<real>(eta, prec) << eol;
+              *output << Utility::str(Dg01, prec) << " "
+                      << Utility::str(xi, prec) << " "
+                      << Utility::str(eta, prec) << eol;
             }
             break;
           case UNDULATION:
           default:
             {
               real N = circle ? c.GeoidHeight(lon) : g.GeoidHeight(lat, lon);
-              *output << Utility::str<real>(N, prec) << eol;
+              *output << Utility::str(N, prec) << eol;
             }
             break;
           }
diff --git a/tools/MagneticField.cpp b/tools/MagneticField.cpp
index d5e21ac..69753b4 100644
--- a/tools/MagneticField.cpp
+++ b/tools/MagneticField.cpp
@@ -41,6 +41,7 @@ int main(int argc, char* argv[]) {
   try {
     using namespace GeographicLib;
     typedef Math::real real;
+    Utility::set_digits();
     bool verbose = false;
     std::string dir;
     std::string model = MagneticModel::DefaultMagneticName();
@@ -74,12 +75,13 @@ int main(int argc, char* argv[]) {
       } else if (arg == "-c") {
         if (m + 3 >= argc) return usage(1, true);
         try {
+          using std::abs;
           time = Utility::fractionalyear<real>(std::string(argv[++m]));
           DMS::flag ind;
           lat = DMS::Decode(std::string(argv[++m]), ind);
           if (ind == DMS::LONGITUDE)
             throw GeographicErr("Bad hemisphere letter on latitude");
-          if (!(std::abs(lat) <= 90))
+          if (!(abs(lat) <= 90))
             throw GeographicErr("Latitude not in [-90d, 90d]");
           h = Utility::num<real>(std::string(argv[++m]));
           timeset = false;
@@ -198,12 +200,12 @@ int main(int argc, char* argv[]) {
 
     tguard = std::max(real(0), tguard);
     hguard = std::max(real(0), hguard);
-    prec = std::min(10, std::max(0, prec));
+    prec = std::min(10 + Math::extra_digits(), std::max(0, prec));
     int retval = 0;
     try {
       const MagneticModel m(model, dir);
       if ((timeset || circle)
-          && (!Math::isfinite<real>(time) ||
+          && (!Math::isfinite(time) ||
               time < m.MinTime() - tguard ||
               time > m.MaxTime() + tguard))
         throw GeographicErr("Time " + Utility::str(time) +
@@ -211,7 +213,7 @@ int main(int argc, char* argv[]) {
                             Utility::str(m.MinTime()) + "," +
                             Utility::str(m.MaxTime()) + "]");
       if (circle
-          && (!Math::isfinite<real>(h) ||
+          && (!Math::isfinite(h) ||
               h < m.MinHeight() - hguard ||
               h > m.MaxHeight() + hguard))
         throw GeographicErr("Height " + Utility::str(h/1000) +
@@ -312,19 +314,19 @@ int main(int argc, char* argv[]) {
 
           *output << DMS::Encode(D, prec + 1, DMS::NUMBER) << " "
                   << DMS::Encode(I, prec + 1, DMS::NUMBER) << " "
-                  << Utility::str<real>(H, prec) << " "
-                  << Utility::str<real>(by, prec) << " "
-                  << Utility::str<real>(bx, prec) << " "
-                  << Utility::str<real>(-bz, prec) << " "
-                  << Utility::str<real>(F, prec) << eol;
+                  << Utility::str(H, prec) << " "
+                  << Utility::str(by, prec) << " "
+                  << Utility::str(bx, prec) << " "
+                  << Utility::str(-bz, prec) << " "
+                  << Utility::str(F, prec) << eol;
           if (rate)
             *output << DMS::Encode(Dt, prec + 1, DMS::NUMBER) << " "
                     << DMS::Encode(It, prec + 1, DMS::NUMBER) << " "
-                    << Utility::str<real>(Ht, prec) << " "
-                    << Utility::str<real>(byt, prec) << " "
-                    << Utility::str<real>(bxt, prec) << " "
-                    << Utility::str<real>(-bzt, prec) << " "
-                    << Utility::str<real>(Ft, prec) << eol;
+                    << Utility::str(Ht, prec) << " "
+                    << Utility::str(byt, prec) << " "
+                    << Utility::str(bxt, prec) << " "
+                    << Utility::str(-bzt, prec) << " "
+                    << Utility::str(Ft, prec) << eol;
         }
         catch (const std::exception& e) {
           *output << "ERROR: " << e.what() << "\n";
diff --git a/tools/Makefile.am b/tools/Makefile.am
index 2fbf610..9b90a5e 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -3,9 +3,8 @@
 #
 # Copyright (C) 2009, Francesco P. Lovergine <frankie at debian.org>
 
-AM_CPPFLAGS = -Wall -funroll-loops -finline-functions -fomit-frame-pointer
-INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
-           -I$(top_builddir)/man -I$(top_srcdir)/man
+AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \
+           -I$(top_builddir)/man -I$(top_srcdir)/man -Wall -Wextra
 
 LDADD = $(top_builddir)/src/libGeographic.la
 DEPS = $(top_builddir)/src/libGeographic.la
@@ -19,6 +18,7 @@ bin_PROGRAMS = CartConvert \
 	Gravity \
 	MagneticField \
 	Planimeter \
+	RhumbSolve \
 	TransverseMercatorProj
 
 CartConvert_SOURCES = CartConvert.cpp \
@@ -115,12 +115,21 @@ Planimeter_SOURCES = Planimeter.cpp \
 	../include/GeographicLib/Accumulator.hpp \
 	../include/GeographicLib/Constants.hpp \
 	../include/GeographicLib/DMS.hpp \
+	../include/GeographicLib/Ellipsoid.hpp \
 	../include/GeographicLib/GeoCoords.hpp \
 	../include/GeographicLib/Geodesic.hpp \
 	../include/GeographicLib/Math.hpp \
 	../include/GeographicLib/PolygonArea.hpp \
 	../include/GeographicLib/UTMUPS.hpp \
 	../include/GeographicLib/Utility.hpp
+RhumbSolve_SOURCES = RhumbSolve.cpp \
+	../man/RhumbSolve.usage \
+	../include/GeographicLib/Config.h \
+	../include/GeographicLib/Constants.hpp \
+	../include/GeographicLib/DMS.hpp \
+	../include/GeographicLib/Ellipsoid.hpp \
+	../include/GeographicLib/Math.hpp \
+	../include/GeographicLib/Utility.hpp
 TransverseMercatorProj_SOURCES = TransverseMercatorProj.cpp \
 	../man/TransverseMercatorProj.usage \
 	../include/GeographicLib/Config.h \
diff --git a/tools/Makefile.in b/tools/Makefile.in
index 187b449..5d42efa 100644
--- a/tools/Makefile.in
+++ b/tools/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.12.2 from Makefile.am.
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -21,23 +21,51 @@
 
 
 VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
     esac; \
-    test $$am__dry = yes; \
-  }
+  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@
@@ -60,9 +88,10 @@ target_triplet = @target@
 bin_PROGRAMS = CartConvert$(EXEEXT) ConicProj$(EXEEXT) \
 	GeoConvert$(EXEEXT) GeodSolve$(EXEEXT) GeodesicProj$(EXEEXT) \
 	GeoidEval$(EXEEXT) Gravity$(EXEEXT) MagneticField$(EXEEXT) \
-	Planimeter$(EXEEXT) TransverseMercatorProj$(EXEEXT)
+	Planimeter$(EXEEXT) RhumbSolve$(EXEEXT) \
+	TransverseMercatorProj$(EXEEXT)
 subdir = tools
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
 	$(top_srcdir)/depcomp
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
@@ -81,6 +110,10 @@ am_CartConvert_OBJECTS = CartConvert.$(OBJEXT)
 CartConvert_OBJECTS = $(am_CartConvert_OBJECTS)
 CartConvert_LDADD = $(LDADD)
 CartConvert_DEPENDENCIES = $(top_builddir)/src/libGeographic.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_ConicProj_OBJECTS = ConicProj.$(OBJEXT)
 ConicProj_OBJECTS = $(am_ConicProj_OBJECTS)
 ConicProj_LDADD = $(LDADD)
@@ -113,6 +146,10 @@ am_Planimeter_OBJECTS = Planimeter.$(OBJEXT)
 Planimeter_OBJECTS = $(am_Planimeter_OBJECTS)
 Planimeter_LDADD = $(LDADD)
 Planimeter_DEPENDENCIES = $(top_builddir)/src/libGeographic.la
+am_RhumbSolve_OBJECTS = RhumbSolve.$(OBJEXT)
+RhumbSolve_OBJECTS = $(am_RhumbSolve_OBJECTS)
+RhumbSolve_LDADD = $(LDADD)
+RhumbSolve_DEPENDENCIES = $(top_builddir)/src/libGeographic.la
 am_TransverseMercatorProj_OBJECTS = TransverseMercatorProj.$(OBJEXT)
 TransverseMercatorProj_OBJECTS = $(am_TransverseMercatorProj_OBJECTS)
 TransverseMercatorProj_LDADD = $(LDADD)
@@ -146,48 +183,98 @@ am__uninstall_files_from_dir = { \
          $(am__cd) "$$dir" && rm -f $$files; }; \
   }
 SCRIPTS = $(sbin_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 = 
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/include/GeographicLib
 depcomp = $(SHELL) $(top_srcdir)/depcomp
 am__depfiles_maybe = depfiles
 am__mv = mv -f
 CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(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) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
+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) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=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) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
+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 = $(CartConvert_SOURCES) $(ConicProj_SOURCES) \
 	$(GeoConvert_SOURCES) $(GeodSolve_SOURCES) \
 	$(GeodesicProj_SOURCES) $(GeoidEval_SOURCES) \
 	$(Gravity_SOURCES) $(MagneticField_SOURCES) \
-	$(Planimeter_SOURCES) $(TransverseMercatorProj_SOURCES)
+	$(Planimeter_SOURCES) $(RhumbSolve_SOURCES) \
+	$(TransverseMercatorProj_SOURCES)
 DIST_SOURCES = $(CartConvert_SOURCES) $(ConicProj_SOURCES) \
 	$(GeoConvert_SOURCES) $(GeodSolve_SOURCES) \
 	$(GeodesicProj_SOURCES) $(GeoidEval_SOURCES) \
 	$(Gravity_SOURCES) $(MagneticField_SOURCES) \
-	$(Planimeter_SOURCES) $(TransverseMercatorProj_SOURCES)
+	$(Planimeter_SOURCES) $(RhumbSolve_SOURCES) \
+	$(TransverseMercatorProj_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
+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
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -256,7 +343,6 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 POD2HTML = @POD2HTML@
 POD2MAN = @POD2MAN@
-POW_LIB = @POW_LIB@
 RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
@@ -320,9 +406,8 @@ target_vendor = @target_vendor@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-AM_CPPFLAGS = -Wall -funroll-loops -finline-functions -fomit-frame-pointer
-INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
-           -I$(top_builddir)/man -I$(top_srcdir)/man
+AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \
+           -I$(top_builddir)/man -I$(top_srcdir)/man -Wall -Wextra
 
 LDADD = $(top_builddir)/src/libGeographic.la
 DEPS = $(top_builddir)/src/libGeographic.la
@@ -428,6 +513,7 @@ Planimeter_SOURCES = Planimeter.cpp \
 	../include/GeographicLib/Accumulator.hpp \
 	../include/GeographicLib/Constants.hpp \
 	../include/GeographicLib/DMS.hpp \
+	../include/GeographicLib/Ellipsoid.hpp \
 	../include/GeographicLib/GeoCoords.hpp \
 	../include/GeographicLib/Geodesic.hpp \
 	../include/GeographicLib/Math.hpp \
@@ -435,6 +521,15 @@ Planimeter_SOURCES = Planimeter.cpp \
 	../include/GeographicLib/UTMUPS.hpp \
 	../include/GeographicLib/Utility.hpp
 
+RhumbSolve_SOURCES = RhumbSolve.cpp \
+	../man/RhumbSolve.usage \
+	../include/GeographicLib/Config.h \
+	../include/GeographicLib/Constants.hpp \
+	../include/GeographicLib/DMS.hpp \
+	../include/GeographicLib/Ellipsoid.hpp \
+	../include/GeographicLib/Math.hpp \
+	../include/GeographicLib/Utility.hpp
+
 TransverseMercatorProj_SOURCES = TransverseMercatorProj.cpp \
 	../man/TransverseMercatorProj.usage \
 	../include/GeographicLib/Config.h \
@@ -499,10 +594,12 @@ install-binPROGRAMS: $(bin_PROGRAMS)
 	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; \
+	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|.*|.|' \
+	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 } \
@@ -523,7 +620,8 @@ uninstall-binPROGRAMS:
 	@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)/' `; \
+	      -e 's/$$/$(EXEEXT)/' \
+	`; \
 	test -n "$$list" || exit 0; \
 	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
 	cd "$(DESTDIR)$(bindir)" && rm -f $$files
@@ -536,36 +634,50 @@ clean-binPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
+
 CartConvert$(EXEEXT): $(CartConvert_OBJECTS) $(CartConvert_DEPENDENCIES) $(EXTRA_CartConvert_DEPENDENCIES) 
 	@rm -f CartConvert$(EXEEXT)
-	$(CXXLINK) $(CartConvert_OBJECTS) $(CartConvert_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(CartConvert_OBJECTS) $(CartConvert_LDADD) $(LIBS)
+
 ConicProj$(EXEEXT): $(ConicProj_OBJECTS) $(ConicProj_DEPENDENCIES) $(EXTRA_ConicProj_DEPENDENCIES) 
 	@rm -f ConicProj$(EXEEXT)
-	$(CXXLINK) $(ConicProj_OBJECTS) $(ConicProj_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(ConicProj_OBJECTS) $(ConicProj_LDADD) $(LIBS)
+
 GeoConvert$(EXEEXT): $(GeoConvert_OBJECTS) $(GeoConvert_DEPENDENCIES) $(EXTRA_GeoConvert_DEPENDENCIES) 
 	@rm -f GeoConvert$(EXEEXT)
-	$(CXXLINK) $(GeoConvert_OBJECTS) $(GeoConvert_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(GeoConvert_OBJECTS) $(GeoConvert_LDADD) $(LIBS)
+
 GeodSolve$(EXEEXT): $(GeodSolve_OBJECTS) $(GeodSolve_DEPENDENCIES) $(EXTRA_GeodSolve_DEPENDENCIES) 
 	@rm -f GeodSolve$(EXEEXT)
-	$(CXXLINK) $(GeodSolve_OBJECTS) $(GeodSolve_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(GeodSolve_OBJECTS) $(GeodSolve_LDADD) $(LIBS)
+
 GeodesicProj$(EXEEXT): $(GeodesicProj_OBJECTS) $(GeodesicProj_DEPENDENCIES) $(EXTRA_GeodesicProj_DEPENDENCIES) 
 	@rm -f GeodesicProj$(EXEEXT)
-	$(CXXLINK) $(GeodesicProj_OBJECTS) $(GeodesicProj_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(GeodesicProj_OBJECTS) $(GeodesicProj_LDADD) $(LIBS)
+
 GeoidEval$(EXEEXT): $(GeoidEval_OBJECTS) $(GeoidEval_DEPENDENCIES) $(EXTRA_GeoidEval_DEPENDENCIES) 
 	@rm -f GeoidEval$(EXEEXT)
-	$(CXXLINK) $(GeoidEval_OBJECTS) $(GeoidEval_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(GeoidEval_OBJECTS) $(GeoidEval_LDADD) $(LIBS)
+
 Gravity$(EXEEXT): $(Gravity_OBJECTS) $(Gravity_DEPENDENCIES) $(EXTRA_Gravity_DEPENDENCIES) 
 	@rm -f Gravity$(EXEEXT)
-	$(CXXLINK) $(Gravity_OBJECTS) $(Gravity_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(Gravity_OBJECTS) $(Gravity_LDADD) $(LIBS)
+
 MagneticField$(EXEEXT): $(MagneticField_OBJECTS) $(MagneticField_DEPENDENCIES) $(EXTRA_MagneticField_DEPENDENCIES) 
 	@rm -f MagneticField$(EXEEXT)
-	$(CXXLINK) $(MagneticField_OBJECTS) $(MagneticField_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(MagneticField_OBJECTS) $(MagneticField_LDADD) $(LIBS)
+
 Planimeter$(EXEEXT): $(Planimeter_OBJECTS) $(Planimeter_DEPENDENCIES) $(EXTRA_Planimeter_DEPENDENCIES) 
 	@rm -f Planimeter$(EXEEXT)
-	$(CXXLINK) $(Planimeter_OBJECTS) $(Planimeter_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(Planimeter_OBJECTS) $(Planimeter_LDADD) $(LIBS)
+
+RhumbSolve$(EXEEXT): $(RhumbSolve_OBJECTS) $(RhumbSolve_DEPENDENCIES) $(EXTRA_RhumbSolve_DEPENDENCIES) 
+	@rm -f RhumbSolve$(EXEEXT)
+	$(AM_V_CXXLD)$(CXXLINK) $(RhumbSolve_OBJECTS) $(RhumbSolve_LDADD) $(LIBS)
+
 TransverseMercatorProj$(EXEEXT): $(TransverseMercatorProj_OBJECTS) $(TransverseMercatorProj_DEPENDENCIES) $(EXTRA_TransverseMercatorProj_DEPENDENCIES) 
 	@rm -f TransverseMercatorProj$(EXEEXT)
-	$(CXXLINK) $(TransverseMercatorProj_OBJECTS) $(TransverseMercatorProj_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(CXXLINK) $(TransverseMercatorProj_OBJECTS) $(TransverseMercatorProj_LDADD) $(LIBS)
 install-sbinSCRIPTS: $(sbin_SCRIPTS)
 	@$(NORMAL_INSTALL)
 	@list='$(sbin_SCRIPTS)'; test -n "$(sbindir)" || list=; \
@@ -617,28 +729,29 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Gravity.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/MagneticField.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Planimeter.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/RhumbSolve.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/TransverseMercatorProj.Po at am__quote@
 
 .cpp.o:
- at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ 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@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ $<
 
 .cpp.obj:
- at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ 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@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
 .cpp.lo:
- at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ 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@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -646,26 +759,15 @@ mostlyclean-libtool:
 clean-libtool:
 	-rm -rf .libs _libs
 
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
+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`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	$(am__define_uniq_tagged_files); \
 	shift; \
 	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
 	  test -n "$$unique" || unique=$$empty_fix; \
@@ -677,15 +779,11 @@ TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 	      $$unique; \
 	  fi; \
 	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+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
@@ -694,9 +792,10 @@ GTAGS:
 	here=`$(am__cd) $(top_builddir) && pwd` \
 	  && $(am__cd) $(top_srcdir) \
 	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
 
-cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
 	case "$(srcdir)" in \
 	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
 	  *) sdir=$(subdir)/$(srcdir) ;; \
@@ -852,20 +951,20 @@ uninstall-am: uninstall-binPROGRAMS uninstall-sbinSCRIPTS
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
-	clean-generic clean-libtool cscopelist ctags 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-pdf install-pdf-am \
-	install-ps install-ps-am install-sbinSCRIPTS 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 uninstall uninstall-am uninstall-binPROGRAMS \
-	uninstall-sbinSCRIPTS
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+	clean-binPROGRAMS 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-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-pdf \
+	install-pdf-am install-ps install-ps-am install-sbinSCRIPTS \
+	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 uninstall uninstall-am \
+	uninstall-binPROGRAMS uninstall-sbinSCRIPTS
 
 geographiclib-get-geoids: geographiclib-get-geoids.sh
 	sed -e "s%@GEOGRAPHICLIB_DATA@%$(geographiclib_data)%" $< > $@
diff --git a/tools/Makefile.mk b/tools/Makefile.mk
index 42ddc12..b93cb7d 100644
--- a/tools/Makefile.mk
+++ b/tools/Makefile.mk
@@ -7,6 +7,7 @@ PROGRAMS = CartConvert \
 	Gravity \
 	MagneticField \
 	Planimeter \
+	RhumbSolve \
 	TransverseMercatorProj
 SCRIPTS = geographiclib-get-geoids \
 	geographiclib-get-gravity \
@@ -28,29 +29,31 @@ PREFIX = /usr/local
 GEOGRAPHICLIB_DATA = $(PREFIX)/share/GeographicLib
 
 CC = g++ -g
-CXXFLAGS = -g -Wall -Wextra -O3
+CXXFLAGS = -g -Wall -Wextra -O3 -std=c++0x
 
 CPPFLAGS = -I$(INCLUDEPATH) -I../man $(DEFINES)
 LDLIBS = -L$(LIBPATH) -l$(LIBSTEM)
+EXTRALIBS =
 
 $(PROGRAMS): $(LIBPATH)/$(LIBRARY)
-	$(CC) $(LDFLAGS) -o $@ $@.o $(LDLIBS)
+	$(CC) $(LDFLAGS) -o $@ $@.o $(LDLIBS) $(EXTRALIBS)
 
 VPATH = ../include/GeographicLib ../man
 
 clean:
 	rm -f *.o $(SCRIPTS)
 
-GeoConvert: GeoConvert.o
-TransverseMercatorProj: TransverseMercatorProj.o
 CartConvert: CartConvert.o
+ConicProj: ConicProj.o
+GeoConvert: GeoConvert.o
 GeodSolve: GeodSolve.o
 GeodesicProj: GeodesicProj.o
 GeoidEval: GeoidEval.o
 Gravity: Gravity.o
 MagneticField: MagneticField.o
 Planimeter: Planimeter.o
-ConicProj: ConicProj.o
+RhumbSolve: RhumbSolve.o
+TransverseMercatorProj: TransverseMercatorProj.o
 
 CartConvert.o: CartConvert.usage Config.h Constants.hpp DMS.hpp Geocentric.hpp \
 	LocalCartesian.hpp Math.hpp Utility.hpp
@@ -74,8 +77,10 @@ MagneticField.o: MagneticField.usage Config.h CircularEngine.hpp Constants.hpp \
 	DMS.hpp Geocentric.hpp MagneticCircle.hpp MagneticModel.hpp Math.hpp \
 	SphericalEngine.hpp SphericalHarmonic.hpp Utility.hpp
 Planimeter.o: Planimeter.usage Config.h Accumulator.hpp Constants.hpp DMS.hpp \
-	GeoCoords.hpp Geodesic.hpp Math.hpp PolygonArea.hpp UTMUPS.hpp \
-	Utility.hpp
+	Ellipsoid.hpp GeoCoords.hpp Geodesic.hpp Math.hpp PolygonArea.hpp \
+	UTMUPS.hpp Utility.hpp
+RhumbSolve.o: RhumbSolve.usage Config.h Constants.hpp DMS.hpp Ellipsoid.hpp \
+	Math.hpp Utility.hpp
 TransverseMercatorProj.o: TransverseMercatorProj.usage Config.h Constants.hpp \
 	DMS.hpp EllipticFunction.hpp Math.hpp TransverseMercator.hpp \
 	TransverseMercatorExact.hpp Utility.hpp
diff --git a/tools/Planimeter.cpp b/tools/Planimeter.cpp
index d76f294..84062c4 100644
--- a/tools/Planimeter.cpp
+++ b/tools/Planimeter.cpp
@@ -2,7 +2,7 @@
  * \file Planimeter.cpp
  * \brief Command line utility for measuring the area of geodesic polygons
  *
- * Copyright (c) Charles Karney (2010-2012) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2010-2014) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * http://geographiclib.sourceforge.net/
  *
@@ -31,6 +31,7 @@
 #include <GeographicLib/DMS.hpp>
 #include <GeographicLib/Utility.hpp>
 #include <GeographicLib/GeoCoords.hpp>
+#include <GeographicLib/Ellipsoid.hpp>
 
 #if defined(_MSC_VER)
 // Squelch warnings about constant conditional expressions
@@ -43,10 +44,13 @@ int main(int argc, char* argv[]) {
   try {
     using namespace GeographicLib;
     typedef Math::real real;
+    Utility::set_digits();
     real
-      a = Constants::WGS84_a<real>(),
-      f = Constants::WGS84_f<real>();
-    bool reverse = false, sign = true, polyline = false;
+      a = Constants::WGS84_a(),
+      f = Constants::WGS84_f();
+    bool reverse = false, sign = true, polyline = false,
+      exact = false, authalic = false;
+    int prec = 6;
     std::string istring, ifile, ofile, cdelim;
     char lsep = ';';
 
@@ -69,6 +73,21 @@ int main(int argc, char* argv[]) {
           return 1;
         }
         m += 2;
+      } else if (arg == "-p") {
+        if (++m == argc) return usage(1, true);
+        try {
+          prec = Utility::num<int>(std::string(argv[m]));
+        }
+        catch (const std::exception&) {
+          std::cerr << "Precision " << argv[m] << " is not a number\n";
+          return 1;
+        }
+      } else if (arg == "-E") {
+        exact = true;
+        authalic = false;
+      } else if (arg == "-Q") {
+        exact = false;
+        authalic = true;
       } else if (arg == "--input-string") {
         if (++m == argc) return usage(1, true);
         istring = argv[m];
@@ -134,10 +153,21 @@ int main(int argc, char* argv[]) {
     }
     std::ostream* output = !ofile.empty() ? &outfile : &std::cout;
 
+    const Ellipsoid ellip(a, f);
+    if (authalic) {
+      using std::sqrt;
+      a = sqrt(ellip.Area() / (4 * Math::pi()));
+      f = 0;
+    }
     const Geodesic geod(a, f);
+    const GeodesicExact geode(a, f);
     PolygonArea poly(geod, polyline);
+    PolygonAreaExact polye(geode, polyline);
     GeoCoords p;
 
+    // Max precision = 10: 0.1 nm in distance, 10^-15 deg (= 0.11 nm),
+    // 10^-11 sec (= 0.3 nm).
+    prec = std::min(10 + Math::extra_digits(), std::max(0, prec));
     std::string s;
     real perimeter, area;
     unsigned num;
@@ -162,28 +192,34 @@ int main(int argc, char* argv[]) {
         }
       }
       if (endpoly) {
-        num = poly.Compute(reverse, sign, perimeter, area);
+        num = exact ? polye.Compute(reverse, sign, perimeter, area) :
+          poly.Compute(reverse, sign, perimeter, area);
         if (num > 0) {
-          *output << num << " "
-                  << Utility::str<real>(perimeter, 8 + Math::extradigits+1);
-          if (!polyline)
-            *output << " " << Utility::str<real>(area, 3  + Math::extradigits+1);
+          *output << num << " " << Utility::str(perimeter, prec);
+          if (!polyline) {
+            *output << " " << Utility::str(area, std::max(0, prec - 5));
+          }
           *output << eol;
         }
-        poly.Clear();
+        exact ? polye.Clear() : poly.Clear();
         eol = "\n";
-      } else
-        poly.AddPoint(p.Latitude(), p.Longitude());
+      } else {
+        exact ? polye.AddPoint(p.Latitude(), p.Longitude()) :
+          poly.AddPoint(authalic ? ellip.AuthalicLatitude(p.Latitude()) :
+                        p.Latitude(),
+                        p.Longitude());
+      }
     }
-    num = poly.Compute(reverse, sign, perimeter, area);
+    num = exact ? polye.Compute(reverse, sign, perimeter, area):
+      poly.Compute(reverse, sign, perimeter, area);
     if (num > 0) {
-      *output << num << " "
-              << Utility::str<real>(perimeter, 8 + Math::extradigits+1);
-      if (!polyline)
-        *output << " " << Utility::str<real>(area, 3 + Math::extradigits+1);
+      *output << num << " " << Utility::str(perimeter, prec);
+      if (!polyline) {
+        *output << " " << Utility::str(area, std::max(0, prec - 5));
+      }
       *output << eol;
     }
-    poly.Clear();
+    exact ? polye.Clear() : poly.Clear();
     eol = "\n";
     return 0;
   }
diff --git a/tools/RhumbSolve.cpp b/tools/RhumbSolve.cpp
new file mode 100644
index 0000000..c695d93
--- /dev/null
+++ b/tools/RhumbSolve.cpp
@@ -0,0 +1,249 @@
+/**
+ * \file RhumbSolve.cpp
+ * \brief Command line utility for rhumb line calculations
+ *
+ * Copyright (c) Charles Karney (2014) <charles at karney.com> and licensed
+ * under the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ **********************************************************************/
+
+#include <iostream>
+#include <sstream>
+#include <string>
+#include <sstream>
+#include <fstream>
+#include <cmath>
+#include <limits>
+#include <GeographicLib/Rhumb.hpp>
+#include <GeographicLib/DMS.hpp>
+#include <GeographicLib/Utility.hpp>
+
+#if defined(_MSC_VER)
+// Squelch warnings about constant conditional expressions and potentially
+// uninitialized local variables
+#  pragma warning (disable: 4127 4701)
+#endif
+
+#include "RhumbSolve.usage"
+
+using namespace GeographicLib;
+typedef Math::real real;
+
+std::string LatLonString(real lat, real lon, int prec, bool dms, char dmssep) {
+  return dms ?
+    DMS::Encode(lat, prec + 5, DMS::LATITUDE, dmssep) + " " +
+    DMS::Encode(lon, prec + 5, DMS::LONGITUDE, dmssep) :
+    DMS::Encode(lat, prec + 5, DMS::NUMBER) + " " +
+    DMS::Encode(lon, prec + 5, DMS::NUMBER);
+}
+
+std::string AzimuthString(real azi, int prec, bool dms, char dmssep) {
+  return dms ? DMS::Encode(azi, prec + 5, DMS::AZIMUTH, dmssep) :
+    DMS::Encode(azi >= 180 ? azi - 360 : azi, prec + 5, DMS::NUMBER);
+}
+
+int main(int argc, char* argv[]) {
+  try {
+    Utility::set_digits();
+    bool linecalc = false, inverse = false, dms = false, exact = true;
+    real
+      a = Constants::WGS84_a(),
+      f = Constants::WGS84_f();
+    real lat1, lon1, azi12 = Math::NaN(), lat2, lon2, s12;
+    int prec = 3;
+    std::string istring, ifile, ofile, cdelim;
+    char lsep = ';', dmssep = char(0);
+
+    for (int m = 1; m < argc; ++m) {
+      std::string arg(argv[m]);
+      if (arg == "-i") {
+        inverse = true;
+        linecalc = false;
+      } else if (arg == "-l") {
+        inverse = false;
+        linecalc = true;
+        if (m + 3 >= argc) return usage(1, true);
+        try {
+          DMS::DecodeLatLon(std::string(argv[m + 1]), std::string(argv[m + 2]),
+                            lat1, lon1);
+          azi12 = DMS::DecodeAzimuth(std::string(argv[m + 3]));
+        }
+        catch (const std::exception& e) {
+          std::cerr << "Error decoding arguments of -l: " << e.what() << "\n";
+          return 1;
+        }
+        m += 3;
+      } else if (arg == "-e") {
+        if (m + 2 >= argc) return usage(1, true);
+        try {
+          a = Utility::num<real>(std::string(argv[m + 1]));
+          f = Utility::fract<real>(std::string(argv[m + 2]));
+        }
+        catch (const std::exception& e) {
+          std::cerr << "Error decoding arguments of -e: " << e.what() << "\n";
+          return 1;
+        }
+        m += 2;
+      }
+      else if (arg == "-d") {
+        dms = true;
+        dmssep = '\0';
+      } else if (arg == "-:") {
+        dms = true;
+        dmssep = ':';
+      } else if (arg == "-p") {
+        if (++m == argc) return usage(1, true);
+        try {
+          prec = Utility::num<int>(std::string(argv[m]));
+        }
+        catch (const std::exception&) {
+          std::cerr << "Precision " << argv[m] << " is not a number\n";
+          return 1;
+        }
+      } else if (arg == "-s")
+        exact = false;
+      else if (arg == "--input-string") {
+        if (++m == argc) return usage(1, true);
+        istring = argv[m];
+      } else if (arg == "--input-file") {
+        if (++m == argc) return usage(1, true);
+        ifile = argv[m];
+      } else if (arg == "--output-file") {
+        if (++m == argc) return usage(1, true);
+        ofile = argv[m];
+      } else if (arg == "--line-separator") {
+        if (++m == argc) return usage(1, true);
+        if (std::string(argv[m]).size() != 1) {
+          std::cerr << "Line separator must be a single character\n";
+          return 1;
+        }
+        lsep = argv[m][0];
+      } else if (arg == "--comment-delimiter") {
+        if (++m == argc) return usage(1, true);
+        cdelim = argv[m];
+      } else if (arg == "--version") {
+        std::cout
+          << argv[0] << ": GeographicLib version "
+          << GEOGRAPHICLIB_VERSION_STRING << "\n";
+        return 0;
+      } else
+        return usage(!(arg == "-h" || arg == "--help"), arg != "--help");
+    }
+
+    if (!ifile.empty() && !istring.empty()) {
+      std::cerr << "Cannot specify --input-string and --input-file together\n";
+      return 1;
+    }
+    if (ifile == "-") ifile.clear();
+    std::ifstream infile;
+    std::istringstream instring;
+    if (!ifile.empty()) {
+      infile.open(ifile.c_str());
+      if (!infile.is_open()) {
+        std::cerr << "Cannot open " << ifile << " for reading\n";
+        return 1;
+      }
+    } else if (!istring.empty()) {
+      std::string::size_type m = 0;
+      while (true) {
+        m = istring.find(lsep, m);
+        if (m == std::string::npos)
+          break;
+        istring[m] = '\n';
+      }
+      instring.str(istring);
+    }
+    std::istream* input = !ifile.empty() ? &infile :
+      (!istring.empty() ? &instring : &std::cin);
+
+    std::ofstream outfile;
+    if (ofile == "-") ofile.clear();
+    if (!ofile.empty()) {
+      outfile.open(ofile.c_str());
+      if (!outfile.is_open()) {
+        std::cerr << "Cannot open " << ofile << " for writing\n";
+        return 1;
+      }
+    }
+    std::ostream* output = !ofile.empty() ? &outfile : &std::cout;
+
+    const Rhumb rh(a, f, exact);
+    // Max precision = 10: 0.1 nm in distance, 10^-15 deg (= 0.11 nm),
+    // 10^-11 sec (= 0.3 nm).
+    prec = std::min(10 + Math::extra_digits(), std::max(0, prec));
+    int retval = 0;
+    std::string s;
+    if (linecalc) {
+      const RhumbLine rhl(rh.Line(lat1, lon1, azi12));
+      while (std::getline(*input, s)) {
+        try {
+          std::istringstream str(s);
+          if (!(str >> s12))
+            throw GeographicErr("Incomplete input: " + s);
+          std::string strc;
+          if (str >> strc)
+            throw GeographicErr("Extraneous input: " + strc);
+          rhl.Position(s12, lat2, lon2);
+          *output << LatLonString(lat2, lon2, prec, dms, dmssep) << "\n";
+        }
+        catch (const std::exception& e) {
+          // Write error message cout so output lines match input lines
+          *output << "ERROR: " << e.what() << "\n";
+          retval = 1;
+        }
+      }
+    } else if (inverse) {
+      while (std::getline(*input, s)) {
+        try {
+          std::istringstream str(s);
+          std::string slat1, slon1, slat2, slon2;
+          if (!(str >> slat1 >> slon1 >> slat2 >> slon2))
+            throw GeographicErr("Incomplete input: " + s);
+          std::string strc;
+          if (str >> strc)
+            throw GeographicErr("Extraneous input: " + strc);
+          DMS::DecodeLatLon(slat1, slon1, lat1, lon1);
+          DMS::DecodeLatLon(slat2, slon2, lat2, lon2);
+          rh.Inverse(lat1, lon1, lat2, lon2, s12, azi12);
+          *output << AzimuthString(azi12, prec, dms, dmssep) << " "
+                  << Utility::str(s12, prec) << "\n";
+        }
+        catch (const std::exception& e) {
+          // Write error message cout so output lines match input lines
+          *output << "ERROR: " << e.what() << "\n";
+          retval = 1;
+        }
+      }
+    } else {
+      while (std::getline(*input, s)) {
+        try {
+          std::istringstream str(s);
+          std::string slat1, slon1, sazi;
+          if (!(str >> slat1 >> slon1 >> sazi >> s12))
+            throw GeographicErr("Incomplete input: " + s);
+          std::string strc;
+          if (str >> strc)
+            throw GeographicErr("Extraneous input: " + strc);
+          DMS::DecodeLatLon(slat1, slon1, lat1, lon1);
+          azi12 = DMS::DecodeAzimuth(sazi);
+          rh.Direct(lat1, lon1, azi12, s12, lat2, lon2);
+          *output << LatLonString(lat2, lon2, prec, dms, dmssep) << "\n";
+        }
+        catch (const std::exception& e) {
+          // Write error message cout so output lines match input lines
+          *output << "ERROR: " << e.what() << "\n";
+          retval = 1;
+        }
+      }
+    }
+    return retval;
+  }
+  catch (const std::exception& e) {
+    std::cerr << "Caught exception: " << e.what() << "\n";
+    return 1;
+  }
+  catch (...) {
+    std::cerr << "Caught unknown exception\n";
+    return 1;
+  }
+}
diff --git a/tools/TransverseMercatorProj.cpp b/tools/TransverseMercatorProj.cpp
index 39831c3..8cfc0b4 100644
--- a/tools/TransverseMercatorProj.cpp
+++ b/tools/TransverseMercatorProj.cpp
@@ -41,12 +41,14 @@ int main(int argc, char* argv[]) {
   try {
     using namespace GeographicLib;
     typedef Math::real real;
+    Utility::set_digits();
     bool exact = true, extended = false, series = false, reverse = false;
     real
-      a = Constants::WGS84_a<real>(),
-      f = Constants::WGS84_f<real>(),
-      k0 = Constants::UTM_k0<real>(),
+      a = Constants::WGS84_a(),
+      f = Constants::WGS84_f(),
+      k0 = Constants::UTM_k0(),
       lon0 = 0;
+    int prec = 6;
     std::string istring, ifile, ofile, cdelim;
     char lsep = ';';
 
@@ -99,6 +101,15 @@ int main(int argc, char* argv[]) {
           return 1;
         }
         m += 2;
+      } else if (arg == "-p") {
+        if (++m == argc) return usage(1, true);
+        try {
+          prec = Utility::num<int>(std::string(argv[m]));
+        }
+        catch (const std::exception&) {
+          std::cerr << "Precision " << argv[m] << " is not a number\n";
+          return 1;
+        }
       } else if (arg == "--input-string") {
         if (++m == argc) return usage(1, true);
         istring = argv[m];
@@ -171,6 +182,9 @@ int main(int argc, char* argv[]) {
       exact ? TransverseMercatorExact(a, f, k0, extended)
       : TransverseMercatorExact(1, real(0.1), 1, false);
 
+    // Max precision = 10: 0.1 nm in distance, 10^-15 deg (= 0.11 nm),
+    // 10^-11 sec (= 0.3 nm).
+    prec = std::min(10 + Math::extra_digits(), std::max(0, prec));
     std::string s;
     int retval = 0;
     std::cout << std::fixed;
@@ -203,19 +217,19 @@ int main(int argc, char* argv[]) {
             TMS.Reverse(lon0, x, y, lat, lon, gamma, k);
           else
             TME.Reverse(lon0, x, y, lat, lon, gamma, k);
-          *output << Utility::str<real>(lat, 15) << " "
-                  << Utility::str<real>(lon, 15) << " "
-                  << Utility::str<real>(gamma, 16) << " "
-                  << Utility::str<real>(k, 16) << eol;
+          *output << Utility::str(lat, prec + 5) << " "
+                  << Utility::str(lon, prec + 5) << " "
+                  << Utility::str(gamma, prec + 6) << " "
+                  << Utility::str(k, prec + 6) << eol;
         } else {
           if (series)
             TMS.Forward(lon0, lat, lon, x, y, gamma, k);
           else
             TME.Forward(lon0, lat, lon, x, y, gamma, k);
-          *output << Utility::str<real>(x, 10) << " "
-                  << Utility::str<real>(y, 10) << " "
-                  << Utility::str<real>(gamma, 16) << " "
-                  << Utility::str<real>(k, 16) << eol;
+          *output << Utility::str(x, prec) << " "
+                  << Utility::str(y, prec) << " "
+                  << Utility::str(gamma, prec + 6) << " "
+                  << Utility::str(k, prec + 6) << eol;
         }
       }
       catch (const std::exception& e) {
diff --git a/tools/geographiclib-get-geoids.sh b/tools/geographiclib-get-geoids.sh
index 619a4cc..e2f6365 100644
--- a/tools/geographiclib-get-geoids.sh
+++ b/tools/geographiclib-get-geoids.sh
@@ -103,7 +103,7 @@ if test -z "$DEBUG"; then
 trap 'trap "" 0; test "$TEMP" && rm -rf "$TEMP"; exit 1' 1 2 3 9 15
 trap            'test "$TEMP" && rm -rf "$TEMP"'            0
 fi
-TEMP=`mktemp --tmpdir --quiet --directory $NAME-XXXXXXXX`
+TEMP=`mktemp -d -q -t $NAME-XXXXXXXX`
 
 if test -z "$TEMP" -o ! -d "$TEMP"; then
     echo Cannot create temporary directory 1>&2
diff --git a/tools/geographiclib-get-gravity.sh b/tools/geographiclib-get-gravity.sh
index 6db0a27..489bf95 100644
--- a/tools/geographiclib-get-gravity.sh
+++ b/tools/geographiclib-get-gravity.sh
@@ -28,6 +28,7 @@ table:
   egm96      360     2100    2100
   egm2008   2190    76000   75000
   wgs84      20        1       1
+  grs80      20        1       1
 
 The size columns give the download and installed sizes of the datasets.
 In addition you can specify
@@ -93,7 +94,7 @@ if test -z "$DEBUG"; then
 trap 'trap "" 0; test "$TEMP" && rm -rf "$TEMP"; exit 1' 1 2 3 9 15
 trap            'test "$TEMP" && rm -rf "$TEMP"'            0
 fi
-TEMP=`mktemp --tmpdir --quiet --directory $NAME-XXXXXXXX`
+TEMP=`mktemp -d -q -t $NAME-XXXXXXXX`
 
 if test -z "$TEMP" -o ! -d "$TEMP"; then
     echo Cannot create temporary directory 1>&2
@@ -114,6 +115,7 @@ cat > $TEMP/all <<EOF
 egm84
 egm96
 egm2008
+grs80
 wgs84
 EOF
 
diff --git a/tools/geographiclib-get-magnetic.sh b/tools/geographiclib-get-magnetic.sh
index 303eeaf..a34d846 100644
--- a/tools/geographiclib-get-magnetic.sh
+++ b/tools/geographiclib-get-magnetic.sh
@@ -91,7 +91,7 @@ if test -z "$DEBUG"; then
 trap 'trap "" 0; test "$TEMP" && rm -rf "$TEMP"; exit 1' 1 2 3 9 15
 trap            'test "$TEMP" && rm -rf "$TEMP"'            0
 fi
-TEMP=`mktemp --tmpdir --quiet --directory $NAME-XXXXXXXX`
+TEMP=`mktemp -d -q -t $NAME-XXXXXXXX`
 
 if test -z "$TEMP" -o ! -d "$TEMP"; then
     echo Cannot create temporary directory 1>&2
diff --git a/windows/CartConvert-vc10x.vcxproj b/windows/CartConvert-vc10x.vcxproj
new file mode 100644
index 0000000..6c573b1
--- /dev/null
+++ b/windows/CartConvert-vc10x.vcxproj
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{699D2AD1-5545-4FE8-AF72-7D5AAF5D8F65}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>CartConvert</RootNamespace>
+    <ProjectName>CartConvert</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>Geographic_d.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>Geographic.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="../man/CartConvert.usage" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="../tools/CartConvert.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
diff --git a/windows/ConicProj-vc10x.vcxproj b/windows/ConicProj-vc10x.vcxproj
new file mode 100644
index 0000000..f9d1741
--- /dev/null
+++ b/windows/ConicProj-vc10x.vcxproj
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{62483C58-6125-4DB8-889D-23F5CB1D9744}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>ConicProj</RootNamespace>
+    <ProjectName>ConicProj</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>Geographic_d.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>Geographic.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="../man/ConicProj.usage" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="../tools/ConicProj.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
diff --git a/windows/GeoConvert-vc10x.vcxproj b/windows/GeoConvert-vc10x.vcxproj
new file mode 100644
index 0000000..a9b2eef
--- /dev/null
+++ b/windows/GeoConvert-vc10x.vcxproj
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{C7BBC1C8-0E3A-4338-B47F-9DE092DC7034}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>GeoConvert</RootNamespace>
+    <ProjectName>GeoConvert</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>Geographic_d.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>Geographic.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="../man/GeoConvert.usage" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="../tools/GeoConvert.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
diff --git a/windows/GeodSolve-vc10x.vcxproj b/windows/GeodSolve-vc10x.vcxproj
new file mode 100644
index 0000000..d553afe
--- /dev/null
+++ b/windows/GeodSolve-vc10x.vcxproj
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{F1B64F66-7B95-4087-9619-4ABC20BEB591}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>GeodSolve</RootNamespace>
+    <ProjectName>GeodSolve</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>Geographic_d.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>Geographic.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="../man/GeodSolve.usage" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="../tools/GeodSolve.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
diff --git a/windows/GeodesicProj-vc10x.vcxproj b/windows/GeodesicProj-vc10x.vcxproj
new file mode 100644
index 0000000..a0efba1
--- /dev/null
+++ b/windows/GeodesicProj-vc10x.vcxproj
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{2E0C4271-25A7-4A94-8112-7DA0D1A8AF9A}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>GeodesicProj</RootNamespace>
+    <ProjectName>GeodesicProj</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>Geographic_d.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>Geographic.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="../man/GeodesicProj.usage" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="../tools/GeodesicProj.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
diff --git a/windows/Geographic-vc10.vcxproj b/windows/Geographic-vc10.vcxproj
index 4c8b70c..db2355f 100644
--- a/windows/Geographic-vc10.vcxproj
+++ b/windows/Geographic-vc10.vcxproj
@@ -169,6 +169,7 @@
     <ClInclude Include="../include/GeographicLib/OSGB.hpp" />
     <ClInclude Include="../include/GeographicLib/PolarStereographic.hpp" />
     <ClInclude Include="../include/GeographicLib/PolygonArea.hpp" />
+    <ClInclude Include="../include/GeographicLib/Rhumb.hpp" />
     <ClInclude Include="../include/GeographicLib/SphericalEngine.hpp" />
     <ClInclude Include="../include/GeographicLib/SphericalHarmonic.hpp" />
     <ClInclude Include="../include/GeographicLib/SphericalHarmonic1.hpp" />
@@ -192,6 +193,7 @@
     <ClCompile Include="../src/Geocentric.cpp" />
     <ClCompile Include="../src/Geodesic.cpp" />
     <ClCompile Include="../src/GeodesicExact.cpp" />
+    <ClCompile Include="../src/GeodesicExactC4.cpp" />
     <ClCompile Include="../src/GeodesicLine.cpp" />
     <ClCompile Include="../src/GeodesicLineExact.cpp" />
     <ClCompile Include="../src/Geohash.cpp" />
@@ -208,6 +210,7 @@
     <ClCompile Include="../src/OSGB.cpp" />
     <ClCompile Include="../src/PolarStereographic.cpp" />
     <ClCompile Include="../src/PolygonArea.cpp" />
+    <ClCompile Include="../src/Rhumb.cpp" />
     <ClCompile Include="../src/SphericalEngine.cpp" />
     <ClCompile Include="../src/TransverseMercator.cpp" />
     <ClCompile Include="../src/TransverseMercatorExact.cpp" />
diff --git a/windows/Geographic-vc10.vcxproj b/windows/Geographic-vc10x.vcxproj
similarity index 71%
copy from windows/Geographic-vc10.vcxproj
copy to windows/Geographic-vc10x.vcxproj
index 4c8b70c..443d979 100644
--- a/windows/Geographic-vc10.vcxproj
+++ b/windows/Geographic-vc10x.vcxproj
@@ -5,18 +5,10 @@
       <Configuration>Debug</Configuration>
       <Platform>Win32</Platform>
     </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
     <ProjectConfiguration Include="Release|Win32">
       <Configuration>Release</Configuration>
       <Platform>Win32</Platform>
     </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
   </ItemGroup>
   <PropertyGroup Label="Globals">
     <ProjectGuid>{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}</ProjectGuid>
@@ -32,58 +24,29 @@
     <CLRSupport>false</CLRSupport>
     <CharacterSet>NotSet</CharacterSet>
   </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CLRSupport>false</CLRSupport>
-    <CharacterSet>NotSet</CharacterSet>
-  </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
     <CLRSupport>false</CLRSupport>
     <CharacterSet>NotSet</CharacterSet>
   </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <CLRSupport>false</CLRSupport>
-    <CharacterSet>NotSet</CharacterSet>
-  </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
   </ImportGroup>
   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
   </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
   </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>true</LinkIncremental>
-    <TargetName>$(ProjectName)_d</TargetName>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <LinkIncremental>true</LinkIncremental>
+    <LinkIncremental>false</LinkIncremental>
     <TargetName>$(ProjectName)_d</TargetName>
-    <OutDir>$(SolutionDir)$(Configuration)64\</OutDir>
-    <IntDir>$(Configuration)64\</IntDir>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <LinkIncremental>false</LinkIncremental>
   </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <LinkIncremental>false</LinkIncremental>
-    <OutDir>$(SolutionDir)$(Configuration)64\</OutDir>
-    <IntDir>$(Configuration)64\</IntDir>
-  </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
       <WarningLevel>Level4</WarningLevel>
@@ -98,20 +61,6 @@
       </AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <ClCompile>
-      <WarningLevel>Level4</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <PrecompiledHeader>NotUsing</PrecompiledHeader>
-      <AdditionalIncludeDirectories>../include</AdditionalIncludeDirectories>
-    </ClCompile>
-    <Link>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalDependencies>
-      </AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
       <WarningLevel>Level4</WarningLevel>
@@ -125,19 +74,6 @@
       </AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <ClCompile>
-      <WarningLevel>Level4</WarningLevel>
-      <PreprocessorDefinitions>WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <PrecompiledHeader>NotUsing</PrecompiledHeader>
-      <AdditionalIncludeDirectories>../include</AdditionalIncludeDirectories>
-    </ClCompile>
-    <Link>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalDependencies>
-      </AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
   <ItemGroup>
     <ClInclude Include="../include/GeographicLib/Accumulator.hpp" />
     <ClInclude Include="../include/GeographicLib/AlbersEqualArea.hpp" />
@@ -169,6 +105,7 @@
     <ClInclude Include="../include/GeographicLib/OSGB.hpp" />
     <ClInclude Include="../include/GeographicLib/PolarStereographic.hpp" />
     <ClInclude Include="../include/GeographicLib/PolygonArea.hpp" />
+    <ClInclude Include="../include/GeographicLib/Rhumb.hpp" />
     <ClInclude Include="../include/GeographicLib/SphericalEngine.hpp" />
     <ClInclude Include="../include/GeographicLib/SphericalHarmonic.hpp" />
     <ClInclude Include="../include/GeographicLib/SphericalHarmonic1.hpp" />
@@ -192,6 +129,7 @@
     <ClCompile Include="../src/Geocentric.cpp" />
     <ClCompile Include="../src/Geodesic.cpp" />
     <ClCompile Include="../src/GeodesicExact.cpp" />
+    <ClCompile Include="../src/GeodesicExactC4.cpp" />
     <ClCompile Include="../src/GeodesicLine.cpp" />
     <ClCompile Include="../src/GeodesicLineExact.cpp" />
     <ClCompile Include="../src/Geohash.cpp" />
@@ -208,6 +146,7 @@
     <ClCompile Include="../src/OSGB.cpp" />
     <ClCompile Include="../src/PolarStereographic.cpp" />
     <ClCompile Include="../src/PolygonArea.cpp" />
+    <ClCompile Include="../src/Rhumb.cpp" />
     <ClCompile Include="../src/SphericalEngine.cpp" />
     <ClCompile Include="../src/TransverseMercator.cpp" />
     <ClCompile Include="../src/TransverseMercatorExact.cpp" />
diff --git a/windows/Geographic-vc8.vcproj b/windows/Geographic-vc8.vcproj
index 377b535..08fc999 100644
--- a/windows/Geographic-vc8.vcproj
+++ b/windows/Geographic-vc8.vcproj
@@ -309,6 +309,10 @@
 				>
 			</File>
 			<File
+				RelativePath="..\src\GeodesicExactC4.cpp"
+				>
+			</File>
+			<File
 				RelativePath="..\src\GeodesicLine.cpp"
 				>
 			</File>
@@ -373,6 +377,10 @@
 				>
 			</File>
 			<File
+				RelativePath="..\src\Rhumb.cpp"
+				>
+			</File>
+			<File
 				RelativePath="..\src\SphericalEngine.cpp"
 				>
 			</File>
@@ -519,6 +527,10 @@
 				>
 			</File>
 			<File
+				RelativePath="../include/GeographicLib/Rhumb.hpp"
+				>
+			</File>
+			<File
 				RelativePath="../include/GeographicLib/SphericalEngine.hpp"
 				>
 			</File>
diff --git a/windows/Geographic-vc9.vcproj b/windows/Geographic-vc9.vcproj
index 3a2937b..1f50ddc 100644
--- a/windows/Geographic-vc9.vcproj
+++ b/windows/Geographic-vc9.vcproj
@@ -312,6 +312,10 @@
 				>
 			</File>
 			<File
+				RelativePath="..\src\GeodesicExactC4.cpp"
+				>
+			</File>
+			<File
 				RelativePath="..\src\GeodesicLine.cpp"
 				>
 			</File>
@@ -376,6 +380,10 @@
 				>
 			</File>
 			<File
+				RelativePath="..\src\Rhumb.cpp"
+				>
+			</File>
+			<File
 				RelativePath="..\src\SphericalEngine.cpp"
 				>
 			</File>
@@ -522,6 +530,10 @@
 				>
 			</File>
 			<File
+				RelativePath="../include/GeographicLib/Rhumb.hpp"
+				>
+			</File>
+			<File
 				RelativePath="../include/GeographicLib/SphericalEngine.hpp"
 				>
 			</File>
diff --git a/windows/GeographicLib-vc10.sln b/windows/GeographicLib-vc10.sln
index 5a6ef59..ebd0aab 100644
--- a/windows/GeographicLib-vc10.sln
+++ b/windows/GeographicLib-vc10.sln
@@ -63,6 +63,12 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Gravity", "Gravity-vc10.vcx
 		{3D185FB1-192C-457B-A327-27CFAEB82D8A} = {3D185FB1-192C-457B-A327-27CFAEB82D8A}
 	EndProjectSection
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RhumbSolve", "RhumbSolve-vc10.vcxproj", "{57A786B5-042F-46BD-BBC6-74148C3F961F}"
+	ProjectSection(ProjectDependencies) = postProject
+		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1} = {4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}
+		{0FC0DED7-C708-468A-9E29-E7F245EE0C1C} = {0FC0DED7-C708-468A-9E29-E7F245EE0C1C}
+	EndProjectSection
+EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dotnet", "dotnet", "{ED7891B2-897F-4B32-87C9-1FB393720C62}"
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NETGeographic", "NETGeographic-vc10.vcxproj", "{BC1ADBEC-537D-487E-AF21-8B7025AAF46D}"
@@ -171,6 +177,14 @@ Global
 		{0FC0DED7-C708-468A-9E29-E7F245EE0C1C}.Release|Win32.Build.0 = Release|Win32
 		{0FC0DED7-C708-468A-9E29-E7F245EE0C1C}.Release|x64.ActiveCfg = Release|x64
 		{0FC0DED7-C708-468A-9E29-E7F245EE0C1C}.Release|x64.Build.0 = Release|x64
+		{57A786B5-042F-46BD-BBC6-74148C3F961F}.Debug|Win32.ActiveCfg = Debug|Win32
+		{57A786B5-042F-46BD-BBC6-74148C3F961F}.Debug|Win32.Build.0 = Debug|Win32
+		{57A786B5-042F-46BD-BBC6-74148C3F961F}.Debug|x64.ActiveCfg = Debug|x64
+		{57A786B5-042F-46BD-BBC6-74148C3F961F}.Debug|x64.Build.0 = Debug|x64
+		{57A786B5-042F-46BD-BBC6-74148C3F961F}.Release|Win32.ActiveCfg = Release|Win32
+		{57A786B5-042F-46BD-BBC6-74148C3F961F}.Release|Win32.Build.0 = Release|Win32
+		{57A786B5-042F-46BD-BBC6-74148C3F961F}.Release|x64.ActiveCfg = Release|x64
+		{57A786B5-042F-46BD-BBC6-74148C3F961F}.Release|x64.Build.0 = Release|x64
 		{BC1ADBEC-537D-487E-AF21-8B7025AAF46D}.Debug|Win32.ActiveCfg = Debug|Win32
 		{BC1ADBEC-537D-487E-AF21-8B7025AAF46D}.Debug|Win32.Build.0 = Debug|Win32
 		{BC1ADBEC-537D-487E-AF21-8B7025AAF46D}.Debug|x64.ActiveCfg = Debug|x64
@@ -202,6 +216,7 @@ Global
 		{62483C58-6125-4DB8-889D-23F5CB1D9744} = {E6598B23-7D6F-4801-8579-C0C6BEBDE659}
 		{3D185FB1-192C-457B-A327-27CFAEB82D8A} = {E6598B23-7D6F-4801-8579-C0C6BEBDE659}
 		{0FC0DED7-C708-468A-9E29-E7F245EE0C1C} = {E6598B23-7D6F-4801-8579-C0C6BEBDE659}
+		{57A786B5-042F-46BD-BBC6-74148C3F961F} = {E6598B23-7D6F-4801-8579-C0C6BEBDE659}
 		{BC1ADBEC-537D-487E-AF21-8B7025AAF46D} = {ED7891B2-897F-4B32-87C9-1FB393720C62}
 		{74B48389-E1D1-491F-B198-ADD4878C3F2B} = {ED7891B2-897F-4B32-87C9-1FB393720C62}
 	EndGlobalSection
diff --git a/windows/GeographicLib-vc8.sln b/windows/GeographicLib-vc10x.sln
similarity index 61%
copy from windows/GeographicLib-vc8.sln
copy to windows/GeographicLib-vc10x.sln
index 847409a..6dc10b7 100644
--- a/windows/GeographicLib-vc8.sln
+++ b/windows/GeographicLib-vc10x.sln
@@ -1,162 +1,126 @@
-Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Geographic", "Geographic-vc8.vcproj", "{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}"
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Geographic", "Geographic-vc10x.vcxproj", "{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}"
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GeoConvert", "GeoConvert-vc8.vcproj", "{C7BBC1C8-0E3A-4338-B47F-9DE092DC7034}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GeoConvert", "GeoConvert-vc10x.vcxproj", "{C7BBC1C8-0E3A-4338-B47F-9DE092DC7034}"
 	ProjectSection(ProjectDependencies) = postProject
 		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1} = {4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}
 	EndProjectSection
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GeodSolve", "GeodSolve-vc8.vcproj", "{F1B64F66-7B95-4087-9619-4ABC20BEB591}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GeodSolve", "GeodSolve-vc10x.vcxproj", "{F1B64F66-7B95-4087-9619-4ABC20BEB591}"
 	ProjectSection(ProjectDependencies) = postProject
 		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1} = {4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}
 		{C7BBC1C8-0E3A-4338-B47F-9DE092DC7034} = {C7BBC1C8-0E3A-4338-B47F-9DE092DC7034}
 	EndProjectSection
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GeoidEval", "GeoidEval-vc8.vcproj", "{0507FE91-AD45-4630-88EF-DABFA9A02FB4}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GeoidEval", "GeoidEval-vc10x.vcxproj", "{0507FE91-AD45-4630-88EF-DABFA9A02FB4}"
 	ProjectSection(ProjectDependencies) = postProject
 		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1} = {4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}
 		{F1B64F66-7B95-4087-9619-4ABC20BEB591} = {F1B64F66-7B95-4087-9619-4ABC20BEB591}
 	EndProjectSection
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CartConvert", "CartConvert-vc8.vcproj", "{699D2AD1-5545-4FE8-AF72-7D5AAF5D8F65}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CartConvert", "CartConvert-vc10x.vcxproj", "{699D2AD1-5545-4FE8-AF72-7D5AAF5D8F65}"
 	ProjectSection(ProjectDependencies) = postProject
 		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1} = {4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}
 		{0507FE91-AD45-4630-88EF-DABFA9A02FB4} = {0507FE91-AD45-4630-88EF-DABFA9A02FB4}
 	EndProjectSection
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TransverseMercatorProj", "TransverseMercatorProj-vc8.vcproj", "{73FED050-34B7-40EE-96FA-6EABA84F6F9B}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TransverseMercatorProj", "TransverseMercatorProj-vc10x.vcxproj", "{73FED050-34B7-40EE-96FA-6EABA84F6F9B}"
 	ProjectSection(ProjectDependencies) = postProject
 		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1} = {4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}
 		{699D2AD1-5545-4FE8-AF72-7D5AAF5D8F65} = {699D2AD1-5545-4FE8-AF72-7D5AAF5D8F65}
 	EndProjectSection
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GeodesicProj", "GeodesicProj-vc8.vcproj", "{2E0C4271-25A7-4A94-8112-7DA0D1A8AF9A}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GeodesicProj", "GeodesicProj-vc10x.vcxproj", "{2E0C4271-25A7-4A94-8112-7DA0D1A8AF9A}"
 	ProjectSection(ProjectDependencies) = postProject
 		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1} = {4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}
 		{73FED050-34B7-40EE-96FA-6EABA84F6F9B} = {73FED050-34B7-40EE-96FA-6EABA84F6F9B}
 	EndProjectSection
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Planimeter", "Planimeter-vc8.vcproj", "{AAA7F386-D98F-4E1C-BA16-628CEF1DB440}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Planimeter", "Planimeter-vc10x.vcxproj", "{AAA7F386-D98F-4E1C-BA16-628CEF1DB440}"
 	ProjectSection(ProjectDependencies) = postProject
 		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1} = {4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}
 		{2E0C4271-25A7-4A94-8112-7DA0D1A8AF9A} = {2E0C4271-25A7-4A94-8112-7DA0D1A8AF9A}
 	EndProjectSection
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ConicProj", "ConicProj-vc8.vcproj", "{62483C58-6125-4DB8-889D-23F5CB1D9744}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ConicProj", "ConicProj-vc10x.vcxproj", "{62483C58-6125-4DB8-889D-23F5CB1D9744}"
 	ProjectSection(ProjectDependencies) = postProject
 		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1} = {4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}
 		{AAA7F386-D98F-4E1C-BA16-628CEF1DB440} = {AAA7F386-D98F-4E1C-BA16-628CEF1DB440}
 	EndProjectSection
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MagneticField", "MagneticField-vc8.vcproj", "{3D185FB1-192C-457B-A327-27CFAEB82D8A}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MagneticField", "MagneticField-vc10x.vcxproj", "{3D185FB1-192C-457B-A327-27CFAEB82D8A}"
 	ProjectSection(ProjectDependencies) = postProject
 		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1} = {4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}
 		{62483C58-6125-4DB8-889D-23F5CB1D9744} = {62483C58-6125-4DB8-889D-23F5CB1D9744}
 	EndProjectSection
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Gravity", "Gravity-vc8.vcproj", "{0FC0DED7-C708-468A-9E29-E7F245EE0C1C}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Gravity", "Gravity-vc10x.vcxproj", "{0FC0DED7-C708-468A-9E29-E7F245EE0C1C}"
 	ProjectSection(ProjectDependencies) = postProject
 		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1} = {4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}
 		{3D185FB1-192C-457B-A327-27CFAEB82D8A} = {3D185FB1-192C-457B-A327-27CFAEB82D8A}
 	EndProjectSection
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RhumbSolve", "RhumbSolve-vc10x.vcxproj", "{57A786B5-042F-46BD-BBC6-74148C3F961F}"
+	ProjectSection(ProjectDependencies) = postProject
+		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1} = {4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}
+		{0FC0DED7-C708-468A-9E29-E7F245EE0C1C} = {0FC0DED7-C708-468A-9E29-E7F245EE0C1C}
+	EndProjectSection
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Win32 = Debug|Win32
-		Debug|x64 = Debug|x64
 		Release|Win32 = Release|Win32
-		Release|x64 = Release|x64
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}.Debug|Win32.ActiveCfg = Debug|Win32
 		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}.Debug|Win32.Build.0 = Debug|Win32
-		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}.Debug|x64.ActiveCfg = Debug|x64
-		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}.Debug|x64.Build.0 = Debug|x64
 		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}.Release|Win32.ActiveCfg = Release|Win32
 		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}.Release|Win32.Build.0 = Release|Win32
-		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}.Release|x64.ActiveCfg = Release|x64
-		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}.Release|x64.Build.0 = Release|x64
 		{C7BBC1C8-0E3A-4338-B47F-9DE092DC7034}.Debug|Win32.ActiveCfg = Debug|Win32
 		{C7BBC1C8-0E3A-4338-B47F-9DE092DC7034}.Debug|Win32.Build.0 = Debug|Win32
-		{C7BBC1C8-0E3A-4338-B47F-9DE092DC7034}.Debug|x64.ActiveCfg = Debug|x64
-		{C7BBC1C8-0E3A-4338-B47F-9DE092DC7034}.Debug|x64.Build.0 = Debug|x64
 		{C7BBC1C8-0E3A-4338-B47F-9DE092DC7034}.Release|Win32.ActiveCfg = Release|Win32
 		{C7BBC1C8-0E3A-4338-B47F-9DE092DC7034}.Release|Win32.Build.0 = Release|Win32
-		{C7BBC1C8-0E3A-4338-B47F-9DE092DC7034}.Release|x64.ActiveCfg = Release|x64
-		{C7BBC1C8-0E3A-4338-B47F-9DE092DC7034}.Release|x64.Build.0 = Release|x64
 		{F1B64F66-7B95-4087-9619-4ABC20BEB591}.Debug|Win32.ActiveCfg = Debug|Win32
 		{F1B64F66-7B95-4087-9619-4ABC20BEB591}.Debug|Win32.Build.0 = Debug|Win32
-		{F1B64F66-7B95-4087-9619-4ABC20BEB591}.Debug|x64.ActiveCfg = Debug|x64
-		{F1B64F66-7B95-4087-9619-4ABC20BEB591}.Debug|x64.Build.0 = Debug|x64
 		{F1B64F66-7B95-4087-9619-4ABC20BEB591}.Release|Win32.ActiveCfg = Release|Win32
 		{F1B64F66-7B95-4087-9619-4ABC20BEB591}.Release|Win32.Build.0 = Release|Win32
-		{F1B64F66-7B95-4087-9619-4ABC20BEB591}.Release|x64.ActiveCfg = Release|x64
-		{F1B64F66-7B95-4087-9619-4ABC20BEB591}.Release|x64.Build.0 = Release|x64
 		{0507FE91-AD45-4630-88EF-DABFA9A02FB4}.Debug|Win32.ActiveCfg = Debug|Win32
 		{0507FE91-AD45-4630-88EF-DABFA9A02FB4}.Debug|Win32.Build.0 = Debug|Win32
-		{0507FE91-AD45-4630-88EF-DABFA9A02FB4}.Debug|x64.ActiveCfg = Debug|x64
-		{0507FE91-AD45-4630-88EF-DABFA9A02FB4}.Debug|x64.Build.0 = Debug|x64
 		{0507FE91-AD45-4630-88EF-DABFA9A02FB4}.Release|Win32.ActiveCfg = Release|Win32
 		{0507FE91-AD45-4630-88EF-DABFA9A02FB4}.Release|Win32.Build.0 = Release|Win32
-		{0507FE91-AD45-4630-88EF-DABFA9A02FB4}.Release|x64.ActiveCfg = Release|x64
-		{0507FE91-AD45-4630-88EF-DABFA9A02FB4}.Release|x64.Build.0 = Release|x64
 		{699D2AD1-5545-4FE8-AF72-7D5AAF5D8F65}.Debug|Win32.ActiveCfg = Debug|Win32
 		{699D2AD1-5545-4FE8-AF72-7D5AAF5D8F65}.Debug|Win32.Build.0 = Debug|Win32
-		{699D2AD1-5545-4FE8-AF72-7D5AAF5D8F65}.Debug|x64.ActiveCfg = Debug|x64
-		{699D2AD1-5545-4FE8-AF72-7D5AAF5D8F65}.Debug|x64.Build.0 = Debug|x64
 		{699D2AD1-5545-4FE8-AF72-7D5AAF5D8F65}.Release|Win32.ActiveCfg = Release|Win32
 		{699D2AD1-5545-4FE8-AF72-7D5AAF5D8F65}.Release|Win32.Build.0 = Release|Win32
-		{699D2AD1-5545-4FE8-AF72-7D5AAF5D8F65}.Release|x64.ActiveCfg = Release|x64
-		{699D2AD1-5545-4FE8-AF72-7D5AAF5D8F65}.Release|x64.Build.0 = Release|x64
 		{73FED050-34B7-40EE-96FA-6EABA84F6F9B}.Debug|Win32.ActiveCfg = Debug|Win32
 		{73FED050-34B7-40EE-96FA-6EABA84F6F9B}.Debug|Win32.Build.0 = Debug|Win32
-		{73FED050-34B7-40EE-96FA-6EABA84F6F9B}.Debug|x64.ActiveCfg = Debug|x64
-		{73FED050-34B7-40EE-96FA-6EABA84F6F9B}.Debug|x64.Build.0 = Debug|x64
 		{73FED050-34B7-40EE-96FA-6EABA84F6F9B}.Release|Win32.ActiveCfg = Release|Win32
 		{73FED050-34B7-40EE-96FA-6EABA84F6F9B}.Release|Win32.Build.0 = Release|Win32
-		{73FED050-34B7-40EE-96FA-6EABA84F6F9B}.Release|x64.ActiveCfg = Release|x64
-		{73FED050-34B7-40EE-96FA-6EABA84F6F9B}.Release|x64.Build.0 = Release|x64
 		{2E0C4271-25A7-4A94-8112-7DA0D1A8AF9A}.Debug|Win32.ActiveCfg = Debug|Win32
 		{2E0C4271-25A7-4A94-8112-7DA0D1A8AF9A}.Debug|Win32.Build.0 = Debug|Win32
-		{2E0C4271-25A7-4A94-8112-7DA0D1A8AF9A}.Debug|x64.ActiveCfg = Debug|x64
-		{2E0C4271-25A7-4A94-8112-7DA0D1A8AF9A}.Debug|x64.Build.0 = Debug|x64
 		{2E0C4271-25A7-4A94-8112-7DA0D1A8AF9A}.Release|Win32.ActiveCfg = Release|Win32
 		{2E0C4271-25A7-4A94-8112-7DA0D1A8AF9A}.Release|Win32.Build.0 = Release|Win32
-		{2E0C4271-25A7-4A94-8112-7DA0D1A8AF9A}.Release|x64.ActiveCfg = Release|x64
-		{2E0C4271-25A7-4A94-8112-7DA0D1A8AF9A}.Release|x64.Build.0 = Release|x64
 		{AAA7F386-D98F-4E1C-BA16-628CEF1DB440}.Debug|Win32.ActiveCfg = Debug|Win32
 		{AAA7F386-D98F-4E1C-BA16-628CEF1DB440}.Debug|Win32.Build.0 = Debug|Win32
-		{AAA7F386-D98F-4E1C-BA16-628CEF1DB440}.Debug|x64.ActiveCfg = Debug|x64
-		{AAA7F386-D98F-4E1C-BA16-628CEF1DB440}.Debug|x64.Build.0 = Debug|x64
 		{AAA7F386-D98F-4E1C-BA16-628CEF1DB440}.Release|Win32.ActiveCfg = Release|Win32
 		{AAA7F386-D98F-4E1C-BA16-628CEF1DB440}.Release|Win32.Build.0 = Release|Win32
-		{AAA7F386-D98F-4E1C-BA16-628CEF1DB440}.Release|x64.ActiveCfg = Release|x64
-		{AAA7F386-D98F-4E1C-BA16-628CEF1DB440}.Release|x64.Build.0 = Release|x64
 		{62483C58-6125-4DB8-889D-23F5CB1D9744}.Debug|Win32.ActiveCfg = Debug|Win32
 		{62483C58-6125-4DB8-889D-23F5CB1D9744}.Debug|Win32.Build.0 = Debug|Win32
-		{62483C58-6125-4DB8-889D-23F5CB1D9744}.Debug|x64.ActiveCfg = Debug|x64
-		{62483C58-6125-4DB8-889D-23F5CB1D9744}.Debug|x64.Build.0 = Debug|x64
 		{62483C58-6125-4DB8-889D-23F5CB1D9744}.Release|Win32.ActiveCfg = Release|Win32
 		{62483C58-6125-4DB8-889D-23F5CB1D9744}.Release|Win32.Build.0 = Release|Win32
-		{62483C58-6125-4DB8-889D-23F5CB1D9744}.Release|x64.ActiveCfg = Release|x64
-		{62483C58-6125-4DB8-889D-23F5CB1D9744}.Release|x64.Build.0 = Release|x64
 		{3D185FB1-192C-457B-A327-27CFAEB82D8A}.Debug|Win32.ActiveCfg = Debug|Win32
 		{3D185FB1-192C-457B-A327-27CFAEB82D8A}.Debug|Win32.Build.0 = Debug|Win32
-		{3D185FB1-192C-457B-A327-27CFAEB82D8A}.Debug|x64.ActiveCfg = Debug|x64
-		{3D185FB1-192C-457B-A327-27CFAEB82D8A}.Debug|x64.Build.0 = Debug|x64
 		{3D185FB1-192C-457B-A327-27CFAEB82D8A}.Release|Win32.ActiveCfg = Release|Win32
 		{3D185FB1-192C-457B-A327-27CFAEB82D8A}.Release|Win32.Build.0 = Release|Win32
-		{3D185FB1-192C-457B-A327-27CFAEB82D8A}.Release|x64.ActiveCfg = Release|x64
-		{3D185FB1-192C-457B-A327-27CFAEB82D8A}.Release|x64.Build.0 = Release|x64
 		{0FC0DED7-C708-468A-9E29-E7F245EE0C1C}.Debug|Win32.ActiveCfg = Debug|Win32
 		{0FC0DED7-C708-468A-9E29-E7F245EE0C1C}.Debug|Win32.Build.0 = Debug|Win32
-		{0FC0DED7-C708-468A-9E29-E7F245EE0C1C}.Debug|x64.ActiveCfg = Debug|x64
-		{0FC0DED7-C708-468A-9E29-E7F245EE0C1C}.Debug|x64.Build.0 = Debug|x64
 		{0FC0DED7-C708-468A-9E29-E7F245EE0C1C}.Release|Win32.ActiveCfg = Release|Win32
 		{0FC0DED7-C708-468A-9E29-E7F245EE0C1C}.Release|Win32.Build.0 = Release|Win32
-		{0FC0DED7-C708-468A-9E29-E7F245EE0C1C}.Release|x64.ActiveCfg = Release|x64
-		{0FC0DED7-C708-468A-9E29-E7F245EE0C1C}.Release|x64.Build.0 = Release|x64
+		{57A786B5-042F-46BD-BBC6-74148C3F961F}.Debug|Win32.ActiveCfg = Debug|Win32
+		{57A786B5-042F-46BD-BBC6-74148C3F961F}.Debug|Win32.Build.0 = Debug|Win32
+		{57A786B5-042F-46BD-BBC6-74148C3F961F}.Release|Win32.ActiveCfg = Release|Win32
+		{57A786B5-042F-46BD-BBC6-74148C3F961F}.Release|Win32.Build.0 = Release|Win32
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
diff --git a/windows/GeographicLib-vc8.sln b/windows/GeographicLib-vc8.sln
index 847409a..02b0c40 100644
--- a/windows/GeographicLib-vc8.sln
+++ b/windows/GeographicLib-vc8.sln
@@ -61,6 +61,12 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Gravity", "Gravity-vc8.vcpr
 		{3D185FB1-192C-457B-A327-27CFAEB82D8A} = {3D185FB1-192C-457B-A327-27CFAEB82D8A}
 	EndProjectSection
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RhumbSolve", "RhumbSolve-vc98.vcproj", "{57A786B5-042F-46BD-BBC6-74148C3F961F}"
+	ProjectSection(ProjectDependencies) = postProject
+		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1} = {4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}
+		{0FC0DED7-C708-468A-9E29-E7F245EE0C1C} = {0FC0DED7-C708-468A-9E29-E7F245EE0C1C}
+	EndProjectSection
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Win32 = Debug|Win32
@@ -157,6 +163,14 @@ Global
 		{0FC0DED7-C708-468A-9E29-E7F245EE0C1C}.Release|Win32.Build.0 = Release|Win32
 		{0FC0DED7-C708-468A-9E29-E7F245EE0C1C}.Release|x64.ActiveCfg = Release|x64
 		{0FC0DED7-C708-468A-9E29-E7F245EE0C1C}.Release|x64.Build.0 = Release|x64
+		{57A786B5-042F-46BD-BBC6-74148C3F961F}.Debug|Win32.ActiveCfg = Debug|Win32
+		{57A786B5-042F-46BD-BBC6-74148C3F961F}.Debug|Win32.Build.0 = Debug|Win32
+		{57A786B5-042F-46BD-BBC6-74148C3F961F}.Debug|x64.ActiveCfg = Debug|x64
+		{57A786B5-042F-46BD-BBC6-74148C3F961F}.Debug|x64.Build.0 = Debug|x64
+		{57A786B5-042F-46BD-BBC6-74148C3F961F}.Release|Win32.ActiveCfg = Release|Win32
+		{57A786B5-042F-46BD-BBC6-74148C3F961F}.Release|Win32.Build.0 = Release|Win32
+		{57A786B5-042F-46BD-BBC6-74148C3F961F}.Release|x64.ActiveCfg = Release|x64
+		{57A786B5-042F-46BD-BBC6-74148C3F961F}.Release|x64.Build.0 = Release|x64
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
diff --git a/windows/GeographicLib-vc9.sln b/windows/GeographicLib-vc9.sln
index e84a08a..ce2ce4b 100644
--- a/windows/GeographicLib-vc9.sln
+++ b/windows/GeographicLib-vc9.sln
@@ -61,6 +61,12 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Gravity", "Gravity-vc9.vcpr
 		{3D185FB1-192C-457B-A327-27CFAEB82D8A} = {3D185FB1-192C-457B-A327-27CFAEB82D8A}
 	EndProjectSection
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RhumbSolve", "RhumbSolve-vc9.vcproj", "{57A786B5-042F-46BD-BBC6-74148C3F961F}"
+	ProjectSection(ProjectDependencies) = postProject
+		{4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1} = {4CFBCD6C-956C-42BC-A863-3C60F3ED9CC1}
+		{0FC0DED7-C708-468A-9E29-E7F245EE0C1C} = {0FC0DED7-C708-468A-9E29-E7F245EE0C1C}
+	EndProjectSection
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Win32 = Debug|Win32
@@ -157,6 +163,14 @@ Global
 		{0FC0DED7-C708-468A-9E29-E7F245EE0C1C}.Release|Win32.Build.0 = Release|Win32
 		{0FC0DED7-C708-468A-9E29-E7F245EE0C1C}.Release|x64.ActiveCfg = Release|x64
 		{0FC0DED7-C708-468A-9E29-E7F245EE0C1C}.Release|x64.Build.0 = Release|x64
+		{57A786B5-042F-46BD-BBC6-74148C3F961F}.Debug|Win32.ActiveCfg = Debug|Win32
+		{57A786B5-042F-46BD-BBC6-74148C3F961F}.Debug|Win32.Build.0 = Debug|Win32
+		{57A786B5-042F-46BD-BBC6-74148C3F961F}.Debug|x64.ActiveCfg = Debug|x64
+		{57A786B5-042F-46BD-BBC6-74148C3F961F}.Debug|x64.Build.0 = Debug|x64
+		{57A786B5-042F-46BD-BBC6-74148C3F961F}.Release|Win32.ActiveCfg = Release|Win32
+		{57A786B5-042F-46BD-BBC6-74148C3F961F}.Release|Win32.Build.0 = Release|Win32
+		{57A786B5-042F-46BD-BBC6-74148C3F961F}.Release|x64.ActiveCfg = Release|x64
+		{57A786B5-042F-46BD-BBC6-74148C3F961F}.Release|x64.Build.0 = Release|x64
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
diff --git a/windows/GeoidEval-vc10x.vcxproj b/windows/GeoidEval-vc10x.vcxproj
new file mode 100644
index 0000000..ffef14d
--- /dev/null
+++ b/windows/GeoidEval-vc10x.vcxproj
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{0507FE91-AD45-4630-88EF-DABFA9A02FB4}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>GeoidEval</RootNamespace>
+    <ProjectName>GeoidEval</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>Geographic_d.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>Geographic.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="../man/GeoidEval.usage" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="../tools/GeoidEval.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
diff --git a/windows/Gravity-vc10x.vcxproj b/windows/Gravity-vc10x.vcxproj
new file mode 100644
index 0000000..680c350
--- /dev/null
+++ b/windows/Gravity-vc10x.vcxproj
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{0FC0DED7-C708-468A-9E29-E7F245EE0C1C}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>Gravity</RootNamespace>
+    <ProjectName>Gravity</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>Geographic_d.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>Geographic.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="../man/Gravity.usage" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="../tools/Gravity.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
diff --git a/windows/MagneticField-vc10x.vcxproj b/windows/MagneticField-vc10x.vcxproj
new file mode 100644
index 0000000..542e3b4
--- /dev/null
+++ b/windows/MagneticField-vc10x.vcxproj
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{3D185FB1-192C-457B-A327-27CFAEB82D8A}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>MagneticField</RootNamespace>
+    <ProjectName>MagneticField</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>Geographic_d.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>Geographic.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="../man/MagneticField.usage" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="../tools/MagneticField.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
diff --git a/windows/NETGeographic-vc10.vcxproj b/windows/NETGeographic-vc10.vcxproj
index a809382..14a9b37 100644
--- a/windows/NETGeographic-vc10.vcxproj
+++ b/windows/NETGeographic-vc10.vcxproj
@@ -177,6 +177,7 @@
     <ClInclude Include="../dotnet/NETGeographicLib/TransverseMercator.h" />
     <ClInclude Include="../dotnet/NETGeographicLib/TransverseMercatorExact.h" />
     <ClInclude Include="../dotnet/NETGeographicLib/UTMUPS.h" />
+    <ClInclude Include="..\dotnet\NETGeographicLib\Rhumb.h" />
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="../dotnet/NETGeographicLib/Accumulator.cpp" />
@@ -222,6 +223,7 @@
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
     </ClCompile>
+    <ClCompile Include="..\dotnet\NETGeographicLib\Rhumb.cpp" />
   </ItemGroup>
   <ItemGroup>
     <None Include="../dotnet/NETGeographicLib/ReadMe.txt" />
diff --git a/windows/Planimeter-vc10x.vcxproj b/windows/Planimeter-vc10x.vcxproj
new file mode 100644
index 0000000..10b8e41
--- /dev/null
+++ b/windows/Planimeter-vc10x.vcxproj
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{AAA7F386-D98F-4E1C-BA16-628CEF1DB440}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>Planimeter</RootNamespace>
+    <ProjectName>Planimeter</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>Geographic_d.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>Geographic.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="../man/Planimeter.usage" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="../tools/Planimeter.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
diff --git a/windows/RhumbSolve-vc10.vcxproj b/windows/RhumbSolve-vc10.vcxproj
new file mode 100644
index 0000000..2406d98
--- /dev/null
+++ b/windows/RhumbSolve-vc10.vcxproj
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{57A786B5-042F-46BD-BBC6-74148C3F961F}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>RhumbSolve</RootNamespace>
+    <ProjectName>RhumbSolve</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(SolutionDir)$(Configuration)64\</OutDir>
+    <IntDir>$(Configuration)64\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(SolutionDir)$(Configuration)64\</OutDir>
+    <IntDir>$(Configuration)64\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>Geographic_d.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>Geographic_d.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>Geographic.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>Geographic.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="../man/RhumbSolve.usage" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="../tools/RhumbSolve.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
diff --git a/windows/RhumbSolve-vc10x.vcxproj b/windows/RhumbSolve-vc10x.vcxproj
new file mode 100644
index 0000000..522fc13
--- /dev/null
+++ b/windows/RhumbSolve-vc10x.vcxproj
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{57A786B5-042F-46BD-BBC6-74148C3F961F}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>RhumbSolve</RootNamespace>
+    <ProjectName>RhumbSolve</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>Geographic_d.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>Geographic.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="../man/RhumbSolve.usage" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="../tools/RhumbSolve.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
diff --git a/windows/RhumbSolve-vc8.vcproj b/windows/RhumbSolve-vc8.vcproj
new file mode 100644
index 0000000..bf05532
--- /dev/null
+++ b/windows/RhumbSolve-vc8.vcproj
@@ -0,0 +1,340 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="RhumbSolve"
+	ProjectGUID="{57A786B5-042F-46BD-BBC6-74148C3F961F}"
+	RootNamespace="RhumbSolve"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../include;../man"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="Geographic_d.lib"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="$(OutDir)"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../include;../man"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="Geographic.lib"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="$(OutDir)"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			OutputDirectory="$(ConfigurationName)64"
+			IntermediateDirectory="$(ConfigurationName)64"
+			ConfigurationType="1"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../include;../man"
+				PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="Geographic_d.lib"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="$(OutDir)"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			OutputDirectory="$(ConfigurationName)64"
+			IntermediateDirectory="$(ConfigurationName)64"
+			ConfigurationType="1"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../include;../man"
+				PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="Geographic.lib"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="$(OutDir)"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\tools\RhumbSolve.cpp"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath="..\man\RhumbSolve.usage"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/windows/RhumbSolve-vc9.vcproj b/windows/RhumbSolve-vc9.vcproj
new file mode 100644
index 0000000..993b9e4
--- /dev/null
+++ b/windows/RhumbSolve-vc9.vcproj
@@ -0,0 +1,351 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="RhumbSolve"
+	ProjectGUID="{57A786B5-042F-46BD-BBC6-74148C3F961F}"
+	RootNamespace="RhumbSolve"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../include;../man"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="Geographic_d.lib"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="$(OutDir)"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				AdditionalIncludeDirectories="../include;../man"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="Geographic.lib"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="$(OutDir)"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			OutputDirectory="$(ConfigurationName)64"
+			IntermediateDirectory="$(ConfigurationName)64"
+			ConfigurationType="1"
+			CharacterSet="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../include;../man"
+				PreprocessorDefinitions="WIN64;_DEBUG;_CONSOLE"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="Geographic_d.lib"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="$(OutDir)"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			OutputDirectory="$(ConfigurationName)64"
+			IntermediateDirectory="$(ConfigurationName)64"
+			ConfigurationType="1"
+			CharacterSet="0"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				AdditionalIncludeDirectories="../include;../man"
+				PreprocessorDefinitions="WIN64;NDEBUG;_CONSOLE"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="Geographic.lib"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="$(OutDir)"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\tools\RhumbSolve.cpp"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath="..\man\RhumbSolve.usage"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/windows/TransverseMercatorProj-vc10x.vcxproj b/windows/TransverseMercatorProj-vc10x.vcxproj
new file mode 100644
index 0000000..40f6dbf
--- /dev/null
+++ b/windows/TransverseMercatorProj-vc10x.vcxproj
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{73FED050-34B7-40EE-96FA-6EABA84F6F9B}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>TransverseMercatorProj</RootNamespace>
+    <ProjectName>TransverseMercatorProj</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>Geographic_d.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../include;../man</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>Geographic.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="../man/TransverseMercatorProj.usage" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="../tools/TransverseMercatorProj.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/geographiclib.git



More information about the Pkg-grass-devel mailing list